Every week someone sends me the same two screenshots. Google Ads says one number. GA4 says a smaller one. "Which one is broken?" Usually neither. They're two different measurement systems, and once you know exactly where the gap comes from, you can reconcile them in about twenty minutes.
| Google Ads | GA4 |
|---|---|
| Full credit to its own clicks | Credit split across all channels |
| Stamped on the click date | Stamped on the conversion date |
| Counts Every or One per click | Counts per event or per session |
| Blends modeled conversions in | Models only if the property qualifies |
| Sees cross-device and view-through | No impression it never observed |
Why don't Google Ads and GA4 conversions match?
Because the two platforms disagree on five things at once: who gets credit for the conversion, what date it happened, how many times to count it, how to handle users who declined consent, and whether cross-device journeys count at all. Each one pushes the numbers apart a little. Stack all five and a 15–25% gap appears out of nowhere, with nothing actually broken.
Google Ads is trying to answer "what did my ads cause?" so it takes credit aggressively. GA4 is trying to answer "how did all my channels work together?" so it spreads credit around. Same purchase, two honest answers. Let's take the causes one at a time.
How do attribution model differences create the gap?
Google Ads only sees Google Ads touchpoints, so its data-driven attribution divides credit among your own campaigns and nothing else. If someone clicks your Search ad on Tuesday, comes back through your email newsletter on Friday, and buys, Google Ads hands that Search click the whole conversion. It has no idea the email exists.
GA4 sees every channel. Its cross-channel data-driven attribution looks at the same purchase and says: Search ad gets a slice, email gets a slice. So in GA4's attribution reports, that conversion shows up as a fraction of a conversion credited to Google Ads. Fractions add up: the busier your other channels, the wider the gap.
One more wrinkle: GA4's Traffic acquisition report is session-scoped, a third lens again. It won't match either of the other two.
Why do the conversion dates differ between the two platforms?
Google Ads reports a conversion on the date of the click, while GA4 reports it on the date the conversion event fired. Click on January 28, purchase on February 3: Google Ads books it in January, GA4 books it in February. Neither is wrong. They're just filing the same conversion under different dates.
This is why month-over-month comparisons look worst for long consideration cycles. A big end-of-month push shows conversions "missing" from GA4 until the following week. Pull a full quarter instead and a chunk of the mismatch quietly disappears.
What do the counting settings change?
Each Google Ads conversion action has a counting setting: Every counts each conversion after a click (right for purchases), One counts a single conversion per click (right for leads). GA4 key events have their own counting method: once per event or once per session.
Here's where it bites. A user clicks your ad and buys twice in one session. Google Ads set to "Every" counts 2. A GA4 key event set to once per session counts 1. Do that a few dozen times a month on a repeat-purchase store and the gap is real money on paper. Lead gen flips it: a form that fires twice on a double-click counts once in Google Ads on "One" but twice in GA4 on once per event.
How does Consent Mode v2 change the numbers?
When an EEA visitor declines consent, Consent Mode v2 sends cookieless pings instead of full tags, and both platforms switch to statistical modeling to fill the hole. That's the problem: two different models on two different datasets. Google Ads applies conversion modeling and blends modeled conversions straight into your reported totals. GA4 applies its own behavioral modeling, and only if your property meets Google's eligibility thresholds. If it doesn't qualify, GA4 simply loses those conversions while Google Ads keeps estimating them.
So for any account with meaningful EEA traffic, a chunk of your Google Ads number is a statistical estimate that has no matching row in GA4 anywhere. You can't reconcile a modeled conversion click-by-click; you can only know it's there and stop treating the delta as a bug.
What about cross-device and view-through conversions?
Google Ads counts conversions GA4 physically cannot see. Cross-device first: someone clicks your ad on their phone while signed into Google, then buys on their laptop that night. Google Ads stitches that journey with signed-in Google account data. GA4 only connects it if you have User-ID or Google signals doing the same work, and on most setups I audit, it doesn't.
Then there's view-through. Engaged-view conversions from YouTube and view-through conversions from Display credit an ad the user saw but never clicked. GA4 has no concept of an impression it never observed; there's no session, no gclid, nothing to attach. Check whether those conversions are landing in your "Conversions" column or only in "All conversions" before you panic.
- Check the plumbing — Accounts linked, auto-tagging on, no redirect stripping the gclid
- Compare the same source — A Google Ads tag conversion and a GA4 import are two different data streams
- Match counting and windows — Every pairs with once-per-event, One with once-per-session; align the lookbacks
- Switch GA4 to last click — Advertising, model comparison, Google paid channels last click
- Widen to a full quarter — Washes out the click-date versus conversion-date shift
- Name the residue — Modeled, cross-device and view-through; log it as your stable baseline
How do I reconcile Google Ads and GA4 step by step?
Here's the walkthrough I run on client accounts, in order, because each step removes one variable:
- Confirm the plumbing first. Google Ads and GA4 accounts linked, auto-tagging on, and no redirect on your landing pages stripping the
gclidparameter. - Compare the same conversion source. Open the conversion action in Google Ads and check its source. A conversion from the Google Ads tag and a key event imported from GA4 are two different data streams, and comparing a Google Ads tag purchase against a GA4
purchaseevent will always show a wider gap than comparing the import against its own source. - Match the counting settings. "Every" in Google Ads should pair with once-per-event in GA4; "One" pairs with once-per-session. Fix mismatches before reading any more numbers.
- Line up the windows. Set the Google Ads click-through window and GA4's attribution lookback to the same length, or at least note the difference.
- Force GA4 to think like Google Ads. In GA4's Advertising section, open the model comparison and switch to the Google paid channels last click model. This strips out the cross-channel credit-splitting and gets you the closest apples-to-apples view GA4 offers.
- Widen the date range. Compare a full quarter, not a week, to wash out the click-date versus conversion-date shift.
- Account for what's left. The remaining gap is modeled consent-mode conversions, cross-device stitching, and view-through. That residue is structural. Write it down as your baseline and track whether it stays stable.
| Stage | What happens |
|---|---|
| Google Ads conversions | Own clicks, click date, modeling included |
| GA4 10-25% lower: normal | Structural: attribution, dates, modeling |
| GA4 40%+ lower: investigate | Dropped gclid, blocked tags, no Consent Mode |
How big a mismatch is normal, and when is it a real problem?
My rule of thumb after auditing a lot of these accounts: GA4 showing 10–25% fewer Google Ads conversions than Google Ads itself is normal and expected. The structural causes above fully account for a gap that size.
What should actually worry you:
- The numbers match exactly. Sounds great, usually isn't. It often means you're importing GA4 key events into Google Ads and comparing the import to its own source, or double-counting with a Google Ads tag running alongside the import.
- The gap is 40%+ and GA4 is lower. Look for redirects dropping gclid, consent banners blocking GA4 entirely instead of running Consent Mode, or an ad blocker-heavy audience where a server-side setup would recover events.
- GA4 is higher than Google Ads. That's backwards. Suspect a broken Google Ads conversion tag, a conversion action accidentally set to "One" for purchases, or a window set too short.
- The gap suddenly changed. A stable 18% gap that jumps to 45% overnight means something broke: a site update killed the dataLayer push, a new consent banner blocked tags, a redirect appeared. Stable gaps are structure; moving gaps are bugs.
The healthy mindset: use Google Ads numbers to run Google Ads (that's what Smart Bidding optimizes against), and use GA4 to judge how channels work together. Stop expecting one tool to validate the other down to the unit.
Would first-party server-side tracking make these numbers more trustworthy?
Yes, and here's the mechanism. Part of the gap between Google Ads and GA4 isn't attribution logic at all — it's that both tools are fed by browser tags, and browser tags die constantly. Ad blockers, iOS privacy features, and consent banners kill them at different rates, so each platform undercounts differently and the gap moves around week to week. You can't reconcile numbers built on two different leaks.
A first-party server-side setup changes the input. Events get captured on your own subdomain — where blockers and tracking-prevention lists don't reach — and the same server stream feeds Google Ads and GA4. First-party cookies set server-side also live longer under Safari's ITP, so a customer who clicks today and buys next week still carries their gclid instead of showing up as a mystery conversion. The platforms will still model and attribute differently, but the remaining gap becomes the explainable kind.
Frequently asked questions
Should Google Ads and GA4 conversions match exactly?
No. They use different attribution, different conversion dates, different counting, and different modeling, so a gap is built in. An exact match is actually a warning sign of double counting.
Which number should I trust for optimizing my Google Ads campaigns?
The Google Ads number. Smart Bidding optimizes against Google Ads conversion data, including its modeled and cross-device conversions, so that's the number your bids actually respond to.
Why is GA4 showing fewer Google Ads conversions than Google Ads?
Mostly attribution: GA4 splits credit across all channels while Google Ads keeps full credit for its own clicks. Add consent-mode modeling, cross-device stitching, and view-through conversions that GA4 can't see, and GA4 lands lower.
Why is GA4 showing more conversions than Google Ads?
That's the unusual direction, and it usually means the Google Ads side is broken: a conversion tag not firing, a purchase action set to count "One" instead of "Every", or a conversion window shorter than your sales cycle.
Should I import GA4 key events into Google Ads or use the Google Ads tag?
Pick one primary source per conversion, never both. For purchases I generally prefer the Google Ads tag with Enhanced Conversions, because it supports Google's modeling and cross-device measurement better than the GA4 import.
Does Consent Mode v2 cause conversion discrepancies?
Yes. Google Ads blends modeled conversions from consent-declined EEA users into its totals, while GA4 models separately and only if the property qualifies. Those estimates never line up one-to-one.
What percentage difference between Google Ads and GA4 is normal?
As a practitioner rule of thumb, GA4 reporting roughly 10–25% fewer Google Ads conversions is normal. Investigate when the gap passes 40%, flips direction, or changes suddenly.

