Learning, teaching and testing GA4 in BigQuery all need realistic data. A real export holds personal data and business figures you would rather keep to yourself. Google’s public sample stopped in January 2021: its schema is out of date, and it covers only a few use cases.
So we built a free, synthetic, open-source GA4 export generator, in the exact schema Google ships today. Its data is available in two flavours.
Public demo datasets, one for each of the app’s four templates, refreshed every morning, that you can query straight away, or subscribe to in Analytics Hub for free.
The dataset generator app, which builds your own dataset in a Google Cloud project you own. It is entirely customisable: start from one of four ready-made business types, or run the open-source generator yourself and edit its mixer to shape any dataset you need, from traffic volume and channels to devices, countries, consent and campaigns.
SELECT PARSE_DATE('%Y%m%d', event_date) AS day, COUNT(DISTINCT user_pseudo_id) AS users, COUNT(DISTINCT CONCAT(user_pseudo_id, '.', ( SELECT CAST(value.int_value AS STRING) FROM UNNEST(event_params) WHERE key = 'ga_session_id'))) AS sessions, COUNTIF(event_name = 'purchase') AS purchases, ROUND(SUM(ecommerce.purchase_revenue), 2) AS revenue FROM `ga4dataform-demo-public.analytics_770000002.events_*` WHERE _TABLE_SUFFIX >= ... -- last 7 days GROUP BY day ORDER BY day DESC
| day | users | sessions | purchases | revenue |
|---|---|---|---|---|
| 2026-10-22 | 3376 | 4058 | 203 | 75146.0 |
| 2026-10-21 | 3592 | 4316 | 290 | 109016.0 |
| 2026-10-20 | 3721 | 4458 | 281 | 103482.0 |
| 2026-10-19 | 3261 | 3955 | 225 | 79022.0 |
| 2026-10-18 | 2919 | 3563 | 237 | 95166.0 |
Our public demo dataset and the datasets you generate come from the same open‑source generator, so they share the same schema and the same behaviour.
Four ready-made BigQuery datasets, one for each template of the generator, ready to query from your own project. Nothing to install.
events_YYYYMMDD tablesBuilds your own dataset in a Google Cloud project you own, using our web app.
Four GA4 BigQuery exports, one for each template of the dataset generator app, in both the EU and the US and refreshed every day at 06:00 UTC. They live in the project ga4dataform-demo-public. Any signed-in Google account can query them from its own project, with nothing to set up. To have them in your own project instead, subscribe in Analytics Hub: you get a linked, read-only copy that updates every day.
| Dataset | Dataset ID | BigQuery | Analytics Hub |
|---|---|---|---|
| Showcase websiteVisits, pages and searches, no shop | QueryQuery | SubscribeSubscribe | |
| EcommercePlans sold online, the full shop funnel | QueryQuery | SubscribeSubscribe | |
| PrivacyEU visitors, close to half refuse consent | QueryQuery | SubscribeSubscribe | |
| Lead generationDemo bookings, the lead funnel | QueryQuery | SubscribeSubscribe |
Choose a region with the toggle, click a dataset ID to copy it, then query it in BigQuery or subscribe to it in Analytics Hub.
The Ecommerce dataset, used in the examples on this page: a fictional software website that sells its plans online. Everything in it is made up, but it behaves like a real GA4 web property, rough edges included.
-- Daily totals, last 7 days SELECT PARSE_DATE('%Y%m%d', event_date) AS day, COUNT(DISTINCT user_pseudo_id) AS users, COUNT(DISTINCT CONCAT(user_pseudo_id, '.', ( SELECT CAST(value.int_value AS STRING) FROM UNNEST(event_params) WHERE key = 'ga_session_id'))) AS sessions, COUNTIF(event_name = 'purchase') AS purchases, ROUND(SUM(ecommerce.purchase_revenue), 2) AS revenue FROM `ga4dataform-demo-public.analytics_770000002.events_*` WHERE _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)) GROUP BY day ORDER BY day DESC;
A free web app that installs a synthetic GA4 export dataset in a Google Cloud project you own, and can keep it up to date every morning.
The app asks only for the permissions it needs to set up the dataset in your project.
Pick a project, a type of business, a BigQuery location, how much history you want and whether to refresh it daily. Guided walks you step by step, Automated decides for you, Pro shows every setting on one page.
The app creates a BigQuery dataset, a Cloud Run job that fills it and, if you ask, a Cloud Scheduler job that adds new data each day. A 90-day history is ready in about five minutes.
volume: new_visitors_per_day: 1200 seasonality: amplitude: 0.28 peak_day_of_year: 330 channel_mix: organic_search: 34 direct: 24 paid_search: 14 # ... consent: analytics_granted: 0.88 calendar: - name: spring-release from: "03-10" to: "03-16" traffic: 1.2 channels: {paid_social: 2.0, email: 2.0}
Pick the right solution for your needs: our public demo dataset, a dataset built with the dataset generator app, or Google’s GA4 sample.
| Public demo dataset | Dataset generator app | Google’s GA4 sample | |
|---|---|---|---|
| Up to date | Yes, refreshed every morning | Yes, with the daily refresh | No, ends 31 January 2021 |
| History | Since 15 June 2026, growing daily | As long as you choose | 92 days |
| Current export schema | Yes, all 31 top-level columns | Yes, all 31 top-level columns | Missing 8 columns added since |
| Masked values | None | None | Yes, such as <Other> |
| Business type | A software website, seen through the app’s four templates | Any: four ready-made types, or your own configuration | Online store |
| Location | US or EU | US, EU, or a single region in Europe, the US, Asia or Australia | US |
| Ownership | Our project, you query it | Your project, you own it | Google’s project |
New dataset types, schema changes and new features. A few emails a year, no spam.
Found something wrong in the data? Report it on GitHub, where every issue is public so you can follow it. Missing a feature? Write to us.
No. Every visitor, session and order is invented by the generator from hand-written settings. It reads no real analytics data at any point, so there is nothing personal to leak.
The schema is identical: it was captured from a live GA4 web export, and every generated row is checked against it in both directions before it loads. An unknown field or a missing field stops the load. The values follow the same rules a real property does, such as traffic source fields set on the first events of a session and rows without a user_pseudo_id when consent is denied.
It is a clean, fictional property, not a statistical copy of any real one.
Yes. The generated data is dedicated to the public domain under CC0 1.0. You can copy, change and publish it, commercially or not, without asking and without credit. The generator’s code is under the GNU GPL version 3 or later.
The storage is on us. Your queries run in your own project and BigQuery bills them to you, but Google gives every billing account 1 TiB of queries free each month. The full history of each dataset is between 1 and 2.5 GiB.
No. The raw tables are a standard GA4 export, so they work with any SQL, dbt or Dataform project, notebook or BI tool.
Every dataset exists in both the US and the EU, and each has a free Analytics Hub listing in its region. Subscribing creates a linked, read-only dataset in your own project, which you query like any other. Every dataset also accepts queries from any signed-in Google account, without a subscription.
Open an issue on the generator’s GitHub repository, or write to support@superformlabs.eu.