A Bristol head of demand generation sat in a QBR last month with two numbers that should have matched and did not. Google Ads claimed 186 conversions. The CRM showed 41 sales-accepted opportunities from paid search. GA4 sat in the middle with 94 key events, most of them thank-you page views that fired twice. Nobody in the room argued about creative. They argued about whether the pipeline even existed.
That is the job of GA4 in the UK right now. Not sessions. Not a pretty acquisition report. A clean, consent-aware record of real enquiries that finance will accept when you ask to move budget from Meta to Search, or from branded terms into Performance Max. ROAS benchmarks vary from under 2x in competitive B2C to well above 5x in niche B2B, but you cannot benchmark against any of them if the conversion event is wrong. You will never know if you are near a useful number if the event Google is learning from is a button click, a duplicated generate_lead, or a form start that never reached HubSpot.
UK properties pick up extra mess: Consent Mode v2, IAB TCF strings on WordPress and Shopify stacks, call tracking overlays on 01 and 07 numbers, and WhatsApp widgets that never fire as events. Ad blockers and privacy changes already strip 20%+ of conversion data. If your remaining signal is the wrong event, Smart Bidding is not “a bit off”. It is buying the wrong people in London, Manchester, and Leeds with a confident smile.
Below are the GA4 tracking mistakes UK marketing teams actually ship, why they hide pipeline, and what to change without rebuilding the whole stack.
Six GA4 tracking mistakes that make UK pipeline disappear in the reports
These are configuration errors, not strategy sermons. Each one has a setting, a report, or a habit you can open this afternoon.
Common mistakes
-
Marking thank-you page views as the only key event - Mechanism: the GTM tag fires on a URL contains /thank-you/ with no form_id, no lead_type, and no unique transaction_id. SPA themes in Webflow and some estate-agent platforms re-render the page, so one enquiry becomes two or three key events. Google Ads imports that event. CPL looks cheap. Sales sees half the volume and worse quality. Fix: fire generate_lead once on a successful POST or CRM webhook, pass a unique event_id, and mark that as the key event. Keep the page_view as a diagnostic, not the conversion Google bids on.
-
Sending the same enquiry from the site tag and the Ads tag - Mechanism: GA4 config tag plus a Google Ads conversion linker plus an extra “lead” event in the web container, all without deduplication. Last-click models already count the same conversion across channels. You then double it inside one channel. UK accounts that also run call tracking pixels often add a third fire when the thank-you loads. Fix: one primary lead event in GA4, Enhanced Conversions with a hashed email or phone, and a matching event_id if you also send server-side. Import that single key event into Google Ads. Kill the old Ads-only pixel if it still sits in GTM from 2023.
-
Ignoring Consent Mode so paid looks healthier than organic - Mechanism: the cookie banner denies analytics_storage but the GA4 tag still fires, or worse, ads_storage is granted while analytics is denied and you never model the gap. Reports then show paid converting and organic “dead”, so you starve SEO. UK shops on OneTrust or Cookiebot often map purposes incorrectly, so generate_lead never leaves the browser on denied traffic. Fix: implement Consent Mode v2 with wait_for_update, send pings in denied states, and compare modelled vs observed conversions in the GA4 admin. Do not scale spend until denied-state leads are either modelled or captured server-side with a lawful basis you can defend.
-
Tracking form starts and phone-number taps as if they were booked work - Mechanism: click on tel: links, HubSpot form start, and Calendly popup open all marked as key events. Mobile is 63%+ of paid search clicks globally, and conversion rates still lag desktop. You inflate mobile “leads” with pocket dials and rage clicks on sticky call bars. A plumber or electrician landing page in Birmingham can look like a 12% CVR while the diary is empty. Fix: key events only on submit success, booked slot, or a call over a minimum duration from your call tracker. Keep tap and start events as funnels, not bid signals.
-
No parameters that sales would recognise - Mechanism: generate_lead fires with zero custom dimensions. You cannot split brochure downloads from demo requests, London vs Glasgow, or new vs existing customer. Pipeline contribution from a channel becomes a guess. Finance asks for cost per qualified lead and you export a CSV of anonymous events. Fix: attach lead_source, form_name, service_line, and a hashed email when the user consents. Register them as custom dimensions. Then join to CRM on email or a hidden form field, not on “session source = google / cpc” three weeks later.
-
Trusting DebugView once, then never watching the live site - Mechanism: someone passed DebugView on staging, then a theme update, a new WhatsApp float, or a Core Web Vitals plugin broke the dataLayer. Fewer than half of origins pass all three Core Web Vitals. Slow INP on enquiry forms means the submit listener never attaches on mid-range Androids. You lose the best-intent traffic and never see it in GA4. Fix: after every release, test the live thank-you path on a real UK mobile, then use behaviour data to see if people actually reach submit. HeyLead Insights is how you catch form abandon, dead CTAs, and proof that sits below the fold before you blame the event name.
If your GA4 property is a tangle of legacy tags and you want a specialist to rebuild events against real UK enquiries, the GA4 configuration work is the cleanest place to start, not another dashboard skin.
DIY playbook
-
Export the last 28 days of key events. Cross-check count against CRM opportunities created from web forms and tracked calls. Write the ratio on a slide. If it is not roughly 1:1 after obvious spam, stop adding campaigns.
-
In GTM, list every tag that can fire generate_lead, purchase, or a Google Ads conversion. Delete or pause duplicates. One success path, one event_id.
-
Confirm Consent Mode mappings against your CMP. Denied analytics should not look like a healthy unpaid channel in acquisition reports.
-
Demote click-to-call and form_start from key events. Keep them in explorations as drop-off steps only.
-
Add form_name and service_line parameters, then mark generate_lead as the only event Google Ads imports for lead-gen.
-
Watch five live enquiry sessions on mobile. If users never hit submit, fix the page before you touch bidding.
Free tools - try these yourself
Repair order when Google Ads, GA4, and the CRM all disagree
You cannot fix six things in a week without breaking learning. UK paid accounts already sit on Search CPCs that have been climbing. Every unnecessary campaign edit resets Smart Bidding. Sequence the plumbing, then the signal, then the creative budget.
This month, only three jobs earn a calendar slot. First, stop duplicate fires. Open GTM preview on the live enquiry path, not staging, and count how many times generate_lead hits the network tab. Second, align the key event to a CRM-accepted enquiry: form success, qualified call, or booked meeting. Third, turn on Enhanced Conversions with the fields you actually collect. If you do not have email on a call-only landing page, do not pretend you do. Send the phone hash instead.
What can wait: pretty explorations, a full server-side GTM migration, and a new naming convention for 40 custom events. Server-side helps when you are already losing 20%+ of conversions to blockers, but it will not save you if the browser event is still a thank-you pageview. A Glasgow SaaS team we talked through last winter spent six weeks on a server container while Google Ads still imported “click_button”. Pipeline did not move. The import change took an afternoon.
Landing speed sits next to tracking, not after it. If INP is ugly on the form, the listener never runs and you “fix GA4” forever. Check Core Web Vitals on the actual enquiry URL, not the homepage. UTMs still matter: in accounts without negative keyword discipline, query waste routinely exceeds 20% of spend. If every Performance Max session lands as (not set) because the final URL strips parameters, you will blame GA4 for a redirect problem.
When Ads CPA and GA4 key events diverge by more than you can explain with modelled conversions, freeze budget increases. You do not need more traffic into a broken denominator. If the landing page is the leak, a short pass on event quality and GA4 setup plus the form itself will beat another week of bid experiments.
Get a free marketing audit - we review your search, ads, and landing pages and send back what to fix first.
Get a free audit

