All posts
ga4bigqueryanalytics-setupmeasurement

GA4 BigQuery Export: What It Unlocks and How to Set It Up Right

Sean KlimekJuly 1, 2026Updated July 2, 20267 min read

Listen to this article

0:00 / 7:43

The GA4 BigQuery export is a native Google Analytics 4 feature that copies your raw, event-level analytics data into a BigQuery dataset on a daily (and optionally streaming) basis. Setting it up correctly means every event and parameter you actually need lands in BigQuery, unsampled, without unexpected cost or duplicate rows.

Key takeaways

  • The GA4 BigQuery export sends raw, unsampled event-level data to BigQuery — something the GA4 UI itself cannot provide beyond aggregate reports.
  • It's available on both GA4 Standard (free) and GA4 360 properties — daily and streaming export alike; 360 mainly raises the daily-export event ceiling, per Google's documentation.
  • The most common setup mistake is enabling streaming export without a cost plan, which can generate a surprisingly large BigQuery bill on high-traffic properties.
  • Data lands as one table per day (events_YYYYMMDD), with nested event_params and user_properties fields that require UNNEST() to query.
  • Once linked, the connection cannot be un-done and re-done without gaps — plan your setup once, correctly, rather than iterating in production.

What does the GA4 BigQuery export actually unlock?

It unlocks raw event-level access to every hit GA4 collects, including custom parameters the standard UI never surfaces, so you can build custom joins, cohorts, and attribution models. This is the difference between reporting on GA4's terms and analyzing on yours.

The GA4 interface applies aggregation, sampling on high-volume ad hoc reports, and thresholding for privacy. BigQuery export bypasses all three. You get every row, every parameter, every user property, at the grain of a single event. That means you can:

  • Join GA4 events with CRM data, offline sales, or product data in a data warehouse.
  • Build custom attribution models instead of relying on GA4's default rules-based reporting.
  • Feed clean, structured event data into Looker or Looker Studio without report-level sampling.
  • Recover from event-naming mistakes retroactively using SQL, rather than waiting for new data to accrue correctly.

For teams already fighting GA4 discrepancies — for example those covered in our guide on why GA4 isn't tracking your form submissions — BigQuery is usually the fastest way to see the raw truth of what was actually collected.

How do I set up the GA4 BigQuery export correctly?

Correct setup means linking the right GA4 property to the right Google Cloud project, choosing the appropriate export frequency, and scoping IAM permissions before any data flows. Get the linking step wrong and you'll need to re-link and lose historical continuity.

The core steps, done once and done deliberately:

  1. Create or choose a Google Cloud project dedicated to analytics data — don't bury it inside an unrelated engineering project where access controls are already messy.
  2. Enable the BigQuery API on that project.
  3. In GA4 Admin > Product Links > BigQuery Links, select the project and choose export frequency.
  4. Select data streams — you can scope the export to specific web/app streams rather than exporting everything by default.
  5. Choose daily-only or daily-plus-streaming export, understanding the cost implications below.
  6. Set IAM roles so only the right analysts and service accounts can query or bill against the dataset.
GA4 to BigQuery export setup path

GA4 property

select data streams

Google Cloud project

BigQuery API enabled

Link in GA4 Admin

choose export frequency

BigQuery dataset

analytics_<property_id>

Daily tables

events_YYYYMMDD

The one-time linking decision (accent) determines cost and data structure for the life of the export.

Daily vs. streaming export: which one do I need?

Daily export is free and sufficient for most reporting, dashboarding, and historical analysis needs; streaming export adds near-real-time data at an incremental BigQuery cost and is only necessary for live dashboards or fraud/anomaly detection. Most marketing teams only need daily.

Export typeWhat it gives youWhen it's worth it
Daily exportFull previous day's events, delivered once, freeStandard reporting, warehouse joins, historical modeling
Streaming exportEvents available within minutes, incurs BigQuery streaming insert costsLive ops dashboards, real-time fraud detection, session monitoring
Streaming without a cost planSame as above, but unbudgetedNever — this is the most common accidental cost overrun we see in audits

Why is my GA4 BigQuery data structured so strangely?

GA4 exports one table per day, with each row representing a single event and most of the useful detail — like custom parameters — nested inside repeated RECORD fields such as event_params and user_properties. You need UNNEST() in SQL to flatten these before they're usable.

This trips up teams coming from GA4's flat-looking UI reports. A parameter like page_location isn't its own column; it's a key-value pair inside the event_params array on every row. A typical query pattern looks like:

SELECT
  event_name,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS page_location
FROM `project.analytics_XXXXXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20240101' AND '20240131'

If your team is building this for the first time, expect the first few queries to take longer than expected — the nested schema is the single biggest learning curve, not the SQL itself.

What goes wrong most often in GA4 BigQuery setups?

The most frequent failures are: linking the wrong GCP project, forgetting to scope IAM access before opening the dataset to a wide team, and enabling streaming export without understanding its cost model. Each is avoidable with a five-minute check before linking.

ProblemHow to spot itThe fix
Wrong or duplicate GCP project linkedTwo datasets appear for one property, or none appear at allConfirm project ID in GA4 Admin before linking; unlink duplicates immediately
Streaming export cost surpriseUnexpected BigQuery line item, high-volume propertySwitch to daily-only unless real-time data is a genuine requirement
Open IAM permissionsAnyone in the org can query or export the raw datasetScope roles to BigQuery Data Viewer for analysts, not Editor or Owner
Missing historical dataExport started this month, no backfill existsGA4 BigQuery export is not retroactive — link the property as early as possible, or accept the gap
Parameters not appearing in exportCustom dimension registered in GA4 UI but absent from event_paramsConfirm the parameter is actually being sent by GTM, not just registered in GA4 — see our server-side GTM setup guide

If you're not sure whether your current export is even configured correctly, our free instant audit checks the link, export frequency, and schema for gaps before they cost you a quarter of data.

Frequently asked questions

Is the GA4 BigQuery export free?

Daily export is free on both GA4 Standard and GA4 360 properties, per Google's documentation. Streaming export incurs standard BigQuery streaming insert costs, which scale with event volume.

Can I export historical GA4 data retroactively?

No. The export only begins collecting data from the date the link is created forward; there is no retroactive backfill mechanism from Google. This is why linking early, even before you need the data, matters.

Do I need a GA4 360 property to use the BigQuery export?

No. GA4 Standard (free) properties can use both daily and streaming export; GA4 360 mainly raises the daily-export event ceiling (Standard is capped at 1 million events per day), per Google's documentation.

How long is GA4 BigQuery data retained?

Data exported into your own BigQuery project is retained according to your BigQuery dataset settings, not GA4's retention limits. This is one of the main reasons teams set up the export — to escape GA4's own 14-month data retention cap.

Will enabling BigQuery export slow down my GA4 property?

No. The export is a one-way data copy that runs independently of GA4's collection and reporting pipeline, so it has no impact on tag performance or report loading speed.

S

Sean Klimek

Senior GA4, Google Tag Manager, and BigQuery practitioners. We build measurement that marketing teams can actually trust. See what we do →

Keep reading