On a Thursday in Manchester, a head of growth can have Google Ads bidding against “generate_lead” while the CRM only shows a handful of real enquiries. The gap is rarely the media plan. It is usually three missing or messy events: the form that actually submitted, the click-to-call that reached a number, and the chat that started a conversation. This how-to finishes that job. When you are done, GA4 records those three actions as named events, you have marked the ones that match a sales-accepted enquiry as key events, and Google Ads can import the same names without counting thank-you pageviews as pipeline.
UK shops live on mixed enquiry types. A Bristol SaaS site might live on demo forms. A Glasgow services firm still books half its week from mobile tap-to-call. A London B2B site often hides the real conversation in Intercom or a widget that never fires a dataLayer push. If those three are not first-class events, Smart Bidding and Performance Max will optimise to whatever you labelled a conversion last year. Smart Bidding does not care whether the conversion that trained it was a newsletter signup or a £4,000 contract - it just chases whatever label you gave it. This piece is the setup, in order, with the screens and fields you actually touch.
What must already be true in your UK stack before you write a tag
Skip this and you will publish tags that fire in DebugView and vanish in production. You need Editor (or above) on the GA4 property, Publish rights in Google Tag Manager on the same container the site loads, and Admin on the Google Ads account that will import the events. If consent is handled through a CMP (Cookiebot, OneTrust, CookieYes, or a custom banner), Consent Mode v2 must already map analytics_storage and ad_storage. A denied state with tags still firing is worse than no tags: you train bidding on a biased slice of users who clicked Accept.
Confirm the website actually loads one GTM container, not a leftover gtag.js plus a second GTM from a previous agency. Duplicate bases are how you get two form events for one submit. Check the source of every enquiry you care about: HTML forms, HubSpot or Gravity Forms embeds, click-to-call on tel: links, WhatsApp wa.me buttons, and live chat widgets. Write the business definition of “enquiry” in one sentence. Example: “A completed contact form, a click on a displayed UK phone number, or a visitor-initiated chat message, excluding newsletter and careers.” That sentence becomes your event naming rule.
You also need a way to see post-click friction, because a perfectly fired form event on a page that never gets completed is a measurement win and a commercial loss. Session recordings and heatmaps in HeyLead Insights show where people stall on VAT questions, long forms, or a chat bubble covering the submit button. Use that before you decide the event is “working”. If Core Web Vitals are poor, INP from third-party chat scripts can delay the click that should have fired the event. CrUX data from May 2026 shows only 55.9% of origins pass all three Core Web Vitals - meaning there is roughly a coin-flip chance your form page has an INP problem that delays the click-event you are about to tag. Check before you publish.
If paid search is in the mix, keep Enhanced Conversions on the same property you are tagging. First-party hashed emails from the form protect against the 20%+ conversion loss teams already blame on ad-blockers and privacy changes. You do not need a new attribution model this week. You need three clean events that match how UK buyers actually ask for a quote.
If the GA4 property and the Ads conversion actions have drifted for months, a specialist pass on GA4 configuration and events is cheaper than another quarter of Smart Bidding trained on newsletter clicks.
Build form, call, and chat events in GTM, then mark them as key events in GA4
Work in a GTM workspace named with the date, not “Untitled”. Preview against a staging URL and a live UK page that still has the real phone number and chat widget. Do not invent event names like generate_lead_v2. Use stable names you can import into Ads: form_submit, click_to_call, chat_start. Parameters carry the detail (form_id, phone_location, chat_provider).
How-to
-
In GTM, create a GA4 Configuration tag (labelled “Google tag” in updated containers) pointing at your GA4 Measurement ID. Set it to fire on All Pages after consent is granted. Do not create a second one if the container already has one - duplicate base tags cause duplicate hits.
-
Form: if the form does a hard redirect to /thank-you, use a Page View trigger matching that path. If it updates the URL client-side without a full page load (hash routing, pushState), use a History Change trigger instead. Use a GA4 Event tag named form_submit and add a parameter form_id. If the form is AJAX (HubSpot, Typeform embed, custom React), do not use the thank-you URL. Listen for the vendor callback or a dataLayer push such as event: form_submit. Trigger only when that event fires, and exclude newsletter IDs in the trigger condition.
-
Call: create a Click trigger, Just Links, Click URL contains tel:. Fire a GA4 Event click_to_call. Capture Click URL as phone_number and Click Text as link_label. If you show different numbers for London vs Leeds landing pages, pass page_location so you can see which creative drove the tap. Filter out tel: links in the footer legal line if those are not sales lines.
-
Chat: most UK sites use Intercom, Drift, Tidio, or a WhatsApp button. For WhatsApp, trigger on Click URL contains wa.me or api.whatsapp.com and send chat_start with parameter channel = whatsapp. For in-page widgets, use the vendor’s “conversation started” callback, not “widget loaded”. Widget loaded will fire on every session and wreck your CPL. If the vendor has no callback, ask engineering for a one-line dataLayer.push when the visitor sends the first message.
-
On each GA4 Event tag, send engagement_time_msec if you use it elsewhere, keep event names lowercase with underscores, and do not mark them as conversions inside GTM. GTM only sends the hit. Key events are a GA4 Admin decision.
-
Preview. Submit a dummy form with a test email, tap the tel: link on a phone emulator, open chat and send “test”. In GTM Preview, each should show exactly one GA4 Event. In GA4 Admin, open DebugView (you must enable the debug_mode parameter or use the GA Debugger). Confirm parameters. If you see two form_submit hits, stop. You have a duplicate trigger, a thank-you page plus a submit listener, or two containers.
-
Publish the workspace. In GA4, go to Admin, Events. When the new names appear (can take minutes, sometimes a few hours), mark form_submit, click_to_call, and chat_start as key events only if they match your written enquiry definition. Do not mark page_view, scroll, or file_download.
-
Link GA4 to Google Ads if it is not already. Import the three key events as conversion actions. Set the primary conversion for bidding to the event that matches sales-accepted enquiries. For many UK lead-gen accounts that is form_submit plus click_to_call, with chat_start as secondary until sales confirms chat quality. Turn on Enhanced Conversions for the form event using the email field from the same submit.
-
Stamp paid traffic. Rebuild destination URLs with consistent UTMs so GA4 session source/medium is not “google / organic” for brand Search. Use a UTM link builder and lock naming: google / cpc / brand, google / cpc / pmax. Without this, your new events look healthy in the aggregate and useless in channel reports.
-
Reconcile 7 days later. Export GA4 key events by day. Compare to CRM new enquiries and call-tracking unique answered calls. You want directionally the same shape, not a perfect 1:1. If GA4 is 3x the CRM, you are still counting partial forms or chat-widget loads. If CRM is higher, consent or ad-blockers are dropping hits, which is why Enhanced Conversions matter.
Free tools - try these yourself
Keep landing pages honest while you tag. A form event on a slow, unclear page still trains Ads to send more of the same. Run the Core Web Vitals checker on the URLs that take paid traffic. If INP spikes when the chat snippet loads, load chat on interaction, not on every page. Schema on contact pages will not fire events, but broken markup often sits next to broken forms; validate it while you are in the code.
Get a free marketing audit - we review your search, ads, and landing pages and send back what to fix first.
Get a free audit

