The Google Ads gap most marketing directors can live with is the one against GA4. Two ad platforms disagreeing feels like a platform problem, not your problem.
The gap nobody can live with is against the CRM. Google Ads says you bought 40 leads. Salesforce has 12 records. Somebody is going to ask you which number goes in the board deck, and "it's complicated" is not an answer that survives the meeting.
Here is what is actually happening, in the order worth checking.
1. You are counting things that are not leads
Open your conversion actions in Google Ads and read them honestly. Most accounts have accumulated a list like this:
- Contact form submission
- Newsletter signup
- Phone number click
- PDF download
- Time on page over 2 minutes
- Scroll depth 75%
Only the first one produces a CRM record. The rest were added at some point because somebody wanted more data, and they were never separated out.
Anything marked "Include in conversions" gets counted in your headline number and gets fed to Smart Bidding as a goal worth buying. A scroll-depth conversion is not worth buying.
The fix: decide which actions represent a real lead. Leave those in "Conversions." Switch everything else to "Secondary," where it still reports but stops inflating your totals and stops steering your bidding.
This one change explains more Ads-to-CRM gaps than anything else on this list.
2. Your counting setting is inflating repeat submissions
In each conversion action, Google Ads counts either "every" conversion per click or "one."
Set to "every," a prospect who submits your form, gets impatient, and submits it twice more becomes three conversions in Google Ads. Your CRM deduplicates by email and creates one contact.
Lead generation should be set to "one." Ecommerce is the case for "every," because a customer really can place three separate orders.
3. Bots are filling in your form
Google Ads counts a form submission as a conversion when the tag fires. It has no opinion about whether a human was involved.
Your CRM, or the humans working it, quietly delete the submissions from "asdf asdf" with a Gmail address of random characters. Nobody logs that they did it. The lead count in Google Ads never gets the memo.
On an unprotected form, this is not a rounding error. It can be a third of your volume.
How to check it: count the records you deleted or marked as junk last month. If the number is large, add a CAPTCHA or honeypot, and check whether your form endpoint is being hit directly.
4. The integration is silently failing
Your form talks to your CRM through something. A native integration, a Zapier zap, a webhook, a custom script.
That connection fails quietly. Zaps hit their task limit mid-month and stop. A required field gets added to the CRM object and every submission missing it is rejected. An API key expires. The form keeps accepting submissions and showing the thank-you page, which means the conversion still fires, and the record never lands.
How to check it: submit a test lead yourself, right now, and watch for it in the CRM. Then check your automation tool's error log for the last 30 days. This failure mode is common and almost nobody monitors it.
5. Your CRM deduplicates and Google Ads does not
A prospect submits your form in March, then again in June when they are finally ready to buy.
Google Ads sees two conversions in two different months, both real, both attributable. Your CRM sees a returning contact and updates the existing record. The contact count goes up by zero.
Both systems are behaving correctly. They are answering different questions.
6. The dates don't line up
Google Ads attributes a conversion back to the date of the click. Your CRM stamps the record with the date it was created.
Pull "Google Ads conversions in March" against "CRM records created in March" and you are comparing two different sets of events. Widen to a quarter and most of this resolves.
7. Modeled conversions have no CRM equivalent
When a visitor declines cookies, Google Ads estimates the conversions it could not observe and includes them in your reported total.
There is no corresponding record anywhere, because the point of modeling is to account for activity that was never directly measured. If you run a consent banner, a portion of your Google Ads number is an estimate by design, and it will never have a CRM row behind it.
8. The leads are in the CRM, just not where you're looking
Before concluding anything is broken, confirm the report you are reading covers everything.
Leads routed to a different pipeline, assigned to an owner outside your filter, sitting in an unassigned queue, or created as a different object type than the one your report counts will all look like missing leads when they are just filed elsewhere.
Work it in this order
- Audit your conversion actions and demote everything that is not a real lead. Re-check the gap.
- Set lead actions to count one per click.
- Submit a test lead and confirm it lands in the CRM.
- Count last month's junk submissions.
- Compare a full quarter, not a month.
- Confirm your CRM report is not filtering out live leads.
After those six, most accounts land somewhere they can explain. A remaining gap of modeled conversions and deduplicated repeat contacts is normal and stable.
The real prize is pointing the arrow the other way
Everything above is about reconciling two counts. That is worth doing, but it is defensive work.
The offensive version is offline conversion import: sending your CRM outcomes back into Google Ads so the platform learns which clicks became qualified opportunities and which became junk. Then Smart Bidding stops optimizing for form submissions and starts optimizing for the leads your sales team actually wants.
You cannot do that until the two systems agree on what happened. That is why this reconciliation is step one and not busywork.
Want this reconciled for you?
The Conversion Tracking Audit checks exactly this path: every conversion action and how it is classified, your counting settings, the form-to-CRM handoff, and whether your Google Ads number can be explained against your CRM. You get a written list of what is inflated, what is broken, and what to fix first.
$599, fixed fee, no retainer and no call required first.