The Leeds B2B account that stopped bidding on a ghost thank-you
A head of growth at a Leeds industrial supplier had Performance Max “driving the bulk” and a CPL that looked like a win on the Ads scoreboard. Sales kept saying the leads were brochure hunters. GA4 showed generate_lead on every visit to /thanks/, including people who hit the URL from an old email footer. The team had never set a unique event_id. Direct traffic was inflating the same key event Google used for value-based bidding.
They did one change first: GTM would fire generate_lead only after the HubSpot form returned a 200 and wrote a contact with lead_type = enquiry. Brochure downloads got a separate download event that was not imported. Within 11 days the Ads conversion count dropped by about 37%. That felt like a disaster in the weekly screenshot. Qualified opportunities from paid did not drop. Cost per sales-accepted lead finally had a denominator sales would sit with.
Second-order effect: they could finally see that mobile form abandon was the real hole, not keyword coverage. Session recordings showed the VAT-inclusive pricing table covering the submit button on iPhone SE widths. They moved the button, kept the event definition, and only then added budget. That is the order. Signal, then page, then spend.
What marketing leaders are seeing
“We had generate_lead on the thank-you URL and a second fire from the HubSpot native tag. Google Ads was learning from 2.1 events per real enquiry. We cut the URL trigger and CPL looked worse for a fortnight. Pipeline from Search did not.” - Head of Growth, a 60-person manufacturer in the Midlands
“Consent Mode was ‘on’ in the CMP and off in GTM. Organic looked dead in GA4 so we starved content. Once denied-state pings were actually sending, branded organic was carrying a third of the form fills.” - CMO, a Sheffield professional services firm

