Engineering Logs Tracking & Analytics Integrity Google Ads Conversion Discrepancy Audit
Conversion Tracking Google Ads GA4 Attribution Audit

Google Ads Conversion Discrepancy Audit.

Google Ads shows 200 conversions. GA4 shows 140. Your CRM shows 110. These numbers should not be this far apart. This guide explains exactly why they diverge — and how to run a systematic audit that finds the real number and fixes the gap.

Brady Christensen · Updated 2025 · 20 min read

01Why the Numbers Never Match Exactly

Google Ads, GA4, and your CRM are three different systems. Each one measures conversions differently. They use different attribution models, different time windows, and different signals to decide what counts as a conversion.

A small gap is expected. A large gap is a data problem — and it costs you real money. When Google Ads over-counts conversions, your ROAS looks higher than it actually is. You scale spend. You lose money. When Google Ads under-counts, your campaigns look unprofitable and you cut spend that was actually working.

What is a Conversion Discrepancy?

A conversion discrepancy is when two or more systems report different numbers for the same event — for example, a purchase. The discrepancy is the difference between those numbers. Discrepancies under 10–15% are generally expected. Discrepancies over 20% almost always indicate a real problem that needs to be fixed.

This audit guide treats discrepancy as a diagnostic problem. Your job is to find the root cause, not just make the numbers look the same. Masking a discrepancy without fixing it just delays the damage.

02Normal Gaps vs. Dangerous Gaps

Not every mismatch is a crisis. Some differences between platforms are structural — they exist by design. Knowing which is which saves a lot of wasted investigation time.

≤15%
Expected Gap
Attribution window differences, model differences, and cross-device measurement all cause natural variance. No action required unless it grows.
15–30%
Investigate Now
Something is likely broken. Could be a duplicate tag, a missing exclusion filter, or a broken conversion action. Run the audit below.
>30%
Broken Tracking
Your data is unreliable. Do not make budget or bidding decisions until this is resolved. A full audit and tag rebuild may be needed.

Why Google Ads always reports more conversions than GA4

Google Ads uses last-click attribution by default. It also allows a conversion window of up to 90 days. GA4 defaults to last-click with a 30-day window. If a user clicked an ad in January and converted in March, Google Ads counts it. GA4 may not.

Google Ads also counts cross-device conversions using signed-in Google account data. GA4 cannot see across devices unless you implement User ID tracking. This alone can explain a 5–15% gap on mobile-heavy sites.

Don't Compare Different Date Ranges

Google Ads reports conversions by the date the click happened. GA4 reports them by the date the conversion happened. If you're comparing the same calendar period side by side, you're not comparing the same events. Use a consistent 30-day-ago cutoff and allow 5–7 extra days for delayed attribution to settle before comparing.

03The Five Root Causes of Discrepancies

Most conversion discrepancies come from one of five categories. Identifying which one applies to your situation is step one of the audit.

// discrepancy root cause taxonomy — google ads conversion audit
Category A — Tag problems (over-counting)
Duplicate tags firing
Tag fires on page reload
GA4 + Ads tag both count
Double conversions ✗
Category B — Attribution window mismatch (structural)
Ads: 90-day click window
GA4: 30-day session window
Expected variance ~10%
Category C — Missing conversions (under-counting)
Tag blocked by ad blocker
Safari ITP kills cookie
Off-site payment redirect
Lost signal ✗
Category D — Excluded / filtered (phantom gap)
Ads: counts all conversions
GA4: filters internal traffic
Expected — not a problem ✓
Category E — Offline gap (CRM vs Ads)
Lead form submitted
Ads counts: 1 conversion
CRM shows: 0 closed deals
ROAS inflated ✗
First, identify the category. Then apply the fix for that category. Mixing up categories leads to the wrong fix and wastes time.

04How to Run the Audit Step by Step

This audit follows a specific sequence. Start with the biggest potential cause and rule it out before moving to the next one. Do not jump to conclusions early.

1

Check for duplicate conversion actions

Go to Google Ads → Tools → Conversions. Look at the "Source" column. If you see both a Google Analytics import and a Google Ads tag for the same event, you are double-counting. Remove one. Keep whichever source you trust more — usually the Google Ads tag for purchases, GA4 import for micro-conversions.

2

Verify tag firing with Google Tag Assistant

Install Google Tag Assistant Legacy or use GTM's built-in Preview mode. Load your conversion page (thank you page, form confirmation page). Count how many times the conversion tag fires. It should fire exactly once per page load — never on refresh, never twice.

3

Check your "Include in Conversions" settings

In Google Ads Conversions, each action has an "Include in Conversions" toggle. If you have micro-conversions (page views, video watches) set to "Yes," they inflate your reported conversion count. Only mark revenue-generating actions as included in the primary conversion count.

4

Align attribution windows across both platforms

In Google Ads, set your conversion window to match your buying cycle — 30 days for most e-commerce, 90 days for high-ticket B2B. In GA4, use the same lookback window in your Advertising reports. Comparing a 90-day Ads window against a 30-day GA4 window will always produce a discrepancy that looks like a real problem but isn't.

5

