Home »
Why Don’t My Google Ads Conversions Match GA4?
By Wahiduzzaman Sohan, Google Ads & Analytics Consultant · Published 3 August 2026 · Updated 3 August 2026 · 9 min read
Key takeaways
- Some variance is normal and expected — a 5% to 20% gap between the two platforms is not a bug.
- A gap wider than about 20%, or one that moves erratically week to week, usually means a real tracking fault.
- Five causes account for nearly every case. Only one of them — duplicate tag firing — actually inflates your numbers. The other four explain them.
- Google Ads will almost always report more conversions than GA4 credits to Google Ads. If the reverse is true, you likely have a duplicate or a linking problem.
- Never reconcile Google Ads against GA4. Reconcile both against your backend, separately.
On this page
- How much variance is normal?
- Cause 1: conversion date vs click date
- Cause 2: your conversion tag fires twice
- Cause 3: two different attribution models
- Cause 4: missing conversion linker or enhanced conversions
- Cause 5: different conversion windows and counting
- How to diagnose which one you have
- Frequently asked questions
Google Ads and GA4 report different conversion numbers mainly because they count differently, not because something is broken. Google Ads credits conversions to the date of the ad click and only sees its own traffic. GA4 credits the date of the conversion and attributes across every channel. Duplicate tags and missing conversion linker data explain most of what’s left.
How much variance is normal?
Before assuming something is broken, set expectations. In the accounts I audit, a 5% to 20% gap between Google Ads conversions and the conversions GA4 attributes to Google Ads is normal. For Display and Video campaigns the gap runs wider, because Google Ads counts view-through and engaged-view conversions that GA4 has no equivalent for.
What isn’t normal: a gap over roughly 20% on Search campaigns, a gap that swings from 8% one week to 35% the next, or GA4 reporting more Google Ads conversions than Google Ads does. That last one is the strongest signal of a duplicate tag, because Google Ads should always be the more generous number.
The direction of the gap tells you a lot. Google Ads higher than GA4 is expected. GA4 higher than Google Ads is almost always a fault.
Cause 1: Google Ads dates conversions by the click, GA4 by the conversion
This is the single most common explanation and it is not a fault at all. Google Ads attributes a conversion back to the date the ad was clicked. GA4 records it on the date the conversion happened.
So a customer who clicks your ad on 28 July and buys on 2 August appears in Google Ads under 28 July and in GA4 under 2 August. Compare a single week in isolation and the two will never agree. Compare a 90-day window and the difference shrinks to almost nothing, because the edge effects at the start and end of the range stop dominating.
If your reporting is monthly and your sales cycle is longer than a few days, this alone can produce a double-digit gap that no amount of tag debugging will close.
Cause 2: your conversion tag is firing twice
This is the one that genuinely inflates your numbers, and it’s the one worth hunting first. The usual sources:
- A platform’s native integration running alongside a GTM tag — Shopify’s Google & YouTube channel plus a GTM conversion tag is the classic pairing
- A hard-coded gtag snippet in the theme and the same conversion configured in GTM
- A thank-you page that can be reloaded, with no transaction ID guard to stop a second event
- Single-page applications firing a history-change trigger on every route change, including back-navigation to the confirmation screen
- A third-party app or plugin shipping its own conversion pixel you didn’t know about
The fastest test takes two minutes. Open your site with GTM Preview, complete a test conversion, and count how many conversion tags fire on the confirmation page. Then reload that page and count again. If a second conversion fires on reload, you have found real inflation.
// GTM Custom JavaScript variable — "cjs - Conversion Not Yet Sent"
// Use as a trigger condition so the tag can only fire once per order.
function() {
try {
var id = {{DLV - ecommerce.transaction_id}};
if (!id) return true; // no ID: fail open
var key = 'conv_sent_' + id;
if (localStorage.getItem(key)) return false;
localStorage.setItem(key, Date.now());
return true;
} catch (e) {
return true; // storage blocked: fail open
}
}
A note on that snippet: reading the variable writes to storage, which is a side effect inside a GTM variable. It works reliably when the variable is evaluated once per trigger, and failing open means a storage-blocked browser loses deduplication rather than losing the conversion entirely. If you want it cleaner, do the read in the trigger condition and the write in a separate setup tag using tag sequencing.
Cause 3: you’re comparing two different attribution models
Google Ads reports on conversions it can attribute to Google Ads clicks, within the Google Ads ecosystem. GA4 applies attribution across every channel — organic, direct, email, paid social, referral — and gives Google Ads only its modelled share.
So a customer who clicks your Google ad, leaves, then returns two days later through an email link and buys is a full conversion in Google Ads. In GA4’s data-driven attribution, Google Ads gets a fraction of it. Both numbers are correct for their own purpose.
| Google Ads | GA4 | |
|---|---|---|
| Conversion dated to | The ad click | The conversion event |
| Channels considered | Google Ads only | All channels |
| Default model | Data-driven or last click, within Google Ads | Data-driven across all channels |
| Counts view-through | Yes, for Display and Video | No |
| Cross-device | Via signed-in Google users | Only with User-ID configured |
This is why importing GA4 conversions into Google Ads doesn’t reconcile the two. It changes what you are bidding on, which is a strategic decision, not a fix for a reporting discrepancy.
Cause 4: missing conversion linker or enhanced conversions
The conversion linker reads the click identifier from the landing-page URL and stores it in a first-party cookie. Without it, Google Ads cannot connect a later conversion back to the click that earned it, and your Google Ads number drops while GA4’s stays put.
Check for it directly: after arriving via a Google ad, open your browser’s application panel and look for a cookie named _gcl_aw. If it isn’t there, the linker either isn’t deployed or isn’t firing on all pages.
Enhanced conversions pull in the opposite direction. By sending hashed first-party data such as an email address, they recover conversions that cookies alone couldn’t match — which raises the Google Ads number while GA4 is unaffected. Turning on enhanced conversions will widen your gap, and that is the intended outcome. A wider gap here means you are recovering conversions you were previously losing, not creating fake ones.
Cause 5: different conversion windows and counting settings
Two settings quietly change the arithmetic:
- Conversion window. Google Ads defaults to a 30-day click-through window and can be set anywhere from 1 to 90 days. GA4’s attribution lookback defaults to 30 days for acquisition events and 90 days for other conversions. If someone has changed either, the two are measuring different periods.
- Counting setting. A Google Ads conversion action set to count "One" records a single conversion per click no matter how many purchases follow. GA4 counts every purchase event. For subscription or repeat-purchase businesses this alone can create a large, permanent, entirely legitimate gap.
Both are worth checking before you touch a single tag. I have seen a week of debugging spent on a discrepancy that turned out to be a conversion action left on "One" by a previous agency.
How to diagnose which one you have
Work through this in order. It moves from cheapest to most involved, and stops most investigations within an hour.
- Widen the date range to 90 days. If the gap shrinks substantially, you were looking at the click-date effect from Cause 1 and there is nothing to fix.
- Check the direction. GA4 higher than Google Ads points at duplicates. Google Ads higher is expected.
- Run one test conversion in GTM Preview, then reload the confirmation page. Count conversion tags each time. This isolates Cause 2 definitively.
- Query your own duplicates. In GA4, build a free-form exploration with transaction ID as the dimension and event count as the metric, filtered to purchase events. Any ID appearing more than once is confirmed inflation.
- Verify the
_gcl_awcookie after an ad click, and confirm auto-tagging is enabled in Google Ads and the GA4 property link is active. - Compare each platform to your backend separately. Google Ads against your order count for the click period, GA4 against your order count for the conversion period. This is the only reconciliation that means anything.
Never reconcile Google Ads against GA4 and call the result accuracy. They measure different things on purpose. Your backend is the only source of truth, and both platforms should be measured against it independently.
Frequently asked questions
How much difference between Google Ads and GA4 is normal?
For Search campaigns, 5% to 20% is normal and expected. Display and Video run wider because Google Ads counts view-through conversions that GA4 does not measure. A gap above 20% on Search, or one that swings unpredictably week to week, usually indicates a genuine tracking fault rather than attribution.
Which number should I report to a client?
Report your backend order or lead count as the revenue figure, because it is the only number that reconciles to money received. Use the Google Ads figure for bidding and budget decisions, since that is the data Smart Bidding actually optimises against. Present both, and explain that they answer different questions.
Will importing GA4 conversions into Google Ads fix the discrepancy?
No. Importing GA4 conversions changes which signal Smart Bidding optimises against, which is a strategic decision with real consequences. It does not reconcile the two reports, because the underlying attribution models and date logic remain different. Fix any duplicate tags first, then decide on your conversion source separately.
Can enhanced conversions make the gap bigger?
Yes, and that is the point. Enhanced conversions use hashed first-party data to recover conversions that cookie matching missed, so the Google Ads number rises while GA4 is unaffected. A wider gap after enabling it means you are recovering conversions you were previously losing.
About the author
Wahiduzzaman Sohan is a certified Google Ads and GA4 analytics consultant specialising in conversion tracking, server-side tagging and Meta CAPI. He has delivered 100+ tracking implementations for ecommerce and lead-generation brands across the US, UK and Australia, and holds Top Rated Plus status on Upwork.
Full background · LinkedIn · Upwork
Not sure which of the five you’re dealing with?
A tracking audit isolates the root cause against live traffic, usually within 48 hours. You get a prioritised fix list and a reconciliation report comparing both platforms to your backend.