Meta’s Conversions API and GA4 see the same lead form from two sides. How to wire them so each lead is counted once, keeps its source, and reports back what it became.
To count a lead form once in Meta and GA4, send the lead from the browser and from your server with the same event ID, so Meta merges the two copies. Keep the GA4 tag on the page, set consent defaults before any tag loads, and send the CRM’s outcomes back to the ad platforms.
Two systems, one form
A lead form on a website is usually watched by at least two systems. The Meta Pixel tells Meta’s ad system that a lead happened. Google Analytics 4 records it for your reports.
Both run in the visitor’s browser, and both miss some of what happens there: blocked scripts, declined consent, a phone that closes the page before the tag fires.
The fix is a second path from your own server, and a rule that stops the two paths counting the same lead twice.
Illustrative
Lead
ID QKXR-VTPA
Browser · Pixel
Blocker
Server · Conversions API
Meta
ID WMZT-HBRC
Counted once: the server copy carries the browser’s ID, so Meta keeps one lead.Counted twice: two IDs, so Meta keeps two leads.
Different IDsSame ID
Meta: the browser and the server
Meta’s Conversions API sends events to Meta from your server, website platform, app or CRM. Meta recommends running it alongside the Pixel, a “redundant setup”, so a lead the browser missed still arrives from the server.
Two copies of one lead then have to become one. Meta treats them as the same event when the Pixel’s eventID matches the server’s event_id and the event names match, and only if the second arrives within 48 hours of the first.
In practice, create one ID when the form is submitted. Send it with the Pixel event, and send the same ID with the server event.
Illustrative
First event
48 hours
Counted once
Counted twice
Inside 48 hoursAfter 48 hours
The server event carries contact details only in hashed form. Meta’s systems are designed to refuse unhashed contact information such as email and phone, while its browser identifiers, the fbp and fbc cookies, go as they are. If you run click-to-WhatsApp ads, Meta’s parameters also include the click ID those ads create (ctwa_clid).
GA4: the tag stays, the server adds
In GA4, mark the form submission as a key event, which Google defines as an action “particularly important to the success of your business”.
GA4 has its own server path, the Measurement Protocol, for “server-to-server and offline interactions”. Google says it is meant “to augment automatic collection”, not replace it. Keep the tag on the page, and use the server path for what the browser can’t see, such as a lead your CRM marks qualified days later.
Illustrative
Browser tag
CRM
GA4
Qualified
“to augment automatic collection”
Consent comes first
Every tag above should wait for the visitor’s choice. Google’s Consent Mode adjusts its tags to that choice. In its basic form the tags don’t load until the visitor answers the consent banner. In its advanced form they load at once and send cookieless pings while consent is denied. The Meta Pixel has its own switch: Meta’s documentation shows it revoked before the Pixel starts and granted once the visitor agrees.
Illustrative
Google tag
Meta Pixel
Google
Meta
Basic, consent denied: the tags wait behind the banner and send nothing.Advanced, consent denied: Google’s tags send cookieless pings; the Pixel waits.Accepted: both tags load and send.
A form submission is the start of the story. Ad platforms optimise for whatever you report, so report what the lead became, as we argued in Cheap leads are expensive.
Meta’s CRM integration sends lead stages from your CRM back through the Conversions API, so campaigns can optimise towards the stage you care about. Its conditions are specific. It works with Meta’s Instant Forms. Meta lists at least 200 leads a month as a fit, the chosen stage should happen within 28 days of the lead, and the data should be uploaded at least once a day.
Google Ads has its own route, enhanced conversions for leads. It uses details the visitor typed into your form, such as an email address, hashed, to credit the outcomes you import to the ads that produced them.
Illustrative
New
Qualified
Won
Meta
Google Ads
200 leads a month · within 28 days · daily upload
hashed form details
A setup for a UAE lead form
One event, one ID. Name the event once (Lead in Meta, generate_lead in GA4) and create a fresh ID per submission, shared by the browser and the server.
The source travels with the lead. Save campaign tags and click IDs with each form into the CRM, as in Measure before you scale.
Consent before tags. Set the defaults before any tag loads, and choose between basic and advanced Consent Mode.
The server sends the same lead. The same event name, the same ID, and only the contact details the visitor agreed to share, hashed.
Outcomes go back every day. Qualified and won leads from the CRM to Meta, and to Google Ads through enhanced conversions for leads.
WhatsApp gets its own event. Many UAE enquiries start with a tap on a WhatsApp button; record it as a contact, separate from the form.