The week we started using GA4's BigQuery export was the week our reporting stopped being a fight

Resource

Summary: Sampling problems vanish, definitions become testable SQL, two analysts answering the same question produce the same number. Cost ~$80-150/mo at mid-market scale. Setup 20 min, schema learning curve ~1 week. Build a small dbt project flattening events into sessions/page_views/conversions tables and never look back.

Relevant to you? Continue for the full picture.

What changed for our team when we turned it on.

Before. GA4 reports were the reporting layer. Every "can you pull X" question turned into a custom-report build inside the GA4 UI, hitting GA4's sampling limits, hitting its dimension restrictions, hitting its un-reconcilable definitions of metrics like sessions vs users vs events. Reports took longer to produce and had asterisks on them.

After. The raw event data lands in BigQuery on a daily lag (or hourly with the streaming export, which we eventually upgraded to). Every analytics question becomes a SQL question. The SQL question is testable, repeatable, and version-controllable. The sampling problem disappears. Two analysts looking at the same question produce the same answer.

What I would tell teams considering it.

Cost. The BigQuery export is free in the sense that GA4 streams the data for free (within reasonable limits). What is not free is BigQuery storage and query cost. For a mid-size SaaS at our scale, query cost runs about $80-150/month. Storage builds up over time, partition by date, prune old partitions if cost matters.

Setup. Native integration in GA4 admin. Takes about 20 minutes to wire up. The first 24-48 hours of data lands and you can query it.

The hard part. The schema. GA4's BigQuery schema is event-shaped, deeply nested, and unintuitive at first. Writing your first event-funnel query takes longer than you expect because you are learning the schema. Allocate a week.

What we ship on top of the export.

A small dbt project that flattens GA4 events into a "page_views" table, a "conversions" table, and a "sessions" table. About 15 dbt models total. Once those exist, every analytics question gets answered against the modeled tables and the SQL stays readable.

A weekly job that joins GA4 events with HubSpot contact data on email or user_id. This unlocks "what marketing channel did this customer come from" at the contact level, which the GA4 UI cannot answer for non-aggregated data.

A handful of recurring queries that monitor the data quality of UTM tags week-over-week. The export makes UTM-hygiene auditing fast.

The non-obvious win. The export is what made us trust the GA4 numbers. When the GA4 UI report disagreed with our BigQuery query, we could chase down the difference. Almost always it was a UI quirk (sampling, definition, time window). Each chase made us more confident in the underlying data.

If you have not turned on the export yet, the week of friction during setup is paid back inside a quarter of normal use.

What's the most useful query you ended up running on top of GA4 export?

Posted May 24, 2026, 3:00 AM UTC

10
Loading comments…