Audit internal traffic filters

GA4 lets you exclude your own IP addresses from data collection. Google Ads does not. If your team visits the site and triggers conversion events, Ads counts them — GA4 does not. Add a traffic_type internal filter in GA4's Admin settings, then check if that explains the gap.

6

Test the conversion tag on a real device with ad blockers active

Open your site in Firefox with uBlock Origin enabled. Complete a test conversion. Check GA4 real-time and Google Ads Tag Assistant — did the event fire? If not, your browser-side tag is being blocked. This is the most common cause of under-counting and requires a server-side fix.

7

Cross-reference your CRM order count

Pull the actual count of orders or leads from your CRM for the same 30-day period. This is the ground truth number. Compare it to Google Ads and GA4. If all three differ significantly, you have a multi-layer problem that requires tracking a root cause from the customer journey backward through each system.

Need a full tracking audit? We audit your Google Ads conversion setup, GA4 integration, and tag architecture — and give you a clear fix list with priority order.

View Tracking Services →

05Tag and Firing Fixes

Tag problems are the most common source of over-counting. They are also the easiest to fix once you find them. Here are the most common tag failure patterns and their corrections.

Duplicate tags: two systems counting the same event

✗  Common Over-Counting Pattern
Google Ads Tag fires
+
GA4 → Ads Import fires
2× Conversion Counted ✗
Fix: Remove the GA4 import in Ads Conversions if you already have a direct Ads tag. Or remove the Ads tag and use only the GA4 import. Never run both for the same event.

✓  Correct Single-Source Setup
Google Ads Tag fires once
1 Conversion Recorded ✓
Pick one source. Stick with it. For WooCommerce, the direct Ads tag via GTM on the thank-you page is the most reliable single source.

Tag firing on page refresh

If your thank-you page can be refreshed — for example, a user hitting F5 after checkout — the conversion tag fires again. This generates duplicate conversions for a single order. The fix is to fire the conversion only when a specific dataLayer event fires, not on a page URL match. Use GTM's Custom Event trigger with purchase as the event name instead of a Page URL trigger.

Off-site payment gateways causing missed conversions

Some payment gateways — certain PayPal flows, Stripe with 3D Secure, some bank redirect methods — take the user off your site to complete payment. If the redirect back to your thank-you page fails, the tag never fires. The fix is a server-side conversion trigger using the woocommerce_payment_complete hook (for WooCommerce) or a webhook on payment confirmation for other platforms.

Use Google Ads Enhanced Conversions

Enhanced Conversions lets Google match your conversion data using hashed customer information like email and phone. This recovers conversions lost to ad blockers, ITP, and cross-device journeys. It requires sending first-party data with your conversion tag — but it can recover 10–30% of lost signal on competitive keywords where users research across multiple sessions.

06Attribution Model Mismatches

Attribution is how a platform decides which touchpoint gets credit for a conversion. Google Ads and GA4 can use completely different models at the same time — which creates a structural gap that looks like a broken tag but isn't.

PlatformDefault ModelWindowCross-Device?
Google AdsData-Driven30–90 days (click), 1 day (view)Yes — signed-in Google accounts
GA4 (Ads reports)Data-Driven30 days (default)Only with User ID enabled
GA4 (Explore)Last ClickSession-basedNo
CRMFirst Touch / ManualSet per dealNo

This table shows why a single sale can appear in three systems with three different attribution outcomes. None of them are wrong — they are just measuring different things. The problem is when you compare them without accounting for these differences.

What to align and what to accept

Align these settings

Attribution model: both should use data-driven
Conversion window: match Ads window in GA4
Which actions count as conversions in reports
Reporting date range logic (click date vs. event date)

Accept these differences

Cross-device: Ads sees more than GA4 by design
View-through conversions not visible in GA4
CRM deals vs. online transactions (different events)
Spam/internal traffic that Ads sees but GA4 filters

Attribution and GA4 reporting out of sync? We fix attribution alignment issues between Google Ads and GA4 as part of our full conversion tracking service.

GA4 Attribution Fix →

07Offline Conversions and CRM Gaps

If you sell anything that involves a human conversation — a sales call, a quote, a demo — your Google Ads data is incomplete by default. The ad platform counts the lead form submission. It has no idea whether that lead turned into a sale three weeks later.

This creates a specific discrepancy pattern: Google Ads ROAS looks high because it is optimizing on lead counts, not revenue. Your CRM shows a much lower close rate. Your actual ROAS is significantly lower than reported.

How offline conversion imports work

When a lead comes in through Google Ads, the click generates a GCLID — a Google Click ID. Your site captures this GCLID and stores it with the lead record in your CRM. When that lead closes into a deal, you upload the GCLID and the deal value back to Google Ads via the Offline Conversions API. Google Ads then attributes that revenue to the original ad click, even if it happened 60 days ago.

GCLIDs Expire

GCLIDs are valid for up to 90 days. If you do not import the conversion within that window, Google Ads cannot match it to the original click. This means your offline conversion pipeline must run at least weekly. Any delay beyond 90 days from the click date loses that conversion permanently from your attribution data.

