Skip to main content
Certified Google Partner
Back to blog

Google Ads Conversions Don't Match Your CRM: Where the Join Breaks

Three client calls in one week, three industries, and the same argument every time: the CRM says one number and the ad platform says another. Here are the three places the connection actually breaks, and how to tell which one you have.

Kyle RutledgeBy Kyle RutledgeAugust 24, 202617 min read
Illustration of two data panels connected by a broken line, one showing eight records and the other showing one, representing a gap between CRM lead counts and Google Ads conversions.

Three client calls last week, three different industries, and the same argument on every one of them: the CRM says one number, the ad platform says another, and nobody in the room can tell you which one is right.

When your Google Ads conversions don't match your CRM, you are not looking at one problem. You are looking at one of three problems, and they have completely different fixes.

On Monday it was a client in insurance claims. A real appointment-qualified lead sitting in HubSpot that Google Ads had never heard of. On Wednesday it was a home services client whose CRM showed eight quotes created while the ad platform showed one. On Thursday it was a retirement planning client with a couple thousand junk rows in an upload sheet because a Zap had been firing on the wrong trigger for a week.

Same symptom. Three unrelated causes. Yes, this is the whole diagnostic, published free. Run it yourself.

Why Google Ads conversions don't match your CRM in the first place

Start here, because most teams skip it. These two systems were never going to agree exactly, and chasing parity is the wrong goal.

Google Ads counts conversions against the click that earned them, and stamps them with the date of the click, not the date the deal moved. Your CRM counts people and records, deduplicated, stamped with the day something actually happened. One person who fills out a form, comes back a week later, and calls you is one contact in the CRM and can be several conversions in the ad account. A small gap between the two systems is structural. It is not a bug.

What matters is the direction of the gap.

If the ad platform shows more conversions than your CRM has leads, you have an inflation problem. phantom tags, hover triggers, thank-you pages people can reach directly. That is a different post, and I wrote it already, because inflated conversion tracking is worse than having none at all.

If the ad platform shows fewer conversions than your CRM, the join between the two is broken. That is what this post is about, and there are exactly three places it breaks.

Break One - the click ID never made it into the CRM

This is the most common one, and the insurance claims call last week is a clean example of it.

Our account manager pulled the one appointment-qualified lead from the previous week to trace it back. HubSpot had her. HubSpot even had the campaign, captured from the UTM parameters on the landing page. Everything looked fine until we opened the record and found no Google click ID. No GCLID, no upload, no signal. A genuinely qualified appointment, the exact outcome the campaign exists to produce, and the bid algorithm will never know it happened.

The tell for this break is specific in that you can name the campaign but you cannot upload the conversion. UTMs and click IDs are different things doing different jobs. UTMs are for your reporting. The click ID is one of the only things that lets a CRM outcome travel back into the ad platform and change bidding. Teams see the campaign name populated in the CRM, assume tracking works, and never check the field that actually matters.

The usual culprits, roughly in order of how often I find them:

  • Auto-tagging is off in the Google Ads account, so there is no click ID on the URL to capture.
  • Auto-tagging is on, but the form has no hidden field reading the parameter and writing it to the CRM.
  • The visitor hops domains between the ad click and the form, and the parameter gets dropped in transit.
  • The lead arrived through a channel that never carried a click ID at all (a phone call, a chat, a referral from someone who saw the ad on a different device.)
  • The contact got merged with an older record and the click ID lost the fight.

The Fix - Enhanced conversions for leads as the fallback path

When the click ID is genuinely gone, you are not out of options. Enhanced conversions for leads lets you upload a conversion keyed on hashed first-party data, primarily email address and phone number, instead of a click ID. Google matches it back to the click on its side. That is the workaround we are testing on this account: pull the qualified lead's email and phone, push it through the enhanced conversions upload, and get the outcome into the platform anyway.

Be honest about the tradeoff. Match rates on hashed data are not one hundred percent, so this recovers some of your missing conversions, not all of them. It requires auto-tagging on and the customer data terms accepted in your account. And it is a fallback, not a replacement. If your click ID capture is broken at the form level, fix the form. Do not build a permanent workaround around a five-minute problem.

Break Two - the conversion came back too late to count

The home services call was the second flavor. Our side of the table had eight quotes created and four approved for the month. The client's view of the ad platform showed one booked appointment and almost nothing on the quote actions. That is not a rounding difference, and everyone on the call could see it.

The structural cause our account manager named on that call is the one most teams never think about. If a lead was created a while ago and you push the outcome back to the platform now, the platform will not recognize it. Attribution windows are hard walls, not soft preferences. The record is real, your CRM is right, and the upload still bounces.