Where UK teams ship a broken version of the same three events
The most common stall is treating “form success” as a thank-you page that marketing redesigned away six months ago. The trigger still points at /thanks, the SPA now stays on /contact, and GA4 goes quiet while HubSpot fills with deals. Fix the listener, not the report.
Second: click_to_call on every tel: including the registered office in the footer. You then tell the board CPL fell 40% the week you added the event. Sales never saw the extra “leads”. Restrict the trigger to the numbers that ring the sales queue or the call-tracking numbers you actually answer.
Third: chat_start on widget open. A Birmingham retailer we see in audits had 1,800 chat events and 41 conversations. Bidding loved the 1,800. Pipeline did not. Fire on first visitor message only.
Fourth: Consent Mode in “advanced” with tags firing in denied state, then a CMP that never updates the consent signal after Accept. DebugView looks fine on your laptop because you accepted cookies in 2023. Use an incognito window from a UK IP, refuse analytics, and confirm nothing sales-related fires. Then accept and confirm the three events appear once.
Fifth: importing all three events into Google Ads as primary. Last-click and Ads conversion counting will double a user who submits a form after a call. Pick one primary for bidding, keep the others as secondary observers. Duplicate counting across GA4 and Ads is a different article. Here the rule is simpler: one enquiry, one primary conversion action.
Sixth: launching Performance Max the same week you change conversion actions. Learning resets. Wait until DebugView is clean and you have a few days of key-event volume that matches CRM shape. High CPC pressure already pushes some UK accounts back to manual bidding on new campaigns. Dirty conversions make that worse, because the algorithm has nothing trustworthy to learn from.
If you only have bandwidth for one extra check, sit with sales for 20 minutes and watch them process last week’s enquiries. Whatever they actually work is what you mark as a key event. Everything else is a diagnostic event, not a bidding signal. When the plumbing is this fiddly, it is reasonable to have GA4 event configuration owned as an ongoing programme rather than a one-off GTM sprint.
Two patterns we see in audits
In UK B2B software audits, generate_lead is often still a HubSpot form-viewed event marked as a key event. Google Ads CPA can look brilliant for about 11 days while the CRM only shows 14 qualified enquiries. CPA typically drops once form_submit replaces generate_lead and the tag fires on the success callback only - we have seen it fall from around £340 to £180 over 30 days on accounts in that pattern.
In professional services, click-to-call is often the real volume (Edinburgh and similar cities) and has never been sent to GA4. Once it is, PMax stops starving the call-only landing pages, because bidding finally sees the taps that sales already treated as pipeline.

