Google Ads and GA4 Conversion Discrepancy: Nine Causes and a Diagnostic Order
The ad account says 412 conversions. Analytics says 287. Someone asks in the channel which number to trust, and a week disappears into hunting a bug that was never there. The answer is almost always the same: both numbers are correct, they answer different questions. A Google Ads and GA4 conversion discrepancy is not a fault — it follows from two systems defining the moment of conversion, the counting unit and the credit rules differently.
Below: nine causes ranked by how much they contribute, what a normal gap looks like, the order to diagnose in (what to check first, second, third), and a rule for which number drives which decision. Enough to close the argument in half an hour instead of a week.
First principle: a normal gap exists
A 10–30% difference between Google Ads conversions and GA4 key events on a comparable slice is common enough that on its own it is not evidence of a problem. The warning signs are different:
- a gap above 50% in either direction;
- the gap changing sharply in one week with no settings changes;
- the sign flipping: the ad account used to report fewer, now it reports more;
- one system showing conversions and the other a flat zero.
The first three send you down the list below. The fourth is not a discrepancy at all — it is broken tracking, and it is a different job.
GA4 conversion discrepancy: nine causes by contribution
1. Click date versus event date
The single biggest contributor. Google Ads books a conversion on the date of the click that led to it. GA4 books it on the date of the event. A Thursday purchase from a Monday click lands on Monday in the ad account and on Thursday in analytics.
Consequence: the longer your consideration cycle, the wider the gap — and recent days in the ad account are always under-reported and backfill later. Hence the rule: compare periods that ended at least three days ago, ideally with a margin for your actual lag. How to measure it is covered in conversion windows and conversion lag.
2. Double counting: native tag plus imported key event
The only item on this list that is genuinely a bug. If the same action is tracked by both a native Google Ads tag and an imported GA4 key event, and both are set to primary, every conversion counts twice. In reports this shows up as an inexplicably generous ad account.
The check takes a minute: open your conversion actions and look for two rows describing one action, one sourced from “Website” and one from “Google Analytics (GA4)”. The fix is to keep one primary and move the other to secondary. Full mechanics and edge cases are in duplicate conversions in Google Ads.
3. Two attribution models, computed independently
Both platforms default to data-driven attribution, but each computes its own: different lookback windows, different touchpoint definitions. The decisive difference is that GA4 sees channels Google Ads cannot — organic, email, direct, referral. So GA4 routinely assigns paid a smaller share, because part of the credit goes to channels the ad account does not know exist.
Neither system is wrong. They answer two questions: “how many conversions did my clicks produce” and “what share of the whole funnel does paid hold”. The detail is in attribution models: DDA vs last click.
4. View-through and cross-device
Google Ads can credit conversions after an ad was seen without a click, and can link devices through the signed-in Google account. GA4 has no view-through equivalent at all, and cross-device only works with Google Signals, which are off by default.
This matters most where video and Display carry weight: in a pure Search account the contribution is small; in an account running YouTube and Demand Gen it is large.
5. Consent Mode modelling
When a user declines consent, both systems model the missing conversions — with different models. Google Ads leans on network-wide signals; GA4 uses behaviour inside your property only. The result is two different numbers, both modelled, and neither is “the real one” in the sense of a raw event.
The higher the decline rate in your markets, the bigger this term. How the signal is collected in the first place is covered in Consent Mode v2 and privacy.
6. Counting unit: every versus one
Every Google Ads conversion action has a counting setting: “every” (count all conversions after one click) or “one” (count at most one). Sales normally use “every”, leads use “one”. GA4 counts events and sessions on its own logic and knows nothing about your setting.
If the account is set to “every” and a user submits a form three times, the ad account reports three — while analytics may report three events but one converting session. That is a difference in definition, not in data.
7. Attribution windows set differently
Each Google Ads conversion action has its own window (typically 30 days from click, configurable); GA4 has its own. If the ad account runs 90 days while analytics runs shorter, the ad account will systematically report more. This is the easiest cause to remove: align the windows and write the decision down.
8. Time zone and currency
A conversion at 23:40 in one calendar lands on the next day in the other. It is visible in daily reports and nearly invisible in monthly ones — and daily reports are exactly what starts the panic. Check that the GA4 time zone is set explicitly and matches the ad account, and that currency is not left at default. Note that the ad account’s time zone and currency can never be changed — if they disagree, analytics is the side that moves.
9. Processing and import lag
GA4 standard reports take 24–48 hours to finish processing a day, and the Google Ads import adds its own delay. Anything newer than three days is provisional by definition. Half the “discrepancies” raised on a Monday resolve themselves by Wednesday.
Who counts what
| Attribute | Google Ads | GA4 |
|---|---|---|
| Conversion date | Click date | Event date |
| Sees unpaid channels | No | Yes |
| View-through conversions | Yes | No |
| Cross-device | Via Google account | Only with Google Signals |
| Modelling without consent | Network-wide signals | Your property’s data |
| Counting unit | Configurable: every / one | Events and sessions |
| Typical window | 30 days from click (configurable) | Its own window setting |
| Data readiness | Backfills into past dates | 24–48 hours of processing |
Diagnostic order
Do not start with attribution models — that is the hardest cause and the rarest true culprit. Work top down.
- Are you comparing the same slice? The most common error in these investigations: all of GA4 against paid-only in the ad account. Filter GA4 to Google / cpc first, or there is no point continuing.
- Does the period end at least three days ago? If not, change the period and half the gap evaporates.
- Any double counting? Two primary actions for one event — look in the conversion actions list. This is the only true bug on the list.
- Is auto-tagging on and the click ID intact? If GCLID is dropped on redirects or overwritten by manual UTMs, the ad account never learns about the conversion. The mechanics are in GCLID, GBRAID and WBRAID.
- Is the account link live, with personalised advertising enabled? Without a working link the conversion import stops, which looks like an ad-account collapse next to healthy analytics.
- Do attribution windows and time zones match? Align them.
- What is your consent decline rate? If it is high, accept the modelling gap as a property of the system rather than a ticket.
- Any cross-domain journeys? A cart on a subdomain or a payment gateway on someone else’s domain breaks the session and the count. See cross-domain tracking.
- Only now, attribution models. If everything above is clean, the remaining gap is methodology and does not need fixing.
The goal is not to make the numbers match. It is to know why they differ. They cannot be reconciled to zero, because they are different definitions of a conversion, not two measurements of one quantity.
Worked example: how 412 becomes 287
Take the opening example. A retailer, one month, Google Ads reporting 412 conversions and GA4 reporting 287 purchase key events — a 30% gap, formally at the top of the normal band. Break it down.
- Slice. GA4 initially showed all sources — 1,240 purchases. Filtered to Google / cpc, it drops to 287. Without that step the team would have been arguing about a 4× gap instead of 30%.
- Period. The report ran through yesterday. Moved to end three days back, the ad account’s figure for those same dates rose by another nine conversions through backfill. Not an error — the normal filling tail.
- View-through. The account runs Demand Gen; the conversion-type breakdown shows 34 conversions from views without clicks. GA4 has no way to count these.
- Cross-device. Another 21 conversions are flagged cross-device. Google Signals are off in GA4, so those users count as two people there.
- Modelling. Consent decline in the main market runs around a quarter; the modelled portion in the ad account is wider than in analytics by a few dozen conversions.
- No double counting. One primary “purchase” action, sourced from the native tag; the GA4 import was moved to secondary during setup.
Total: 34 + 21 plus modelling and lag account for nearly the entire gap. Nothing needs doing — an explained discrepancy is a working state, not a backlog item. If those same 125 conversions had refused to decompose into any of the above, that would have been the moment to hunt a fault.
Build this breakdown once as a table and refresh it quarterly. It answers “why don’t the numbers match” in ten seconds and retires the argument permanently.
Which number drives which decision
| Decision | Source | Why |
|---|---|---|
| Bids, budgets, campaign targets | Google Ads | The algorithm optimises toward exactly what the ad account sees |
| Comparing channels | GA4 | Only it sees organic, email and direct |
| Revenue, margin, cash | CRM or billing | The only source with payments and refunds |
| Incrementality | Experiments | Neither platform answers “what would have happened without ads?” |
| Board reporting | One chosen system, with a footnote | Mixing sources in one table guarantees a dispute |
The decisive point: Smart Bidding learns from what the ad account sees. If you privately believe analytics holds the “real” number and optimise toward it in your head, you are out of sync with the algorithm running your bids. To change what it optimises toward, change the conversion actions and their values — not your opinion. Doing that carefully is covered in conversion value rules and value-based bidding.
Closing it permanently: a one-page document
The argument returns every time someone new joins. The cure is not a setting, it is a one-page document living next to the dashboard:
- which actions count as conversions and which are primary;
- where each is configured: native tag, GA4 import, CRM import;
- attribution window and counting unit per action;
- time zone and currency in both systems;
- your observed normal gap, computed from three months of your own data;
- the rule for which number drives which decision;
- date of the last reconciliation and who ran it.
Run the reconciliation monthly and log the result as a single line. Putting it into permanent reporting is easier with custom columns and the report editor.
Reconcile before every major seasonal peak as a matter of course: in November the gap widens naturally because of lag and volume, and it is easy to mistake normal behaviour for an outage. What you may and may not touch in bidding during that window is covered in seasonality adjustments and data exclusions.
When the gap really does mean something is broken
- Zero in one system with live traffic. The tag is not firing, the account link is broken, or the import is off.
- The gap jumped on the day of a site release. Look at tagging, redirects and URL structure.
- Conversions exactly doubled. Classic duplicate-tag signature, not a sales surge.
- Conversions arrive with no revenue attached. Value is not being passed, which means tROAS is bidding blind.
If the drop is tied to particular pages rather than to measurement, the fastest view is the landing pages report, which breaks spend and conversion out by the URLs traffic actually lands on.
In the first three cases, if your history now contains a period of knowingly corrupted data, that period belongs out of the algorithm’s training set — strictly under the rule “exclude outages, not bad days”. And if the root cause turns out to be collection itself, with conversions lost to browsers, blockers and privacy defaults, the fix is architectural: see server-side tagging with sGTM.
If it is unclear what comes from where in the first place, start with an inventory rather than a reconciliation — the full list of checks is in the Google Ads account audit checklist, and how the two platforms fit together from scratch is covered in GA4 attribution for media buyers. If you would rather have a second pair of hands on it, PPC Rebels runs Google Ads training with measurement as a dedicated module, and keeps a standing account playbook that covers the diagnostic order above.
FAQ
What size of gap is normal?
Use 10–30% between Google Ads conversions and GA4 key events on a comparable slice as a reference. Your own norm is better derived from three months of your own data.
Why does Google Ads usually report more?
View-through conversions, cross-device matching, broader modelling, and click-date attribution pulling delayed conversions back into earlier dates.
Can GA4 ever report more?
Yes. Typically it means GA4 counts an event that is not a conversion action in the ad account at all, or conversions arrive from channels with no ad click, or the click ID was lost.
Should I import conversions from GA4 or use the native tag?
Pick one path per action and never both. The native tag is usually faster and steadier for bidding; the GA4 import is convenient when the event is already assembled by complex logic in analytics.
How do I compare the two systems properly?
Same period, ending at least three days ago; GA4 filtered to Google / cpc; the same set of conversion actions; matching attribution windows.
Does the discrepancy affect Smart Bidding?
Directly, no — the algorithm learns from ad account data. Indirectly, yes, if double counting or a lost click ID is feeding the ad account a distorted picture.
The gap grew this week specifically — what now?
First check for a site release, a CMS change or GTM edits. Then check whether conversion action settings changed. Those two cover about 90% of cases.
Do attribution windows have to be identical?
For a fair comparison, yes. For day-to-day operation, not necessarily — but then write the difference down so nobody rediscovers it next quarter.
Can the numbers ever be made to match exactly?
No, and that should not be the goal. The systems count different things. The goal is an explainable, stable gap.
Which number goes in the board report?
Pick one system as the reporting source of truth and always footnote which system and which attribution window. Switching sources mid-quarter is the fastest way to lose trust in your reporting.
How does Consent Mode affect the comparison?
The higher the decline rate, the larger the modelled share in both numbers and the wider the normal band. In strict-consent markets expect to sit near the top of the range.
Should I count conversions in the CRM too?
For money, always. The ad account and analytics count events; the CRM counts paid deals and refunds. The third number does not complicate things — it puts the other two in their place.