---
title: "BigQuery Export for Cookieless Analytics — Sealmetrics"
description: "Export Sealmetrics to BigQuery: traffic, conversions and revenue by channel in your own project, hourly or daily, with the schema and example SQL."
summary: "The Sealmetrics BigQuery connector exports your analytics data into a BigQuery dataset in your own Google Cloud project. You create a service account with the BigQuery Data Editor and Job User roles, upload its JSON key in the site's integration settings, choose the dataset name and an EU or US location, and pick a…"
canonical_url: "https://sealmetrics.com/integrations/bigquery/"
lang: "en"
author: "Rafa Jiménez"
author_url: "https://sealmetrics.com/authors/rafa-jimenez/"
date_modified: 2026-09-14
content_type: "implementation"
owner: "engineering"
llm_priority: "critical"
last_verified: "2026-09-14"
source: https://sealmetrics.com/integrations/bigquery/
publisher: Sealmetrics
---

Integration · BigQuery

# Your warehouse is only as complete *as what you export.*

Exporting GA4 to BigQuery moves the same consent-shaped data into a warehouse, with Consent Mode's modelled users left behind. The Sealmetrics connector writes traffic, conversions and revenue by channel, campaign and creative into your own BigQuery project, hourly or daily, as ready-to-query tables in an EU or US dataset you choose.

Every plan, free Agentic tier included · star schema · hourly or daily sync · your data, your retention

