GA4 and Google Ads disagree on conversions. Which one is wrong?
Some of the gap between GA4 and Google Ads is normal: different attribution, different timing, different consent rules. Some of it is broken tracking. Here is how I tell them apart, and what I fix.

Neither, usually. GA4 and Google Ads count different things, at different times, under different rules, and a gap of 20 to 40 percent between them is normal on a B2B site. What is not normal is a gap that changes week to week, a tool that reports zero on a day the form clearly worked, or a count that is exactly double. Those are tracking faults, and they have a short list of causes. This article is the list, with the fixes.
- Attribution, timing and consent explain a steady gap of roughly a fifth to a third. That part is fine.
- A gap that moves, a zero day, or an exact double is broken tracking.
- The usual breaks: two GA4 tags, a conversion fired on page load, Ads not imported from GA4, no Consent Mode.
- Fix with a test submission you can watch land in every tool, not with a report.
The gaps that are normal
Three reasons, and you will have all three at once.
Attribution. Google Ads gives itself credit for a conversion if the person clicked an ad in the last 30 days, even if they came back through organic search to actually fill in the form. GA4, by default, uses data-driven attribution across every channel, so that same conversion is split or handed to organic. Both are right by their own rules.
Timing. Google Ads reports the conversion on the day of the click. GA4 reports it on the day of the conversion. A click on Thursday and a form on Monday is one conversion in two different weeks.
Consent. A visitor who declines cookies is invisible to GA4. Google Ads, with Consent Mode v2 set up, still gets a modelled conversion for a share of those people. Without Consent Mode, Ads sees nothing either. Either way the two tools see different people.
A setting that tells Google tags what the visitor allowed. With it, GA4 and Ads adjust what they collect and Google models the conversions it could not observe. Without it, tags either ignore the banner or go silent, and the numbers stop meaning anything in the EU.
20–40%A normal, stable gap between GA4 and Google Ads on a B2B site
30 daysThe default click window Google Ads uses to claim a conversion
2×The gap that means a tag fires twice, not that ads work twice as well
The signs the tracking is broken
You don’t need to understand the setup to spot a fault. You need a week of numbers and three questions.
- Is the gap stable?A steady 30 percent is attribution. A gap that is 10 percent one week and 60 the next means a tag is intermittent: fires on some templates, not on others, or only after a slow script finishes loading.
- Is any number exactly double?Two GA4 configuration tags, one in GTM and one left in the theme by a plugin, send every event twice. Common after a redesign or an agency handover. GA4’s own realtime view shows it in a minute.
- Does the count match the inbox?Twelve form submissions in the CRM and four conversions in Ads means the conversion tag fires on a condition that is sometimes false: a thank-you page that is skipped by an AJAX form, for instance.
Submit the form yourself with a test email. Watch GA4 realtime, the GTM preview, the Ads conversion diagnostics and the CRM. It should land once in each. The first place it is missing or doubled is the fault.
What is usually wrong, and the fix
| Symptom | Cause | Fix |
|---|---|---|
| GA4 exactly 2× anything | Two GA4 tags on the page | One configuration tag in GTM; remove the theme or plugin copy |
| Ads conversions way above forms | Conversion tag on page load of a thank-you page that people revisit | Fire on the form submit event, with a transaction ID |
| Ads near zero, GA4 fine | Conversions not imported, or import pointed at the wrong GA4 event | Import the key event from GA4, or fire a native Ads tag |
| EU traffic reports nothing | No Consent Mode, banner blocks the tags outright | Consent Mode v2 defaults before GTM, update on banner choice |
| Mobile converts, desktop doesn’t | A template without the container | GTM in the theme head, not in a page-level widget |
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
ad_storage: 'denied', ad_user_data: 'denied',
ad_personalization: 'denied', analytics_storage: 'denied',
wait_for_update: 500
});
</script>The order matters more than people expect. Consent defaults have to exist before the GTM snippet runs, or the first tags on the page fire with no consent signal at all. I see “Consent Mode is on” sites every month where the banner updates consent correctly and the defaults are missing. The scan on this site checks exactly that, on the real page.
Importing GA4 conversions into Google Ads and also firing a native Ads conversion tag counts everything twice in Ads. Pick one source per conversion action.
How I fix it
The audit is a hand trace, not a report. One GTM container, every tag listed with what fires it and where it sends data. Then a test submission from each form and each important template, watched in every tool at once. Everything that doesn’t land once gets fixed on a staging container, then the same test again. The client gets one sheet: every key event, which tool receives it, and the expected gap between tools with the reason next to it. That sheet is what ends the Monday argument.
Case · US fintech · under NDASpeed and tracking fixed in the same migrationDivi replaced with a block theme, GA4 and Ads traced with real submissions, every key event counted once.38 → 96Mobile performance score- One GA4 configuration tag, in GTM, nowhere else
- Conversions fire on the submit event, not on a page view
- Google Ads imports from GA4 or fires its own tag, never both for the same action
- Consent Mode v2 defaults load before GTM, and the banner updates them
- A test submission lands once in GA4, Ads and the CRM
If you are not sure whether Consent Mode is set up at all, the Consent Mode v2 setup page explains what it changes, and the free scan tells you what fires before your banner is answered.
Questions from this article.
Pick one tool per question. Google Ads for “what did the ads bring”, because it sees the clicks. GA4 for “what did the site do overall”, because it sees every channel. Reporting both as if they measure the same thing is where the Monday argument starts.
If you have visitors from the EU or the UK, yes, and most B2B sites do. Without it, Google tags either fire before consent, which is the legal problem, or not at all after a decline, which is the measurement problem. Consent Mode v2 is how you get modelled conversions back for the people who declined.
No, and a zero gap would itself be a sign something is duplicated. Attribution windows, cross-device clicks and consent alone guarantee a difference. The goal is a stable gap you can explain, not an empty one.
Five days to four weeks depending on how many tags and tools are involved. A single GTM container with GA4 and Ads is the short end. Add HubSpot, LinkedIn, a chat widget and two agencies’ leftovers, and it is the long end.