> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.outpost.pub/llms.txt
> Use this file to discover all available pages before exploring further.

# BigQuery Integration (Invite Only)

> Export Outpost and Ghost data to Google BigQuery for advanced analytics and reporting, available by invitation only.

export const PlanStatus = ({tier, status, beta, deprecated}) => {
  const variants = {
    luna: {
      bg: "#8340B9",
      color: "#ffffff",
      border: "1px solid #8340B9"
    },
    voyager: {
      bg: "#6B2FA0",
      color: "#ffffff",
      border: "1px solid #6B2FA0"
    },
    "space-station": {
      bg: "transparent",
      color: "#8340B9",
      border: "1px solid #8340B9"
    },
    "all-plans": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    labs: {
      bg: "transparent",
      color: "#a16207",
      border: "1px solid #a16207"
    },
    beta: {
      bg: "transparent",
      color: "#a16207",
      border: "1px solid #a16207"
    },
    "invite-only": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    bespoke: {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    "outpost-hosted": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    deprecated: {
      bg: "transparent",
      color: "#b91c1c",
      border: "1px solid #b91c1c"
    }
  };
  const chip = (variant, label) => {
    const s = variants[variant] || variants["all-plans"];
    return <span key={variant + ":" + label} style={{
      display: "inline-flex",
      alignItems: "center",
      padding: "0.15rem 0.55rem",
      fontSize: "0.7rem",
      fontWeight: 700,
      letterSpacing: "0.05em",
      textTransform: "uppercase",
      borderRadius: "3px",
      lineHeight: 1.4,
      whiteSpace: "nowrap",
      backgroundColor: s.bg,
      color: s.color,
      border: s.border
    }}>
        {label}
      </span>;
  };
  const tierLabel = {
    "luna": "Luna",
    "voyager+": "Voyager+",
    "voyager-luna": "Voyager + Luna",
    "space-station+": "Space Station+",
    "all-plans": "All plans"
  };
  const tierVariant = {
    "luna": "luna",
    "voyager+": "voyager",
    "voyager-luna": "voyager",
    "space-station+": "space-station",
    "all-plans": "all-plans"
  };
  const statusLabel = {
    "labs": "Labs",
    "invite-only": "Invite-only",
    "bespoke": "Bespoke",
    "deprecated": "Deprecated",
    "outpost-hosted": "Outpost Hosted"
  };
  return <span style={{
    display: "inline-flex",
    gap: "0.4rem",
    flexWrap: "wrap",
    alignItems: "center",
    margin: "0 0 1.25rem 0"
  }}>
      {tier && chip(tierVariant[tier], tierLabel[tier])}
      {status && chip(status, statusLabel[status])}
      {beta && chip("beta", "Beta")}
      {deprecated && chip("deprecated", "Deprecated")}
    </span>;
};

<PlanStatus status="invite-only" />

<Info>
  The BigQuery integration is available by invitation only. [Contact Outpost](https://outpost.pub/contact) to request access.
</Info>

Outpost's BigQuery integration exports your member, subscription, and analytics data to Google BigQuery, enabling advanced analysis and custom reporting.

## What gets exported

Outpost populates three BigQuery tables:

| Table                   | Description                                                            |
| ----------------------- | ---------------------------------------------------------------------- |
| **Ghost Members**       | Member records with subscription status, tier, labels, and signup date |
| **Stripe Customers**    | Payment history, subscription status, LTV, and billing data            |
| **Plausible Analytics** | Page view data from your Plausible integration (if connected)          |

## Setup

<Steps>
  <Step title="Create a Google Cloud project">
    If you don't have one, create a project in [Google Cloud Console](https://console.cloud.google.com).
  </Step>

  <Step title="Create a BigQuery dataset">
    In BigQuery, create a dataset to receive Outpost data. Note the dataset ID.
  </Step>

  <Step title="Create a service account">
    Create a service account in Google Cloud with **BigQuery Data Editor** and **BigQuery Job User** roles. Download the credentials file (JSON format).
  </Step>

  <Step title="Connect in Outpost">
    Go to **Settings → Integrations → BigQuery** and upload the credentials file. Enter your project ID and dataset name, then enable the data sources you want to export — Stripe, Ghost, and/or Plausible — and optionally set a table name for each.
  </Step>

  <Step title="Data starts flowing">
    Once connected, Outpost begins writing rows to BigQuery as members change. No manual export step is required.
  </Step>
</Steps>

## How exports run

Exports are event-driven. Whenever a member is created or updated in Ghost or Stripe, Outpost writes that member's current row to the corresponding BigQuery table. Plausible analytics (the previous day's stats) are uploaded once a day. Data flows continuously as members change — there is no batch "export now" step.

## Use cases

* Custom dashboards in Looker, Data Studio, or Tableau
* Cohort analysis across multiple months
* Revenue forecasting with subscription data
* Joining Outpost member data with ad server or analytics data
* Cross-publication reporting for multi-property publishers

## Schema

Each table is created with a fixed schema the first time Outpost writes to it. Existing tables are not altered automatically if the export schema later changes, so new fields won't appear on a table that already exists.
