Skip to content

Glossary GA4 BigQuery export

What is the GA4 BigQuery export

Definition

The GA4 BigQuery export is the official link that sends the raw event data of a Google Analytics 4 property into a BigQuery dataset, where it can be queried with SQL without the aggregations and display limits of the reports in the interface.

On this page 5
  1. What exporting GA4 to BigQuery means
  2. How the link works and which tables it creates
  3. Why it matters
  4. Best practices
  5. Common mistakes
In brief

The export sends the raw events of a GA4 property to BigQuery, one row per event, so they can be queried with SQL without the aggregations of the interface.

What exporting GA4 to BigQuery means

The first thing worth clarifying is what travels across that link. What gets exported is neither the Analytics reports nor their finished metrics. What gets exported are the events exactly as they were collected, one per row, with their parameters nested inside the same row. The key event rate, the engaged session or the active user do not arrive as a number: they arrive as raw material from which you recalculate them if you need them.

The dataset created in BigQuery carries the property identifier in its name and holds one table per day. Each row brings the event name, the timestamp in microseconds, the pseudonymous identifier of the browser or the installation, the event parameters, the user properties, the ecommerce items and the traffic source data.

That nested structure is the practical difference from a report export into a spreadsheet. It forces you to write SQL with unnesting, and in return it allows questions the interface does not accept, because in the interface every report has already decided for you how the data is grouped.

Why it matters

The export solves four things the interface does not. The first is aggregation: reports show already condensed values and, when a dimension has too many distinct values, they collapse the tail under a row called (other). In BigQuery that tail is still there, row by row. The second is attribution: if you want your own model, your own window or your own session definition, you need the original events rather than an already attributed metric.

The third is joining. The order identifier travelling inside the purchase event can be joined with the order table of the back office system, and then the conversation stops being about transactions and becomes one about paid orders, returns and margin. The fourth is retention: the raw data stays in your project, under your retention policy rather than the interface's.

It is equally worth saying what it does not do. It brings no data from before the link was created, and there is no retroactive backfill. It also does not reproduce the modelled metrics of the interface, so a figure from BigQuery and one from Analytics can differ without either being wrong. And it does not replace daily monitoring: for a quick look at a trend, the interface remains the cheapest route.

Best practices

  • Switch the export on when the property is created, even if you are not going to query it yet, because data from before the link cannot be recovered.
  • Enable the daily and the streaming export together if you need the current day, and use each table for what it is good at.
  • Watch the daily event volume on a standard property and cut superfluous events before you approach the batch export ceiling.
  • Always filter by table suffix or by date partition, so a single query does not scan entire years.
  • Requery the last three days before calling a figure final, because daily tables keep receiving late events.
  • Keep the queries in a version controlled repository and document which metric definition each one implements.

Common mistakes

  • Expecting the link to bring the history that predates its activation, and finding out only when the number is needed.
  • Comparing a BigQuery figure with the interface one at face value and calling it an error, when the gap comes from modelling, attribution or the session definition.
  • Ignoring the limit warning email and discovering weeks later that the daily export is paused and those days are gone.
  • Treating intraday tables as final, when they are deleted at the close of the day and do not carry every field.
  • Running queries without a date filter across the whole dataset and discovering the processing cost at the end of the month.
Manuel Riveiro Rodriguez CEO & Digital Strategist

A technical audit covers this and everything else in one pass.

Request an audit

Frequently asked

Is data from before activation exported too?

No. The export starts filling tables from the moment the link exists, and there is no retroactive backfill of history. That is why it should be switched on when the property is created, even in projects where nobody plans to write a single SQL query yet.

What does the export cost?

Google Analytics charges nothing for the link. The cost comes from BigQuery and consists of dataset storage plus the processing of each query, with a monthly free tier. The streaming export is billed on top by volume of data sent, and rates vary by region.

What is the limit for a standard property?

The daily batch export of a standard property allows up to one million events per day. If that is exceeded, the daily export is paused and previous days are not reprocessed. Administrators receive a warning email as the ceiling approaches. The streaming export has no such limit.

Does it replace the Analytics reports?

No. It answers questions the interface cannot: your own attribution calculations, joins with the order system, and analysis below the aggregation level of the reports. For daily monitoring and for the modelled metrics, the interface remains faster and cheaper.

Do I need a Google Cloud billing account?

You can export into the BigQuery sandbox at no cost, with that environment's limitations. A regular, sustained export needs a Google Cloud project with a valid payment method, plus editor rights on the property and owner rights on the project.

Sources

  1. Official setup instructions: required permissions, the one million events per day limit for the batch export of standard properties, the export being paused when it is exceeded, and free export into the sandbox.
  2. Comparison of the export types: daily batch with raw unsampled data, streaming of the current day as a best effort service, and the faster daily variant for 360 properties.
  3. Dataset schema: names of the daily and intraday tables, the three day update window, the main event fields and the fields missing from intraday tables.
  4. Sample queries from the developer documentation, including the one counting events by date with a table suffix filter.
  5. Explanation of the (other) row and of high cardinality, the reason the tail of infrequent values disappears from reports while remaining available in the exported data.