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.
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.
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.
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.
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.
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.
Most conversion discrepancies come from one of five categories. Identifying which one applies to your situation is step one of the audit.
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.
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.
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.
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.
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.
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.
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.
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 →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.
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.
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.
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.
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.
| Platform | Default Model | Window | Cross-Device? |
|---|---|---|---|
| Google Ads | Data-Driven | 30–90 days (click), 1 day (view) | Yes — signed-in Google accounts |
| GA4 (Ads reports) | Data-Driven | 30 days (default) | Only with User ID enabled |
| GA4 (Explore) | Last Click | Session-based | No |
| CRM | First Touch / Manual | Set per deal | No |
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.
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 →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.
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 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.
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:
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 →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%.
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.
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.
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.
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.
| Check | Frequency | What to Look For | Action if Off |
|---|---|---|---|
| Ads vs. GA4 conversion count | Weekly | Gap staying under 15% | Re-run tag audit if gap grows |
| Conversion tag status in Ads | Weekly | "Recording" status on all active actions | Test tag firing immediately |
| Offline conversion import success rate | Weekly | No "Upload Failed" errors in the import log | Check GCLID expiry and file format |
| Enhanced Conversions match rate | Monthly | Above 40% — ideally 60%+ | Improve PII capture at checkout |
| CRM vs. Ads revenue reconciliation | Monthly | Net revenue within 20% of reported ROAS basis | Review refund handling and import pipeline |
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.
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 →