By [Rafa Jiménez](https://sealmetrics.com/authors/rafa-jimenez.md) · Published 14 September 2026

What lands in your project Star schema

01 · **fact_traffic_daily** · **Entrances, pageviews, conversions, revenue**

02 · **fact_conversions** · **Conversions and revenue by source**

03 · **fact_pages** · **Pageviews by page and content group**

04 · **fact_landing_pages** · **Performance by landing page**

Partitioned by date · clustered · no user identifiers in any table

Quick answer

The Sealmetrics BigQuery connector exports your analytics data into a BigQuery dataset in your own Google Cloud project. You create a service account with the BigQuery Data Editor and Job User roles, upload its JSON key in the site's integration settings, choose the dataset name and an EU or US location, and pick a sync frequency: hourly, daily or manual. The data arrives as a star schema of fact tables — daily and hourly traffic, conversions, microconversions, pages and landing pages — partitioned by date and carrying UTM source, medium, campaign, term and content, channel group, country and device. Conversions include revenue and their custom properties as JSON. You can backfill history on the first run and later. The tables are aggregates without user identifiers, so they answer channel and revenue questions, not user-level ones. The connector is included on every plan, the free Agentic tier among them; Google bills storage and queries.

What it exports

## Seven data types. *One table each.*

You choose which data types to sync. Each one maps to a dedicated table with a fixed star-schema name, and every row carries the site's account ID.

| Data type | Table | What it holds | Note |
| --- | --- | --- | --- |
| Daily traffic | fact_traffic_daily | Entrances, engaged entrances, pageviews, microconversions, conversions and revenue by UTM, channel, country, device, browser and OS | Recommended; partitioned by date, clustered by account, source and country |
| Hourly traffic | fact_traffic_hourly | The same traffic metrics, hour by hour | Optional; 90-day partition expiration and higher storage cost |
| Conversions | fact_conversions | Conversion type, count, amount, revenue, attributed UTM and channel, landing page, click ID and custom properties as JSON | Recommended; clustered by account, conversion type and source |
| Microconversions | fact_microconversions | Microconversion events such as add to cart or sign-up | Recommended |
| Pages | fact_pages | Pageviews and entrances by page and content group | Recommended |
| Landing pages | fact_landing_pages | Performance by landing page | Recommended |
| Account metadata | dim_accounts | Site details | Optional; dim_countries and sync_metadata are always created |

Attribution in the tables is the same [last-click attribution](https://sealmetrics.com/glossary/last-click-attribution.md) as in the dashboard: each conversion carries the source of the session in which it happened. The complete schema for every table is shown on the integration screen. How that attribution works is covered in [campaign revenue attribution](https://sealmetrics.com/use-cases/revenue-attribution.md).

What a GA4 export does not fix

## A warehouse copies *the gaps it is given.*

Teams often move to BigQuery to escape GA4's interface limits. The export solves that, and inherits everything upstream.

01

### The consent gap travels with the data

The GA4 export contains what GA4 collected. Modelled users and sessions from Consent Mode are not available in data exports, so a warehouse sees the consented share only. On Incapto's Shopify store, GA4 did not record 29% of visits. Why modelling does not close it is explained in [Consent Mode: measured vs modelled](https://sealmetrics.com/blog/consent-mode-measured-vs-modelled.md).

02

### Standard properties hit a daily ceiling

Standard GA4 properties have a daily BigQuery export limit of 1 million events. High-traffic stores reach it, and the rest of the day is not exported.

03

### Event rows have to be rebuilt into reports

The GA4 export is event-level, so channel, session and revenue reports have to be reassembled in SQL before anyone can use them. The Sealmetrics tables arrive already aggregated by channel and campaign.

Set up the connector

## A service account. *One upload.*

Part of the work is in Google Cloud and part in Sealmetrics. You own the project, the dataset and the retention from the first sync.

1. Create a service account and key

   In Google Cloud Console, open IAM & Admin → Service Accounts, create an account such as sealmetrics-export, then add a key in JSON format and save the downloaded file securely.

2. Grant BigQuery permissions

   Give the service account the BigQuery Data Editor and BigQuery Job User roles on the project, or a custom role that can create datasets and tables, update table data and create jobs.

3. Upload the key in Sealmetrics

   Open the site in Sealmetrics, go to Site Config → Integrations → BigQuery and upload the JSON key. Sealmetrics checks it is a service account key and fills in the Google Cloud project ID.

4. Choose dataset, location and sync

   Set the dataset name and its location, EU or US, pick hourly, daily or manual sync, select the data types to export and choose how much history to load on the first run.

5. Create the dataset and run the first sync

   Save the configuration, click Setup Dataset if prompted, then Sync Now. The integration screen shows the status, the last sync, the tables created and a history of rows and bytes per run.

Query it

## Four queries *to start from.*

Taken from the connector documentation. Replace your-project and sealmetrics with your project ID and dataset name, and filter on date so each query scans only the partitions it needs.

### Daily traffic summary

Entrances, pageviews and conversions per day for the last 30 days.

```
SELECT
  date,
  SUM(entrances) AS entrances,
  SUM(page_views) AS page_views,
  SUM(conversions) AS conversions
FROM `your-project.sealmetrics.fact_traffic_daily`
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY date
ORDER BY date DESC
```

### Conversion attribution

Conversions, revenue and average order value by source and medium for the last 30 days.

```
SELECT
  utm_source,
  utm_medium,
  SUM(count) AS conversions,
  SUM(revenue) AS revenue,
  SAFE_DIVIDE(SUM(revenue), SUM(count)) AS avg_order_value
FROM `your-project.sealmetrics.fact_conversions`
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY utm_source, utm_medium
ORDER BY revenue DESC
```

### Traffic by content group

Pageviews and entrances by content group for the last 7 days.

```
SELECT
  content_grouping,
  SUM(page_views) AS page_views,
  SUM(entrances) AS entrances
FROM `your-project.sealmetrics.fact_pages`
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
  AND content_grouping IS NOT NULL
GROUP BY content_grouping
ORDER BY page_views DESC
```

### Custom conversion properties

Conversions and revenue broken down by a property sent with each conversion, here customer_type.

```
SELECT
  JSON_VALUE(properties, '$.customer_type') AS customer_type,
  SUM(count) AS conversions,
  SUM(revenue) AS revenue
FROM `your-project.sealmetrics.fact_conversions`
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY customer_type
ORDER BY conversions DESC
```

Who uses the export

## Same tables. *Four different jobs.*

The connector is for teams whose analysis already lives in the warehouse, next to spend, orders and finance data.

### Data and analytics

Join analytics with the rest of the warehouse.

Revenue by channel and campaign next to ad spend, CRM stages or product margins, without an ETL job to maintain.

[How to measure ROAS after consent](https://sealmetrics.com/blog/measure-roas-after-cookie-consent.md)

### Finance

Channel revenue beside the ERP.

Conversions and revenue per day in a table finance can reconcile against booked orders.

[One number for marketing and finance](https://sealmetrics.com/use-cases/single-source-of-truth.md)

### Marketing science

Aggregate inputs for models.

Daily outcomes by channel and campaign are the input a marketing mix model or an experiment readout needs, with no user data.

[Last-click vs modelled attribution](https://sealmetrics.com/blog/last-click-vs-modelled-attribution.md)

### BI and agencies

Dashboards in the tool the client uses.

Data Studio, Power BI, Tableau or any BigQuery-compatible tool reads the tables directly.

[Campaign revenue attribution](https://sealmetrics.com/use-cases/revenue-attribution.md)

What the tables carry

No customer case about the BigQuery connector is published. What the export carries is the same measurement the published cases rely on: on Incapto's store, that base recorded 96% of real Shopify orders before anything else was compared.

**96%**

of real orders recorded in Incapto's 48-day parallel run, the base the export is built on

Incapto · Shopify [Open](https://sealmetrics.com/case-studies/incapto.md)

**7**

data types you can sync, each to its own table, plus two tables always created

Connector documentation [Open](https://sealmetrics.com/integrations/bigquery/#method)

**1M**

events a day: the BigQuery export limit on a standard GA4 property

Google Analytics Help [Open](https://support.google.com/analytics/answer/9358801)

What it does not do

## Aggregates, not events. *By design.*

These follow from what Sealmetrics collects. What is and is not stored is set out in [demonstrate compliance](https://sealmetrics.com/gdpr-analytics.md).

### — No raw events or users

The tables are aggregates without user identifiers. User-level paths, cohorts and retention cannot be built from them.

### — Last click only

Conversions carry the source of their own session. There is no multi-touch or data-driven attribution to export.

### — Hourly data expires

The hourly traffic table has a 90-day partition expiration. Use the daily tables for longer history.

### — Google bills the warehouse

Storage and queries are charged by Google Cloud to your project. Filter on date and sync only the data types you need.

### — Choose the location first

The dataset can be created in the EU or the US. Pick the EU location if the data has to stay in the EU.

### — Not instant

Sync runs hourly at most, and recent data can take one to two hours to be processed before it appears.

Common BigQuery questions

## Before you connect *your project.*

### How do I export Sealmetrics data to BigQuery?

Create a Google Cloud service account with the BigQuery Data Editor and BigQuery Job User roles and download a JSON key. In Sealmetrics, open Site Config → Integrations → BigQuery, upload the key, choose the dataset name, location, sync frequency and data types, then set up the dataset and run Sync Now.

### Which Sealmetrics plans include the BigQuery connector?

The connector is included on every Sealmetrics plan, from the free Agentic tier to Growth, Scale and Enterprise, at no extra charge from Sealmetrics. Google Cloud bills your project directly for BigQuery storage and queries.

### What tables does the export create?

One table per data type you select: fact_traffic_daily, fact_traffic_hourly, fact_conversions, fact_microconversions, fact_pages, fact_landing_pages and dim_accounts. A dim_countries lookup table and a sync_metadata table are always created. Tables use a star schema, partitioned by date.

### Does the export include raw events or user-level data?

No. The tables are aggregates by date, UTM source, medium, campaign, term and content, channel group, country, device, browser and OS, with no user identifiers. Conversions include their count, amount, revenue, landing page, click ID and custom properties as JSON.

### How often does it sync, and can I load past data?

You choose hourly, daily or manual sync. On the first run you can backfill the last 30, 60 or 90 days, a custom number of days or a date range, and you can run larger historical loads later from the backfill card.

### Can the data stay in the EU?

Yes, if you choose the EU location when you configure the dataset; the US location is also available. Sealmetrics' own analytics data is hosted in Dublin, and once data is synced into your project, you control its retention.

### How is it different from the GA4 BigQuery export?

The GA4 export is event-level and contains what GA4 collected: consent-gated data, without Consent Mode's modelled users, and on standard properties up to 1 million events a day. The Sealmetrics export contains aggregates measured without consent loss, already organised by channel and campaign, with no user-level rows.

### What happens to the data if I remove the integration?

Deleting the integration removes the configuration from Sealmetrics but never deletes data already in your BigQuery project. Sealmetrics only pushes data; the one table with automatic expiry is fact_traffic_hourly, at 90 days.

BigQuery walkthrough

## Connect your project. *Query complete channel data.*

Book 30 minutes with the founder. We connect Sealmetrics to your BigQuery project, run the first sync and write the first query against your own spend or order tables.
