2026-08-20
GA4 BigQuery Export Not Showing Data: The Exact Fix
You linked GA4 to BigQuery, waited a day (or three), and your dataset is either empty, missing today's events, or only partially populated. You've refreshed the schema, checked the project ID twice, and you're starting to wonder if the export is just broken.
It's usually not broken — it's misconfigured, delayed by design, or you're querying the wrong table set. Here's how to isolate which one it is and fix it.
Why this happens
In order of how often each one is the actual culprit:
- You're checking too soon. Daily export tables (
events_YYYYMMDD) typically land within 24 hours after the end of the day in the property's timezone — but the first export after linking can take up to 48-72 hours to appear at all. This is the single most common false alarm. - The BigQuery link was created but never fully activated. A common mistake: the GA4-BigQuery Link was set up under one Google Cloud project, but billing wasn't enabled on that project, or the BigQuery API wasn't enabled before the link was saved. The link shows as "linked" in GA4 Admin but nothing ever exports.
- Wrong dataset or project is being queried. If your org has multiple GCP projects (dev, staging, prod), it's easy to query a project that isn't the one selected in the GA4 BigQuery Link settings. The dataset location (e.g.
USvsEUvs a specific region) also matters — a query against the wrong region returns nothing, not an error, in some client tools. - Streaming export is enabled but you're querying daily tables, or vice versa. Streaming export writes to
events_intraday_YYYYMMDD, which is a separate table from the finalizedevents_YYYYMMDDtable. If you enabled streaming expecting near-real-time data but query the daily table, "today" will look empty until the daily table finalizes overnight. - Permissions were changed after linking. If the Google Analytics service account (or the user who created the link) had BigQuery Data Editor / Job User roles revoked later, the export silently stops without an obvious error in the GA4 UI.
- Data thresholds or consent mode gaps. If Consent Mode is misconfigured, entire regions of traffic may be missing from export while everything else looks fine — this presents as "incomplete data" rather than "no data."
Fix, step by step
- In GA4, go to Admin > Product Links > BigQuery Links and confirm a link exists, and note the exact Google Cloud project ID and dataset location shown there.
- In the Google Cloud Console for that exact project, confirm Billing is active and the BigQuery API is enabled. If either was off when the link was created, disconnect the link, fix billing/API, then recreate the link — it will not self-heal retroactively.
- In BigQuery, confirm you are querying the dataset named
analytics_<property_id>inside the correct project and correct region (matching the location noted in step 1). Cross-region queries return empty results without a clear warning. - Check whether Streaming was enabled under the link's export settings. If yes, query
events_intraday_YYYYMMDDfor today's partial data, andevents_YYYYMMDDonly for prior, finalized days. - If it's been fewer than 48-72 hours since linking, wait — this is normal for the first export cycle. Subsequent daily tables should land consistently within 24 hours.
- Verify the service account or user tied to the export still has BigQuery Data Editor and BigQuery Job User roles on the project. Check under IAM in Google Cloud Console.
- If specific regions or event counts look low rather than zero, review Consent Mode settings and check the
ga_session_idandconsentfields in the exported event data for gaps. - As a last resort, unlink and relink BigQuery from GA4 Admin, re-selecting the correct project, location, and export type (daily, or daily + streaming).
Copy-paste verification checklist
GA4 → BigQuery EXPORT CHECKLIST [ ] BigQuery Link exists under Admin > Product Links > BigQuery Links [ ] Linked GCP project ID matches the one you're querying: ______________ [ ] Dataset location in GA4 link settings matches BigQuery dataset region: ______________ [ ] Billing enabled on linked GCP project [ ] BigQuery API enabled on linked GCP project [ ] Export type confirmed: [ ] Daily only [ ] Daily + Streaming [ ] If Streaming enabled: querying events_intraday_YYYYMMDD for today [ ] If Daily only: allowing up to 24h after day-end (property timezone) for events_YYYYMMDD [ ] First-ever export: allowing up to 48-72h post-linking before troubleshooting further [ ] Service account / user has BigQuery Data Editor role [ ] Service account / user has BigQuery Job User role [ ] Consent Mode reviewed if row counts are low (not zero) by region SAMPLE TABLE NAME CHECK: analytics_.events_20250601 (finalized day) analytics_ .events_intraday_20250602 (in-progress day)
How to verify it worked
Run a simple row count query against yesterday's finalized table: SELECT COUNT(*) FROM `project.analytics_<property_id>.events_YYYYMMDD`. If it returns a nonzero count matching roughly what you'd expect from GA4's realtime or standard reports for that day, the export is working. Repeat this check daily for a few days after any fix to confirm tables continue landing on schedule.
Once the export is flowing reliably, the harder part is turning raw BigQuery event tables into decisions your team can act on without writing SQL every morning — which is exactly the gap Next Action Analyst is built to close, by turning those exports directly into prioritized next actions.
Next Action Analyst turns your campaign export into a prioritized list of changes to make tomorrow — with the numbers that justify each one.