On Google, the click ID expires ninety days after the click. But the harder limit is not the import window, it is the learning window. In my experience the bid strategies really only leverage conversion data from a much shorter period, roughly two weeks, when training. So a closed deal at day 75 imports cleanly, shows up in your reports, and steers nothing. I went through the full stage-by-stage build for this in the post on offline conversion tracking for long sales cycles.

The tell for this break is the size of your gap scales with the length of your sales cycle. Short cycle, small gap. Ninety-day cycle, enormous gap. If that describes you, no amount of plumbing will fix it, because the problem is not the pipe. It is which stage you chose to send.

The fix is to send an earlier qualified stage, not the closed deal. Closed Won has perfect quality and nowhere near enough volume to train on. The best training signal is usually the first stage where a human has confirmed the lead is real, because it carries genuine quality information, it happens often enough to matter, and it lands inside the window where the algorithm is still listening. Skip that and you walk straight into the Reverse Optimization Trap. Feed the platform form fills and it will get very good at finding you more form fills.

Break Three - The pipe itself is firing wrong

The third call was the least glamorous and the most instructive. We opened the upload sheet for a retirement planning client and found a couple thousand rows in it. The client does not have a couple thousand leads.

The Zap watching the CRM had been built on a generic record trigger, so it fired every time anything on a record changed. Any field edit, any note, any automation touching the record wrote a new row. The sheet had quietly turned into noise weeks earlier and nobody had opened it.

Two changes fixed it. Move to a specific trigger that fires on the field you actually care about, and add a filter that requires the click ID to exist before a row is ever written. Then clear the junk rows out, leaving the header formatting intact so the upload keeps parsing.

The tell here is embarrassingly simple. Compare the row count of your upload sheet to the lead count in your CRM for the same window. If they are not in the same neighborhood, stop optimizing and go read the sheet. This break usually shows up as inflated numbers or failed uploads rather than missing ones, but it belongs in the same bucket, because the outcome is identical. Two systems disagree and you cannot trust either.

The diagnostic, in the order I actually run it

Do not start with dashboards. Dashboards are where this problem hides.

  • Trace one real deal end to end. Pick a single closed or qualified lead you know came from paid, and follow it from the ad click to the CRM record to the upload sheet to the conversion in the platform. One lead traced properly tells you more than a month of reports. Every one of the three breaks above was found this way.
  • Look at the click ID field, not the setting. Open an actual CRM record from a paid lead and confirm the value is there. Auto-tagging being enabled proves nothing about whether your form is capturing it.
  • Compare row counts to lead counts for the same date range. This catches break three in about thirty seconds.
  • Measure your click-to-conversion lag. Take your qualified deals and calculate the days between click date and stage date. If the median is past two weeks, your signal is arriving too late to train anything, and you need an earlier stage.
  • Segment the conversions column by conversion action. If you find volume you cannot explain, you have the inflation problem instead, and you should fix that first.
  • Name the source of truth out loud, in the meeting. It is the CRM. It is always the CRM. Half the time these calls stall not because the data is unclear but because nobody has agreed which number the team is allowed to act on.

What matching should actually mean

I will take a position here, because the question comes up on nearly every one of these calls and the honest answer disappoints people: your Google Ads conversions and your CRM should never match exactly, and building toward that is a waste of a quarter.

The real bar is two things. Every conversion the ad platform sees should be a real business outcome. And every real qualified lead should have a path back into the platform fast enough that it can still change what the algorithm bids on tomorrow. Hit those two and a persistent gap between the systems is fine. Miss them and perfect-looking parity is worthless.

The ad platform is not, and will never be, your revenue source of truth. It is a bidding machine that needs good instructions. Your CRM data is the most valuable asset in your ad account because it is the only place the full story lives. The whole job is getting the important parts of that story back to the machine before it stops listening.

If you would rather have someone trace it with you, we do a free system review where we take one real deal and follow it all the way through, then tell you which of the three breaks you have.

Sources

Kyle Rutledge

About the author

Kyle Rutledge

Owner

I’m Kyle, founder of Gradari, a paid ads lead generation agency that helps B2B and SaaS companies stop wasting budget on low-quality leads and start building systems that actually drive growth.

Ready to improve your leads?

Turn your ad spend into quality leads that close.

Get Your Free System Review

Ready to see what your ads are actually learning?

Most agencies will tell you to spend more. We'll show you why that's the wrong next step, and what to do instead.