The short answer.
GA4 conversions rarely match your leads because GA4 counts browser events, your inbox counts form entries, and your CRM counts people. When GA4 is higher, the usual cause is more than one key event firing per enquiry. When it is lower, the usual causes are consent choices, forms inside iframes or on other domains, and blocked tags.
Those three systems will never match exactly, and they should not have to. What you need is a known, explained gap. If you can say “GA4 runs about 10% below the inbox because some visitors decline analytics cookies”, the numbers are usable. If nobody can explain the gap, every report built on it is guesswork. The audit below takes an afternoon and needs only admin access to GA4, the form plugin and the CRM.
Four numbers that should agree, and why they don’t.
Start by writing down four counts for the same seven days. Pick a week that ended at least two days ago, because Google says standard GA4 data processing can take 24 to 48 hours.
| Number | What it counts | Usually higher because of | Usually lower because of |
|---|---|---|---|
| GA4 key events | Browser events you have marked as important | Duplicate key events, page reloads, automatic form events, your own testing | Declined consent, blockers, iframes, tags that fire too late |
| Form entries (inbox) | Submissions the server accepted | Spam posted straight to the form, tests | Failed notifications, entries deleted by a spam filter |
| CRM leads | Contact records created | Leads from calls, chat, events and imports | Duplicates merged, sync failures, manual filtering |
| Real buyers | People sales would call a genuine opportunity | (should be the smallest number) | Pitches, job seekers, students and existing customers |
The last row matters most. When we read all 30 submissions to our own forms between 15 September and 5 November 2026, every one turned out to be a test, spam, a vendor pitch or an impersonation attempt. A GA4 report that matched the inbox perfectly would still have told us nothing about buyers. Our guide on website lead tracking shows how to make that classification part of the CRM record.
Cause 1: two key events for one enquiry.
This is what we found on prolinkage.com. Our property had four key events. When we submitted a test enquiry, two of them fired for the same submission: generate_lead, which we had set up deliberately, and ads_conversion_Sign_up_1, an advertising event left over from an earlier setup. Every enquiry was being counted twice.
prolinkage.com, GA4 property test on 6 Nov 2026: generate_lead plus a leftover advertising event, then generate_lead alone.
We removed the leftover event from the key events list. It is still collected, so nothing is lost, but it no longer counts as a key event. One enquiry now produces one generate_lead. Google says “any event you collect can become a key event”, which is exactly how these duplicates appear: someone links Google Ads, imports a goal or follows a tutorial, and a second event gets switched on beside the first.
How to check yours in five minutes
- In GA4 Admin, open Key events and write down every event marked as key.
- For each one, ask: what single action is this meant to count?
- Submit one test enquiry and watch which of them fire. If more than one fires for the same action, unmark all but one.
Cause 2: thank-you pages that count twice.
A common setup is to create a key event from a page_view on the thank-you URL. Google’s own help article describes creating an event this way. It works until the buyer reloads the page, bookmarks it, presses back and forward, or the page is shared and opened by a colleague. Each of those is another page view, and so another key event.
GA4’s counting setting decides how much this hurts. Google lists two methods: “once per event”, which counts a key event every time it is triggered and is the recommended default for most new key events, and “once per session”, a legacy option that counts it only once in a session. Under the default, every reload counts.
The cleaner fix is to fire the lead event when the form is accepted, not when a page loads. On our site the form pushes generate_lead into the data layer before it redirects to /thank-you/?for=report, so reloading the thank-you page adds nothing. If you keep a page-view trigger, make sure the thank-you page is not indexed and is reached only by submitting the form.
Cause 3: automatic form events doing their own counting.
GA4’s enhanced measurement can record form interactions automatically. Google describes form_start as “the first time a user interacts with a form in a session” and form_submit as firing “when the user submits a form”. That second event is about the browser, not your server. It can fire for a newsletter box, a site search, or a submission your validation then rejects.
That is fine as a behaviour signal. It becomes a problem when form_submit is marked as a key event beside a proper lead event, or instead of one. Check the key events list again: if form_submit is there, it is almost certainly counting more than enquiries.
A related duplicate is two tags sending the same event. A site that has the Google tag hard-coded in the theme and a GA4 tag in Google Tag Manager can send every event twice. In DebugView, a single click producing two identical events a few milliseconds apart is the sign.
Cause 4: forms inside iframes and on other domains.
If your form is embedded from a CRM, a scheduling tool or a form builder, it often sits inside an iframe served from another domain. The GA4 tag on your page cannot see what happens inside it, so a successful submission may record nothing at all in GA4 while the CRM receives the lead. In our audits it is one of the most common reasons GA4 runs below the CRM.
When the journey crosses domains, say from your marketing site to a separate app or booking page, GA4 needs cross-domain measurement. Google explains that it keeps the same IDs by passing them in a _gl URL parameter. Without it, “new cookies with new IDs are created for each domain a user visits”, so one person becomes two users and two sessions. The lead is then credited to your own domain as a referral rather than to the ad or search that brought them.
The test is simple: submit through the embedded form and look for your lead event in DebugView. If nothing appears, the tool needs its own tracking setup, or a success message your page can listen for.
Cause 5: consent and modelling.
In basic consent mode, Google tags do not load until the visitor responds to the consent banner. A buyer who declines, or ignores the banner and enquires, can send a perfectly good enquiry that GA4 never sees. In advanced consent mode, tags load with consent denied and send cookieless pings, which Google uses to model the missing data.
Modelling does not switch on for every property. Google lists prerequisites for GA4 behavioural modelling, including at least 1,000 events a day with analytics storage denied for at least seven days, and at least 1,000 daily users with it granted on at least seven of the previous 28 days. Below that, there is no modelled fill. Even when it applies, you only see it with the Blended reporting identity selected.
Two practical points. If your traffic is mostly from the UK and Europe, expect GA4 to run below the inbox, and record the size of the gap instead of trying to close it. And when you test, accept analytics cookies first: Google notes that DebugView may show nothing when consent for analytics cookies is not given.
Cause 6: spam, bots and your own team.
Google says traffic from known bots and spiders is automatically excluded from GA4, using its own research and the IAB’s International Spiders and Bots List, and that you cannot see how much was removed. That covers crawlers. It does not cover the form spam that fills most B2B inboxes. In our experience much of it is posted straight to the form and never runs your analytics script. That is why spam usually pushes the inbox count above GA4, not the other way round.
The other inflation is you. Teams test forms, sales staff click their own ads and developers reload thank-you pages. On 6 November 2026 we added an internal-traffic rule for the machine we run tests from, alongside our existing office rule, with GA4’s Internal Traffic data filter already active. Google’s steps are to define internal traffic by IP address under the data stream, then run the filter in Testing state before making it Active. Its documentation says the effect of an active filter on data is permanent and that a filter can take 24 to 36 hours to apply. Home and mobile IP addresses change, so recheck the rule whenever test entries appear in reports.
Cause 7: dates, time zones, attribution and thresholds.
Some gaps are not errors at all. They are systems recording the same thing on different days or under different rules.
- Click date versus action date. Google Ads reports a conversion on the date of the click; GA4 reports it on the date it happened. Google’s example: a click on 19 July and an action on 20 July appear on 19 July in Google Ads and 20 July in GA4.
- Time zones. GA4 uses the time zone set on the property; your CRM, form plugin and Google Ads account each have their own setting. A form sent at 11pm in New York can land on different days in each.
- Creation date versus event date. CRMs usually report leads by record creation date. If the CRM creates the record when sales first reviews it, the dates drift further.
- Attribution. GA4’s reporting attribution model decides which channel gets credit, and changing it applies to historical and future data. The default lookback window for most key events is 90 days. Your CRM’s “original source” is a different rule, so channel-level counts will differ even when totals agree.
- Thresholds. GA4 can withhold rows to protect user privacy, especially in narrow date ranges with few users or when demographic data is included. Google’s advice is to widen the date range.
Write these rules down next to your reconciliation, so the next person does not spend a day rediscovering them. If paid campaigns are involved, our article on why Google Ads leads don’t convert covers the gap between platform conversions and sales outcomes.
The afternoon audit, step by step.
This is the order we work in. Each step rules out a cause before the next one, so stop and fix as soon as you find something.
- 01 · ADMINList every key event and what it should count
- 02 · COUNTSFill in GA4, inbox, CRM and buyers for one closed week
- 03 · DEBUGOpen Tag Assistant and DebugView, submit one test enquiry
- 04 · RELOADReload and revisit the thank-you page; watch for repeats
- 05 · CONSENTRepeat with cookies declined, then on a phone
- 06 · EMBEDSSubmit every embedded or off-domain form
- 07 · FILTERSCheck internal traffic rules and write down the gap
The audit sequence. Most duplicates show up by step 04; most undercounts by step 06.
Using DebugView and Realtime
Google’s DebugView shows events from devices in debug mode. The quickest way in is Tag Assistant or Tag Manager preview, which adds a parameter to your URL that turns debug mode on for your own browser. Open Admin, then DebugView; the middle column lists events logged in the last 60 seconds. Submit your test, then count: one lead event per submission is the target. Realtime is the second check. Google says its data typically arrives within a few minutes, so it confirms the event reached reports, not just the debugger.
If you would rather have someone else walk the path, our search and conversion audit runs these checks with screenshots of each step. Two habits make this audit repeatable. Tag every test submission with a recognisable UTM campaign, such as utm_campaign=tracking-check, so you can find and exclude it later. And keep a dated note of what you changed: we log every key event change with the before and after list, so it can be reversed in minutes.
The reconciliation calculator.
Enter four counts for the same closed week. The calculator compares each pair and lists the most likely causes to check first. Nothing you enter leaves this page.
Enter your four numbers to see the gaps.
The thresholds here are rules of thumb from our audits, not Google figures. A 10% gap you can explain is better than a 0% gap you cannot. Once the counts are trusted, our guide to cost per lead versus cost per qualified opportunity shows what to report from them.
Questions owners ask.
Why are my GA4 conversions higher than my actual leads?
Usually because more than one key event fires for each enquiry. Common culprits are a leftover advertising event, a page_view key event on a thank-you page that gets reloaded, or the automatic form_submit event marked as a key event. Submit one test enquiry in DebugView and count the key events it produces.
Why does GA4 show fewer leads than my CRM?
The most common reasons are visitors declining analytics consent, forms embedded in iframes from another domain that GA4 cannot see, and tags blocked by browsers or extensions. The CRM may also receive leads from calls, chat and imports that never touched the website. Compare website-sourced CRM leads only.
How much difference between GA4 and the CRM is normal?
There is no universal figure, because it depends on your consent rates, audience and form setup. What matters is that the gap is stable and explained. Measure it for a few weeks, write down the reasons, and investigate whenever it moves sharply without a known change.
Should I count key events once per session to stop double counting?
Google describes once per session as a legacy option and recommends once per event. Switching can hide a duplicate rather than fix it. Find out why the event fires twice, such as a reloadable thank-you page or a second tag, and fix that instead.
Does GA4 filter out spam form submissions?
GA4 automatically excludes known bots and spiders, but that does not stop form spam reaching your inbox. Much form spam is posted directly to the form without running your analytics, which is why it inflates inbox counts rather than GA4. Filter it at the form and classify what gets through.
Which number should I report to the board?
Real buyers, and the CRM opportunities they became, with the source recorded. Use GA4 key events to understand behaviour and trends on the website, and the inbox count to check nothing is being lost. Neither is a measure of pipeline on its own.
Sources: Prolinkage’s own GA4 property and forms, tested and changed 6 November 2026; form submissions classified 15 Sep–5 Nov 2026. External, all accessed 7 Nov 2026: Google Analytics Help (key events, counting methods, enhanced measurement, cross-domain measurement, consent modelling, internal traffic, bot exclusion, DebugView, data thresholds, data freshness, attribution settings); Google Ads Help (Google Ads and Analytics conversion differences); Google consent mode documentation.
