Skip to main content

GA4 BigQuery export schema

Scott Hellmund10 March 20221 min read
GA4 BigQuery export schema

I've always found the GA360 interactive schema from E-Nor (now Merkle - Cardinal Path) by Justin Marciszewski to be a handy way to find out where different elements can be found in the BigQuery schema.

GA4 has a new schema, different to that of the Universal Analytics schema you may have become familiar with using GA360. I hope this proves to be a useful visual reference for new and old GA4/BigQuery users alike!

You can explore the GA4 BigQuery export schema by clicking on the tree map below. Or you can open it full-screen in a new tab (and maybe bookmark the page for future reference).

If you're wondering if or why you should be exporting your GA4 data to BigQuery in the first place, Lace gives 10 very good reasons in her blog.

I've also written up a full guide on how to build this yourself using R should you want to have a go and to use your own GA4 event schema to generate the tree map.

Need help with your data platform?

We build intelligence platforms on BigQuery, Dataform and Google Cloud - from setup to ongoing optimisation.

How ready is your data?

Take our short assessment to find out where your data stack stands and what to prioritise next.


Suggested content

BigQuery Tips: When your query is technically correct but BigQuery won't run it

There is a particular kind of frustration that comes from staring at a query you know is correct and watching it fail. No syntax error. No logic problem. Just a wall. We hit two of them on the same project. What we were building The job was to migrate ga4_daily_snapshot for a large enterprise client from a BigQuery scheduled query into a proper Dataform pipeline. The scheduled query had been added to over time until it was too large to maintain with any confidence. Moving it to Dataform w

Katie Kaczmarek17 Aug 2026

BigQuery Tips: The subquery in your WHERE clause that's scanning your entire table

There is a pattern that appears in a lot of BigQuery pipelines and looks completely reasonable. You have a control table that stores the latest processed date. Rather than hardcoding a date into your query, you pull it dynamically: SELECT * FROM `project.dataset.events` WHERE event_date = ( SELECT latest FROM `project.dataset.control_table` ); The query returns the right results. The logic is clean. And if your events table is large and date-partitioned, you might be scanning the entire

Katie Kaczmarek13 Aug 2026

BigQuery Tips: Arrays in BigQuery - what they are and how to get data out of them

If you have ever opened a GA4 export in BigQuery for the first time and found yourself looking at a column called event_params that seemed to contain an entire table inside each row, this post is for you. Arrays are not trying to make your life harder. Once you understand why they exist and what to do with them, they stop being intimidating. Why BigQuery uses arrays GA4 tracks events. Each event can have many parameters. A purchase event might have a transaction ID, a value, a currency an

Katie Kaczmarek10 Aug 2026