FAQs
Should newsletter signups be key events in GA4?
No, not if your commercial number is sales enquiries. Send a separate event such as newsletter_signup for content reporting. If you mark it as a key event, bidding will happily buy cheap subscribers.
Do I need a separate event for every form on the site?
One event name (form_submit) with a form_id parameter is cleaner for Ads import. Use form_id to exclude careers and newsletter in explorations. Only split event names if sales treats those forms as different conversion actions with different values in GBP.
How long until Google Ads bidding notices the new events?
Import is quick. Learning is not. Give it enough conversion volume to matter before you judge CPA. Changing primary conversions mid-flight on a thin UK account can look like a performance crash when it is just a reset. Google’s own threshold for Smart Bidding readiness is roughly 30 conversions in a 30-day window at the campaign level. On a thin UK account that generates 8-12 enquiries a month, you may need to aggregate form_submit and click_to_call into a single primary action to hit that floor.
What if most enquiries come through a phone number on Google Business Profile, not the website?
Site events will undercount. Pair click_to_call on the site with call reporting from the profile or a call-tracking provider, and do not pretend GA4 is the full picture. Still tag the site. Paid landing pages should not be invisible.
Can I copy a US GTM container into a UK property?
You can copy tags, not consent, phone formats, or chat vendors. Recheck tel: triggers for +44 and 07 numbers, and retest Consent Mode against your UK CMP. Locale details are where copied containers fail.
Putting it to work
Execution sprint
This week
- Pull 30-90 days of performance for how to set up ga4 events for forms calls and chats (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.
This week
-
Write one sentence that defines an enquiry for your UK business, then list every form, tel: link, and chat or WhatsApp entry point on the live site.
-
Confirm a single GTM container, Consent Mode mapping, and GA4 Measurement ID in Preview.
-
Ship form_submit, click_to_call, and chat_start with one-hit-per-action checks in DebugView.
-
Mark only those that match the sentence as key events, then import a single primary conversion into Google Ads.
-
Rebuild paid landing UTMs with the UTM link builder so the new events can be read by channel.
Next 30 days
-
Reconcile GA4 key events to CRM and answered calls twice, a week apart, and kill any event that still outruns reality.
-
Watch form and chat behaviour on the highest-spend landing pages and fix the friction the recordings show before you raise budgets.
-
Move Enhanced Conversions onto the form event and keep chat as secondary until sales signs off on quality.
Start by exporting seven days of GA4 key events next to CRM enquiries and answered calls, then fix the first event whose volume does not match how sales actually works the lead. HeyLead can take the GTM configuration, Consent Mode checks, and the form-call-chat event set off your plate so bidding is not trained on widget loads. Chat with us on WhatsApp
Free marketing audit, or reach Martin directly:
Get a free audit Connect on WhatsApp · [email protected]