Sooner or later, somebody exports GA4 data to BigQuery, compares it with a report and asks which number is wrong. Often neither is. Reports and raw events are built differently, and Google itself says that full reconciliation of these value-added metrics is not expected. The useful question is narrower: is this gap explained, and is it stable?
The case for exporting raw data is a separate topic. This article is a method for when the two numbers already disagree.
Rule out comparison mistakes first
Many gaps come from the comparison itself, and they are the cheapest to fix. Check these before you look for a deeper explanation:
- Dates. Reports can keep changing while data is processed, which can take 24 to 48 hours. Google's advice for this comparison is to se data older than 72 hours.
- Time zone. In the export,
event_datefollows the reporting time zone, whileevent_timestampis in UTC. Filtering by converted timestamps carelessly moves events across days. - Metric definition. Reports normally show active users, while a simple count in SQL covers everyone with an event. The same word can describe two different counts.
- Scope. Summing daily session counts double-counts sessions that span midnight. Count across the whole period instead.
- Filters. Check for report filters, comparisons and segments on one side, and for export limits or event filters on the other.