For more on building a full offline conversion pipeline — including automatic uploads from Salesforce and HubSpot — see our guide on offline conversion tracking and CRM uploads.

The GCLID capture problem

Offline attribution only works if you capture the GCLID at lead submission time. This requires a hidden form field that auto-populates from the URL parameter when the user lands on your site. Many forms miss this. The most common failure points:

  • Redirects stripping URL parameters. If a user clicks an ad, lands on a redirect page, and the GCLID is not passed through the redirect, it is lost before the form loads.
  • Single-page app navigation. If your site uses React or Vue router and the form is on a different route, the URL parameters from the original landing page may not be available when the form submits.
  • Form plugin not capturing custom fields. Some form plugins do not store hidden field values to the CRM record — they just include them in the email notification, where they are useless for import.

GCLID capture is broken in your forms? We fix GCLID capture and build the pipeline that pushes closed deals back to Google Ads automatically.

Offline Conversion Fix →

08Edge Cases: Returns, Cross-Device, iOS

Refunds and cancellations not subtracted

Google Ads counts every conversion when it fires. It does not automatically subtract refunds. If a customer buys and returns the next day, your Ads conversion count stays the same. Your CRM and revenue system show a $0 net sale.

You can send negative conversion values to Google Ads using the Conversion Adjustments API. When you process a refund in your system, you send a correction to the original GCLID. Ads then updates the revenue figure for that conversion. This is manual to set up but important for any store with a return rate above 5%.

iOS and Safari tracking gaps

Apple's Intelligent Tracking Prevention (ITP) blocks third-party cookies. It also aggressively limits first-party cookies set via JavaScript — sometimes to just 7 days. A user who clicks your ad on Monday and converts the following Tuesday may not be attributed if their cookie was purged.

The fix is server-side conversion tracking. When you fire conversions from your server using Enhanced Conversions or a server-side GTM setup, you bypass ITP entirely. The hashed email and phone data sent with the conversion acts as a persistent identifier that does not rely on cookies. For more on the server-side architecture, see our guide on GA4 purchase event mismatches.

Cross-device journeys under-attributed in GA4

A common pattern: user sees your ad on mobile, researches on desktop, converts on desktop. Google Ads — using signed-in Google account data — can connect those sessions. GA4 cannot, unless you pass a user_id on login. Without User ID, GA4 sees two users where there was one. The mobile session looks like an organic direct visit. The desktop conversion gets attributed to a different source entirely.

Enable Google Signals

Google Signals fills in some of this cross-device gap for GA4 users who are signed into their Google accounts. Go to GA4 Admin → Data Settings → Data Collection → Enable Google Signals. Note that this data is subject to thresholds — you will not see it in small-volume reports — but it improves attribution quality in aggregate Advertising reports.

09Validation and Monitoring

Once you have run the audit and applied fixes, you need to verify the changes worked. Do not assume a fix is live until you confirm it with data.

What a healthy conversion dashboard looks like

  • Google Ads conversion count is within 15% of GA4 for the same 30-day period with matched windows
  • CRM closed deals represent a logical subset of Ads conversions — not more, not less by more than expected close rate
  • Conversion tag fires exactly once in Google Tag Assistant per transaction
  • No duplicate conversion actions showing in Google Ads → Tools → Conversions
  • Enhanced Conversions shows a match rate above 40% in the Diagnostics tab

Ongoing monitoring cadence

CheckFrequencyWhat to Look ForAction if Off
Ads vs. GA4 conversion countWeeklyGap staying under 15%Re-run tag audit if gap grows
Conversion tag status in AdsWeekly"Recording" status on all active actionsTest tag firing immediately
Offline conversion import success rateWeeklyNo "Upload Failed" errors in the import logCheck GCLID expiry and file format
Enhanced Conversions match rateMonthlyAbove 40% — ideally 60%+Improve PII capture at checkout
CRM vs. Ads revenue reconciliationMonthlyNet revenue within 20% of reported ROAS basisReview refund handling and import pipeline

The reconciliation framework

Use a simple three-column table each month. Column 1: Google Ads reported conversions. Column 2: GA4 transactions. Column 3: CRM closed deals or orders. Track the gap between each pair. When the gap between any two grows by more than 5 percentage points month over month, you have a new problem that needs investigation.

Conversion Discrepancy Audit Checklist
No duplicate conversion actions (both GA4 import + Ads tag) for the same event
Conversion tag fires exactly once per transaction in Tag Assistant
Thank-you page tag fires via GTM Custom Event, not page URL match
Attribution windows match between Google Ads and GA4 Advertising reports
Internal traffic is filtered in GA4 and excluded from Ads via IP exclusion
Enhanced Conversions enabled and sending hashed email on purchase events
GCLID is captured in hidden form field and stored in CRM with each lead
Offline conversion import running at least weekly with no upload errors
Refund adjustments are sent via Conversion Adjustments API if return rate > 5%
Monthly reconciliation table comparing Ads, GA4, and CRM

Need this fixed correctly? We run the full audit — tag review, attribution alignment, GCLID capture, offline import pipeline — and deliver a prioritized fix list with implementation support.

Get in Touch →