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.

  • 28 Jul 2026
  • 5 min read
Printed report with bar and pie charts, reading glasses, a pen and a calculator on a desk

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.

Key takeaways
  • 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.

DefinitionConsentConsent Mode v2 Google’s consent signal

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.

  1. 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.
  2. 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.
  3. 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.
A quick test

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

SymptomCauseFix
GA4 exactly 2× anythingTwo GA4 tags on the pageOne configuration tag in GTM; remove the theme or plugin copy
Ads conversions way above formsConversion tag on page load of a thank-you page that people revisitFire on the form submit event, with a transaction ID
Ads near zero, GA4 fineConversions not imported, or import pointed at the wrong GA4 eventImport the key event from GA4, or fire a native Ads tag
EU traffic reports nothingNo Consent Mode, banner blocks the tags outrightConsent Mode v2 defaults before GTM, update on banner choice
Mobile converts, desktop doesn’tA template without the containerGTM 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.

Watch out

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
Before you blame the ads
  • 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
Related serviceWant the sheet that explains your gap?GA4 & GTM tracking audit from $720: every tag traced with real submissions, duplicates and silent templates fixed, one key event per conversion in every tool.See the service

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.

Numbers that disagreeOne container, every conversion counted once, in every toolGA4 & GTM auditBook the deep audit
Share@
Common questions

Questions from this article.

Something else?Write a line about your site. You’ll get a reply from me within one business day.

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.