Webclat / GA4 Practice
Home / QA / Attribution, ads and cross-domain

Why do GA4 key events not match the conversion counts Google Ads reports?

Quick answer

GA4 key events and Google Ads conversions are two separate counting systems by design: GA4 uses its own attribution model (data-driven by default) and can count multiple key events per session depending on the event, while Google Ads applies its own attribution settings and, for many conversion actions, counts once per click regardless of how many times the underlying GA4 event fired. A gap between the two numbers is expected in normal operation - it only signals a real problem when the gap is large, sudden, or one-directional in a way that suggests a broken import rather than a modeling difference.

Why This Happens

01 / CAUSE

Even with GA4 conversions correctly imported into Google Ads as conversion actions, the two platforms don't count the same way: GA4 reports key events using whatever attribution model is applied to the GA4 property, while Google Ads reports conversions using the attribution setting on each Ads conversion action (which can be a different model, and can apply a different lookback window than GA4's session/attribution window).

A second common cause is conversion-count logic: some Google Ads conversion actions are configured to count 'One' conversion per click even if the imported GA4 key event fires multiple times in the same session (e.g. a repeated add-to-cart-turned-purchase in the same visit), which mechanically produces a lower Ads number than the raw GA4 event count for the same period.

A third, genuinely fixable cause is a broken or incomplete import: if the GA4-to-Google-Ads link is missing scopes, the key event was marked in GA4 after the import was last configured, or auto-tagging (gclid) isn't present on ad clicks, some conversions won't make it into Ads at all regardless of attribution-model differences.

Fix It

02 / STEPS

Confirm the GA4-Google Ads link and import status first

In GA4 Admin > Google Ads Links, confirm the link is active and personalized advertising is enabled. In Google Ads > Goals > Conversions, confirm the specific key event is listed as an imported conversion action and its status is not paused or showing an error.

Check auto-tagging is on and gclid is arriving intact

In Google Ads account settings, confirm auto-tagging is enabled. Then verify a real ad click's landing URL carries a gclid parameter and that nothing in your redirect chain (a URL shortener, a consent-gate redirect, or a cache) is stripping it before GA4 sees it.

Compare attribution models deliberately, not by default

In GA4, check which attribution model is applied to the property (GA4 Admin > Attribution Settings). In Google Ads, check the attribution setting on the specific conversion action. If they differ (e.g. GA4 on data-driven, an older Ads conversion action still on last-click), align them or accept the resulting gap as a known modeling difference rather than a bug.

Check the conversion counting setting per Ads conversion action

In Google Ads > the specific conversion action > Settings, confirm whether 'Count' is set to 'Every' or 'One' - 'One' will structurally undercount relative to a raw GA4 event total whenever the event fires more than once per click-through session.

How To Verify It Worked

03 / VERIFY

Pick a single conversion from the last 48 hours, find its gclid in GA4's raw event parameters (via DebugView at the time, or BigQuery export if linked), and search Google Ads > the conversion action's diagnostics for that same click ID to confirm it was actually received and matched on the Ads side.

Run a small, deliberate test: complete a real (or sandboxed) conversion from a real ad click, then compare the GA4 Realtime key-event count against the Google Ads 'Conversions' column for that campaign over the same hour. A pass looks like the Ads number appearing (possibly delayed up to a few hours due to Ads' own processing), even if the exact count differs slightly from GA4's under a different model; a fail looks like the Ads number staying at zero indefinitely for a confirmed real conversion, which points back to the link/import/gclid checks above rather than attribution differences.

Still Not Fixed?

We audit and fix GA4 implementations for a living - if this doesn't resolve it, the next step is usually a full event-by-event audit.

Talk to a GA4 Consultant