Open to new projects

Send a quick note.

Hiring, or an account that needs better results. A couple of lines is enough; I reply within a working day.

I only use your details to reply. Privacy notice

Tracking · 8 October 2026 · 6 min read

Google Tag Manager set-up for a lead generation website: the events I use

A plain guide to the Tag Manager container I build before a campaign sends people to a website: the events, the triggers, the form listener and the consent rule, taken from a real architecture studio site.

Badar Munir
Badar MunirPerformance Marketer, Manchester
Google Tag Manager set-up for a lead generation website: the events I use

If a campaign is going to send people to a website, I want every way they can get in touch recorded as its own event before the first click is paid for. Otherwise Meta and Google optimise on page views, and the report can't say which ads brought enquiries. This is the container I build, using the set-up for Arsyn, an architecture and interiors studio on WordPress, as the worked example.

One container, two platforms

Google Tag Manager goes on every page once. GA4 and the Meta Pixel both load through it, so adding or changing an event later is a change in Tag Manager, not in the website's code. The GA4 measurement ID and the Meta Pixel ID live in constant variables, so if an account changes it's a one-field edit.

The events

Every route someone can use to get in touch gets its own event. On the Arsyn site there are five:

What the visitor doesGA4 eventMeta event
Taps a phone numberclick_callContact
Taps an email addressclick_emailContact
Taps a WhatsApp linkclick_whatsappContact
Clicks the "Send an enquiry" buttoncta_enquiry(none; this is a start, not a finish)
Submits the contact form successfullygenerate_leadLead

The button and the form are deliberately separate events. One tells you how many people started an enquiry, the other how many finished. The gap between them is a form problem, and you can't see it if they're one event.

The triggers

Calls, emails and WhatsApp are link clicks. A "Just Links" trigger fires when the clicked URL starts with tel:, mailto: or contains the WhatsApp domain. The enquiry button has its own click trigger on its CSS class.

The form listener, which is where most set-ups go wrong

The usual mistake is to count a form as submitted when someone clicks the submit button. That counts people who hit a validation error and never sent anything.

Arsyn's site uses Contact Form 7, which doesn't talk to Tag Manager on its own. A small custom HTML tag listens for the plugin's "mail sent" event, which only fires when the submission has actually gone through, and pushes a cf7_submit event to the data layer along with the form's ID. A custom event trigger on cf7_submit then fires both the GA4 generate_lead tag and the Meta Lead tag, so the two platforms count exactly the same thing.

Other form plugins have their own success events. The principle is the same: fire the lead event on confirmed success, never on the button click.

Test it before trusting it

Preview mode in Tag Manager, then a real call tap, a real email tap and a real form submission, checked in GA4's DebugView and in Meta's Events Manager test events. Tag Manager also rates the container's set-up; Arsyn's is rated "Good" and the larger containers I've built for a SaaS product and a services site are rated "Excellent". It's worth getting that screen clean before a campaign goes live.

In the UK and Europe the ad pixels shouldn't load until the visitor has agreed. On a bigger build for a services website, the consent banner pushes its own event, the Meta pixel only loads once ad consent is granted, and the lead tag itself checks for consent before it fires. GA4 can run in a consent-aware mode in the meantime. The Digital Genix tracking case study shows the full version with 26 tags across five platforms.

What this gives the campaign

Once the container is live, a Meta campaign sending people to the website can optimise on the Lead and Contact events rather than on landing page views, and GA4 can show which campaign each enquiry came from. For Arsyn the lead campaigns currently run on Meta's own forms, so this is in place for the day a campaign points at the website, and it will learn from real enquiries from the first pound. The Arsyn tracking case study has the container in detail.

If you're not sure whether your own site records enquiries properly, tap the phone number and submit the form yourself, then look for them in GA4. If they're not there, that's the first thing I'd fix, and it's a short project on its own.

Badar Munir

I run paid ads on Meta, Google and TikTok across the UK, the Gulf and Pakistan, and build the tracking and pages around them. Get in touch or find me on LinkedIn.