Why your GA4 BigQuery numbers don't match the GA4 reports
You export raw GA4 data to BigQuery, run a count, and it does not match the GA4 interface. This is normal and expected. The two are built differently, and knowing why tells you which to rely on for what.
They are measuring differently
BigQuery gives you raw event rows exactly as they arrived. The GA4 UI applies a stack of processing on top: identity stitching, modelled conversions for unconsented users, attribution logic, and data thresholding that withholds small numbers for privacy. Raw rows and processed reports will never tie out exactly.
The usual culprits
- Modelling and Consent Mode: the UI includes modelled conversions that simply are not in the raw export.
- Attribution: the UI reassigns conversion credit across channels; BigQuery stores the raw event.
- Thresholding: the UI hides small groups; BigQuery shows every row.
- Timezone: BigQuery tables are in UTC by default, the UI uses your reporting timezone, so day boundaries differ.
- Active users: GA4's user counts use an algorithm you cannot perfectly recreate with a simple
COUNT(DISTINCT).
Which to trust
Use the GA4 UI for standard reporting and anything involving attribution or users; it is the processed, official view. Use BigQuery for raw analysis, custom logic and long-term history that the UI's retention limit would delete. Just do not expect a row count in one to equal a headline number in the other.
Want us to check your tracking in 10 seconds?
Pop in your domain and we will show you what is firing, what is not, and where data is leaking. Free, no signup.
Check my tracking freeGet a plain-English audit
We check your live GA4, Google Tag Manager and consent setup by hand and tell you exactly what is wrong. The audit comes off any build.
See how it works & pricingDatahound are analytics and ad-tracking specialists. We fix broken GA4, Google Tag Manager and server-side tracking so every sale, form and call gets counted. Back to datahound.agency · All tracking guides · GA4 data retention explained