FAQs
Should UK teams mark every form as a GA4 key event?
No. Newsletter, brochure, and “download the spec” forms pollute bidding. Keep them as events. Promote only the enquiry that sales will accept: demo, quote, call over a duration threshold, or booked consult.
Why do Google Ads conversions and GA4 key events never match in the UK?
Different attribution windows, Consent Mode modelling, Enhanced Conversions, and duplicate tags. Aim for a stable ratio you can explain, not identical integers. If Ads is 2x GA4 with no modelling story, you still have two tags firing.
Do we need server-side GTM before we trust pipeline numbers?
Not first. Deduplicate the browser event, fix consent mapping, and import one key event. Server-side helps recover blocked hits later. It will not repair a thank-you pageview used as a conversion.
How should call tracking sit next to GA4?
Pass call outcomes (duration, source, campaign) into a call_completed event. Do not key-event every tap on a 01 or 07 number. Pocket dials on mobile will wreck CPL and teach Performance Max the wrong audience.
What is a sensible check after a website release?
Submit a dummy enquiry on production with consent granted and denied. Confirm one generate_lead, parameters present, and the CRM row. Then look at five real sessions for submit friction before you reopen bidding changes.
Putting it to work
Execution sprint
This week
- Pull 30-90 days of performance for ga4 mistakes that hide real pipeline from marketing (Search Console, ads, CRM, or call logs - whatever you have).
- Flag the top leak: wrong intent, weak page, slow response, or dirty conversion tracking.
- Ship one fix on the highest-traffic money path (page, campaign split, or response rule).
- Run the free tools below on that same URL or account and log the findings.
Free tools for this sprint
Next 30 days
- Expand the fix to the next one or two money paths only after the first one shows cleaner bookings.
- Align creative, keywords, or content with the same offer the page now states.
- Review booked outcomes weekly; cut anything that still only produces unqualified volume.
Start here in the next few days
-
Pull 28 days of GA4 key events versus CRM opportunities created from web and tracked calls. Note the ratio, not a narrative.
-
In GTM preview on production, count generate_lead fires on one successful enquiry. Reduce to one.
-
Remove form_start and tel: clicks from key events. Leave them in funnels.
-
Register form_name and lead_type as custom dimensions if they are missing.
-
Run the enquiry URL through a Core Web Vitals check and submit one test lead with UTMs from the UTM link builder.
Next 30 days
-
Turn on Enhanced Conversions for the fields you actually collect.
-
Reconcile Consent Mode with your CMP on a denied-state test.
-
Import only the sales-accepted event into Google Ads and pause legacy conversion actions.
-
Use behaviour recordings on the form to fix abandon before you raise budgets.
Pull your last 28 days of key events against CRM-accepted enquiries and write down the ratio before you change a single bid. If the gap is duplicate thank-you fires, consent holes, or click events teaching Performance Max the wrong lesson, HeyLead can own that GA4 event design, GTM cleanup, and Ads import so the number you take to finance is an enquiry sales would recognise. Chat with us on WhatsApp
Free marketing audit, or reach Martin directly:
Get a free audit Connect on WhatsApp · martin@heylead.com