GA4 and Google Ads Showing Different Conversions? Here's Why (And How to Fix It)

Your GA4 says 47 conversions. Google Ads says 62. Neither matches Shopify. Here's why they never agree and how to get them close enough to make real decisions.

GA4Google Adsconversion trackingattributiondata discrepancy

Your GA4 says 47 purchases last week. Google Ads says 62. Your Shopify dashboard says 53. You’re staring at three numbers that should be the same and none of them agree.

This isn’t a bug. It’s three platforms measuring the same thing with different rulers. But the gap matters — when the numbers diverge by 30%+, you can’t trust your ROAS, you can’t scale confidently, and you’re flying blind on budget allocation.

Here’s exactly why the numbers differ and how to close the gap.

Why the Numbers Will Never Match Perfectly

Before we fix anything, understand this: GA4 and Google Ads will never show identical numbers. They’re designed differently. The goal isn’t to make them match — it’s to get the gap under 10% and understand what the remaining difference means.

Reason 1: Attribution Models

This is the biggest factor. Google Ads and GA4 use fundamentally different attribution:

PlatformDefault ModelWhat It Counts
Google AdsData-driven (formerly last-click)Conversions attributed to any ad interaction in the lookback window
GA4Data-driven (cross-channel)Conversions attributed across ALL channels, not just ads

What this means: If a customer clicks your Google Ad on Monday, then comes back via an email link on Wednesday and buys — Google Ads takes credit (ad interaction in the window), but GA4 attributes it to email (the last cross-channel touch). Same purchase, counted differently.

Reason 2: Conversion Counting

SettingGoogle AdsGA4
Count”Every” or “One” per clickAlways one per session
Window30-day click, 1-day view (default)Session-based

If you have Google Ads set to “Every conversion” and a customer buys twice from the same ad click, Google Ads counts 2. GA4 counts 1 per session (or 2 if separate sessions). This alone can cause a 15-20% gap for stores with repeat buyers.

This is the silent killer:

  • ITP (Safari): Cookies expire after 7 days. Customer clicks ad on Safari, comes back 10 days later. GA4 sees a new user. Google Ads’ enhanced conversions may still match via email hash.
  • Ad blockers: ~30% of desktop users block Google Analytics entirely. GA4 misses these conversions. Google Ads still counts them (via click-based modeling).
  • Consent Mode: If you’re in the EU, denied consent means GA4 pings are modeled (not measured). Google Ads models separately. Two different models = two different numbers.

Reason 4: Timing

Google Ads attributes conversions to the click date. GA4 attributes to the conversion date. A customer who clicked Monday’s ad but bought on Friday:

  • Google Ads: Monday’s report shows +1 conversion (attributed to click)
  • GA4: Friday’s report shows +1 conversion (when it happened)

Pull the same date range and you’ll see different numbers just from this time-shift.

How to Diagnose Your Gap

Before fixing anything, measure the gap:

Step 1: Align the Date Range

Pull a full 30-day window from both platforms. Use the same calendar dates but understand Google Ads will backfill click-date conversions for recent clicks.

Step 2: Check Conversion Counting

In Google Ads: Tools → Conversions → Settings for each conversion action.

  • If set to “Every,” switch to “One” if you’re comparing to GA4 (which counts one per session).

Step 3: Verify the Tag Is Firing

Open your site in Chrome DevTools → Network tab. Filter by collect (GA4) and googleads or conversion (Google Ads). Both should fire on the thank-you page.

Common failures:

  • GA4 fires but Google Ads doesn’t: Missing conversion linker tag in GTM, or Google Ads tag not on the conversion page.
  • Google Ads fires but GA4 doesn’t: GA4 blocked by consent banner or ad blocker. Google Ads enhanced conversions bypass this.
  • Both fire but counts differ: Attribution model difference (see Reason 1).

Step 4: Check Enhanced Conversions

Enhanced conversions let Google match conversions using hashed email/phone even when cookies are blocked. If you haven’t enabled this:

  1. Google Ads → Tools → Conversions → Select your purchase conversion
  2. Turn on “Enhanced conversions”
  3. Choose automatic detection or GTM-based

This typically recovers 5-15% of “missing” Google Ads conversions that GA4 was never going to see. If enhanced conversions still aren’t working after setup, see our complete Enhanced Conversions troubleshooting guide.

How to Close the Gap

Fix 1: Match Attribution Settings

In GA4: Admin → Attribution settings

  • Set reporting attribution model to match your Google Ads model (data-driven)
  • Set lookback window to 30 days (matching Google Ads default)

This won’t make them identical, but removes one source of divergence.

Fix 2: Use Google Ads Conversion Tracking (Not Just GA4 Import)

Many advertisers import GA4 conversions into Google Ads for simplicity. Don’t. Use native Google Ads conversion tracking alongside GA4:

  • Google Ads native tag: Counts click-through and view-through conversions. Feeds Smart Bidding directly.
  • GA4 import: Loses view-through data, adds processing delay, different attribution model applies.

Run both. Use Google Ads native for bidding. Use GA4 for cross-channel reporting.

Fix 3: Implement Server-Side Tracking

Client-side tags (JavaScript) miss 20-40% of conversions due to ad blockers, ITP, and consent. Server-side tracking sends conversion data from your server directly to Google:

  • GA4 Measurement Protocol: Server-to-server hits that bypass ad blockers
  • Google Ads Enhanced Conversions API: Send hashed customer data server-side
  • Meta CAPI: Same concept for Facebook/Instagram

Server-side tracking is the single biggest lever for closing the gap. It recovers the conversions that client-side JavaScript never sees. Our plain-language guide to server-side tracking explains exactly how it works.

If you have a consent banner:

  1. Verify Consent Mode v2 is implemented (not just v1)
  2. Check that ad_storage and analytics_storage fire correctly
  3. Confirm Google’s modeling is active (GA4 → Admin → Data collection → Consent mode)

Misconfigured consent banners are the #1 cause of sudden conversion drops after “nothing changed.” Our Consent Mode v2 implementation guide walks through the complete setup.

What’s a “Normal” Gap?

Gap SizeAssessmentAction
< 10%Healthy. Attribution model differences.Monitor monthly.
10-25%Typical. Usually consent + ITP + counting method.Implement enhanced conversions + server-side.
25-50%Problem. Something is broken or missing.Audit tags, consent, cross-domain setup.
> 50%Critical. Likely a missing tag or broken implementation.Stop spending until fixed.

When to Use Which Number

  • For bidding: Google Ads native conversions (what Smart Bidding optimizes against)
  • For cross-channel budget allocation: GA4 (sees all channels, not just ads)
  • For revenue reporting: Your ecommerce platform (Shopify, WooCommerce) — it’s the source of truth for actual money

Don’t try to reconcile them to a single number. Use each for its intended purpose.

Next Steps

For a deeper dive on why these platforms disagree, including attribution windows and view-through conversions, see why Meta and Google report different conversion numbers. We also cover the same discrepancy from Google’s perspective in why Google Ads conversions don’t match GA4.

If your gap is over 25%, something is broken. Run a free tracking scan to identify exactly what’s misconfigured — we check your GA4 setup, conversion tags, consent implementation, and server-side tracking in under 60 seconds.