A marketing report says the website generated forty leads last month. The sales team, who keep the CRM, say they got twelve, and three of those were recruiters. Both numbers are correct in their own terms, which is the frustrating part, and the meeting where they get compared usually ends with someone deciding analytics can’t be trusted. The gap has causes, most of them boring, and once you know what they are you can decide which number to run the business on and make the other one agree with it more often than not.
Quick answer: GA4 counts events, a CRM counts people, and the two disagree for predictable reasons: duplicate submissions, spam and test entries, thank-you pages that fire on reload, phone and email leads that never touch a form, consent and ad-blocker gaps, and third-party booking tools that break attribution. Pick the CRM as the system of record for lead counts, use GA4 for where leads come from, and pass a lead ID and the source data from the form into the CRM so the two can be reconciled line by line.
What is GA4 counting?
An event, every time a condition you configured is met. If the key event is “page view of /thank-you”, it counts every time that page loads, including the visitor who refreshes it, the one who bookmarks it and comes back, and the one who submitted the form three times because the button didn’t seem to do anything. If the key event is a form submission event from the form plugin, it’s closer, but it still counts spam that the form’s filter let through and the test submission the developer did on Tuesday. GA4 also doesn’t know the same person filled in two forms, so a prospect who downloads a guide and then requests a call is two leads.
Then there’s the measurement gap in the other direction. A share of visitors run ad blockers or decline cookie consent, and their conversions either never reach GA4 or arrive as modelled estimates. So GA4 is simultaneously overcounting submissions and undercounting people. Which effect wins depends on your audience; for a B2B services firm it’s usually the overcount, because the forms attract more junk than the audience blocks trackers.
What is the CRM counting?
Usually something narrower than “filled in a form”. Sales teams dedupe by email, delete the spam, and mark the recruiters and vendors as not-a-lead, and they often only create a record once someone has qualified the enquiry. Phone calls and direct emails go into the CRM without ever being a website event, and a referral who was told to “go through the website” so there’s a record looks, in GA4, like a direct visit that converted in thirty seconds.
There’s no bug here. The CRM is counting people worth following up, and GA4 is counting things that happened on the site. The mistake is expecting one to equal the other and then blaming whichever tool produced the number you liked less.
Where does attribution break?
Even when the counts are close, the source data often isn’t. The common breaks we run into:
The booking tool. A Calendly or similar embed lives on another domain, and unless cross-domain measurement is configured, the visitor who books a call is recorded as a new session from calendly.com. The lead exists in both systems and the source is wrong in GA4.
Consent mode. When a visitor declines analytics cookies, GA4 may still record a cookieless ping and model the conversion, but the CRM record for that person has no client ID to match on.
The form plugin. Some plugins submit via AJAX and never load a thank-you page, so page-view-based tracking misses every submission. Others redirect to a generic thank-you page shared by six forms, so you know a form was submitted and not which one.
Paid clicks. The click ID from Google Ads arrives on the landing page and gets lost by the time the form submits, unless something on the page stores it and passes it along. Without it, the CRM can’t tell you which campaigns produced the deals that closed, which is the only attribution question that matters commercially.
We covered a related set of problems for ecommerce in our post on GA4 not tracking Shopify purchases; services sites have fewer moving parts but the same principle, that the tracking has to be checked against what the business recorded, applies.
How do you make the two systems reconcile?
- Decide that the CRM is the system of record for how many leads there were, and GA4 is the system of record for where visitors came from. Say this out loud in the meeting so the argument stops.
- Give each form submission an ID that goes to both places. Most form plugins can generate one or pass the entry ID; send it as an event parameter to GA4 and as a field to the CRM.
- Add hidden fields to every form that capture the landing page, referrer, UTM parameters, the Google click ID, and the GA4 client ID, and map them to fields on the CRM contact. Now every CRM record says where it came from, in the CRM’s own terms.
- Stop counting thank-you page views. Track the form’s submission event instead, with the form name as a parameter, and mark only the real enquiry forms as key events.
- Set up cross-domain measurement for any booking or payment tool on a different domain, or replace the embed with a redirect that carries the parameters through.
- Once a month, export the CRM leads with their source fields and compare against GA4’s key events by source. They won’t match exactly. The reasons they don’t should be the same small set every month; a new reason means something broke.
Once the CRM holds source data for each contact, the interesting reports move out of GA4 entirely. Which sources produced leads that became customers, and what those customers were worth, is a CRM question, and it’s the one that decides the marketing budget. Firms running that report out of a spreadsheet stitched from two exports tend to hit the problems in our post on when to replace a spreadsheet workflow, and a small integration is usually the better answer.
That integration, forms into CRM with source data, plus a reconciliation report, is a fairly contained project, and it’s one we take on as part of digital transformation consulting when the underlying problem is that the business is making budget decisions on numbers nobody trusts.
Frequently asked questions
Which number should go in the board report?
The CRM’s, with GA4 used to explain the mix of sources. Reporting website leads from GA4 and sales leads from the CRM on the same slide is how the credibility of both gets lost.
Why did GA4’s lead count drop when we added a cookie banner?
Because visitors who decline consent no longer send full analytics data, and their conversions are either dropped or modelled. The leads still arrive in the CRM. This is one of the clearest reasons to make the CRM the count of record.
Can I see which Google Ads campaigns produced closed deals?
Only if the click ID is captured at form submission and stored on the CRM contact, and the deal outcome is then reported back, either by importing offline conversions into Google Ads or by running the report from the CRM. Neither happens by default.
Do I need a server-side tagging setup?
For a services site with a few forms, usually not. Hidden fields and a proper submission event solve most of the gap for a fraction of the cost. Server-side tagging starts to make sense when ad-blocker loss is large and paid spend is high enough that the missing data changes decisions.
How do I handle leads that call instead of filling in a form?
Use a tracking number that swaps in based on source if call volume justifies it, or ask on the call and record the answer in the CRM. Either way the lead is created in the CRM with a source, which is the point.
Our form plugin submits without a page reload. What do we track?
The plugin’s own submission event. Most popular plugins fire a JavaScript event or a data layer push on success; send that to GA4 with the form name attached, and stop relying on a thank-you page that no longer loads.