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 does | GA4 event | Meta event |
|---|---|---|
| Taps a phone number | click_call | Contact |
| Taps an email address | click_email | Contact |
| Taps a WhatsApp link | click_whatsapp | Contact |
| Clicks the "Send an enquiry" button | cta_enquiry | (none; this is a start, not a finish) |
| Submits the contact form successfully | generate_lead | Lead |
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.
Consent
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.
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.

