Intraday vs daily export tables
The GA4 BigQuery export writes provisional intraday tables during the day and a finalised daily table afterwards. Intraday data is incomplete and can be reprocessed, and once the daily table lands the intraday one is removed. Querying both, or trusting intraday as final, causes double counts and shifting numbers. This page explains the two table types and how to query them correctly.
Two kinds of table
When the BigQuery export is enabled with streaming or daily delivery, GA4 writes intraday tables (events_intraday_) during the current day as data arrives. These are provisional: rows can be added and the data reprocessed. After the day closes, a finalised daily table (events_) is produced, and the corresponding intraday table is removed.
The two are not meant to be summed; the daily table is the authoritative version of a completed day.
- events_intraday_ tables are provisional and mutable
- events_ daily tables are the finalised version
- Intraday is removed once the daily table lands
Querying without double counting
For settled analysis, query the finalised daily tables and exclude today's intraday table. If you need near-real-time data, query intraday explicitly and treat the numbers as provisional, never summing them with the daily table for the same date.
Guard wildcard queries with a _TABLE_SUFFIX filter so a single events_* pattern does not accidentally pull both intraday and daily rows for the same day.
How it appears in analytics and logs
Counts that change through the day, or totals that look doubled, often mean a query is reading provisional intraday tables alongside finalised daily ones.
Diagnostic use case
Query the GA4 BigQuery export without double-counting by understanding when intraday tables are provisional and when daily tables are final.
What WebmasterID can help detect
WebmasterID separates fresh from finalised event data explicitly, so you always know whether a count is provisional or settled.
Common mistakes
- Summing intraday and daily tables for the same date.
- Treating intraday counts as final.
- Using an events_* wildcard that captures both table types.
Privacy and accuracy notes
Both table types carry the export's pseudonymous data; intraday processing carries no extra privacy implication. This page is educational, not legal advice.
Related pages
- BigQuery export schema changes
The GA4 BigQuery export has a documented but evolving schema. Google adds fields, changes nested structures, and the intraday and daily tables do not always carry identical columns. A query written against an old shape can break or silently miss new data. This page explains how the export schema changes, where the risks are, and how to write queries that survive evolution.
- Streaming export gaps in BigQuery
GA4 offers two BigQuery export modes — continuous streaming and a once-daily batch — and they do not always agree. Streaming optimises for freshness and can omit or delay some events that the daily export later includes after fuller processing. Comparing the two for the same day reveals a gap. This page explains why streaming and daily exports differ and which to trust for a given purpose.
- Partial data and freshness
Data freshness is how recently the data behind a report was processed. The current day and the most recent hours are partial: not every event has arrived or been processed, so totals are understated and shapes incomplete. GA4 exposes freshness expectations and shows real-time data separately. This page explains partial-data pitfalls and how to read freshness.
- MCP analytics
Know whether a count is provisional or finalised.
Sources and verification notes
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.