← All case studies
Paid Search (multi-sector)Via digital marketing agency

Reconciling a Google Ads vs. GA4 discrepancy via BigQuery

BigQuery / SQL
Problem

Google Ads reported ~34% more purchase conversions than GA4 for the same period and channel, with no clue as to why in the dashboard.

Diagnosis

Dropped to the raw event table in BigQuery: purchase duplication by transaction_id, lost attribution from uncaptured gclid, and a structural consent gap.

Intervention

Each cause isolated and quantified separately: ~8% duplication, ~19% lost attribution, ~7% consent.

Result

A defensible breakdown of the 34% gap, with three distinct owners and fixes, plus the honest caveat that the gap never hits zero by design of both platforms.

Context

A 34% gap between two platforms that are "supposed" to count the same thing breeds distrust in both data sources at once — nobody knows which one to believe, and media budget decisions get made with that uncertainty hanging over them until someone drops down to the raw data.

How it was actually solved

Why the dashboard was never going to show the cause

Google Ads and GA4 aggregate and attribute differently by design — no dashboard in either platform exposes the individual-event detail needed to see WHERE the count diverges. Only dropping to the raw event table in BigQuery, event by event, lets you reconstruct what happened to each individual conversion and why one platform counted it and the other didn’t.

Three causes, three completely different mechanisms

The transaction_id duplication happened when a user refreshed the purchase confirmation page, firing purchase twice for the same real transaction. The lost attribution happened when the gclid parameter got dropped somewhere in the user’s journey (for example, switching from HTTP to HTTPS at some point in the funnel). The consent gap was the same kind of structural issue that shows up in other cases: real conversions GA4 never records because consent wasn’t resolved at the moment of purchase.

Why quantifying each cause separately mattered more than the total number

Saying "there’s a 34% gap" doesn’t tell anyone what to fix. Isolating each cause and quantifying it (~8%, ~19%, ~7%) turns a confusing number into three concrete tasks with distinct owners and fixes — and lets you decide which one is worth tackling first based on impact and cost to fix.

What this reveals

A discrepancy between two measurement platforms doesn’t get explained by looking at either one’s dashboard — it gets explained by dropping down to individual events. And not every cause of a discrepancy is a bug: part of the gap is a legitimate design difference between the platforms, and it will never hit zero.

FAQ

Is it normal for a gap to remain after fixing everything fixable?

Yes, and saying otherwise would be dishonest. Google Ads and GA4 use different attribution models and conversion windows by design — part of the difference is structural, not a bug that can be fully eliminated.

Do you need BigQuery access to diagnose this kind of discrepancy?

For the full diagnosis, yes — it’s the only way to see the individual event, not the aggregate. Without BigQuery you can suspect there’s a problem, but not isolate how much each cause weighs.

How to know if ChatGPT is citing you (and whether it's bringing you customers)→

Got a similar problem?

$ request_free_audit