Skip to content

Tracking

Why the lead is sent to Meta twice

The short answer

The browser pixel is the merchant’s phone telling Meta a lead happened, and iOS, ad blockers, Safari and a slow page stop a chunk of those from ever arriving. The Conversions API is the same event sent from your server, which cannot be blocked and carries the hashed contact details Meta needs to match it to a click. Both copies carry the same event ID, so Events Manager sees two and keeps one. If the Deduplicated column is not filling up, every lead is counting twice and the cost per lead is fiction.

On this page
  1. Two copies of one event
  2. Deduplication, and why it is the thing to check
  3. What this means for the build
  4. Questions brokers ask

Every tracking guide says to run the pixel and the Conversions API together, and almost none of them says why, so it gets treated as belt and braces. It is not. The two are sending the same event over two routes with different failure modes, and the reason the setup is worth doing properly is what happens when only one of them arrives.

Why the lead is sent twice, at 10:32. Chapters and transcript
Whiteboard headed “Why send the LEAD twice?”. A box marked “Merchant’s phone — browser pixel · LEAD · id ABC123” with a dashed arrow to “Events Manager — sees ABC123 twice → keeps one”, labelled in red “blocked sometimes — iOS, ad blockers, slow page”. Below it a green box marked “Your server — Conversions API · LEAD · id ABC123 · hashed data” with a solid green arrow to the same Events Manager, labelled “always arrives”. Three notes: the browser copy is the merchant’s phone telling Meta, and phones get blocked — iOS, ad blockers, Safari, a slow page — so a chunk of the time it never arrives; the server copy is your system telling Meta, it can’t be blocked, and it carries the hashed data — email, phone, name — that lets Meta actually match the lead to the click; both carry the same event_id, Meta sees two and keeps one, and on GHL or a WordPress plugin that’s handled for you.
The board. Two routes, one event, one ID — and only the lower route is guaranteed to get there.

Two copies of one event

Browser pixelConversions API
Sent byThe merchant’s phoneYour server
Stopped byiOS settings, ad blockers, Safari, a page that never finishes loadingNothing
CarriesThe event and its IDThe event, its ID, and the hashed contact details
ArrivesMost of the timeEvery time

The browser copy has been the unreliable one since the iOS privacy changes, and on funding traffic that is eighty to ninety percent phones it is unreliable in exactly the population you care about. Running it alone means an unknown share of your qualified leads are invisible to the optimisation: Meta is learning from a sample that was filtered by which merchants happen to run an ad blocker, which has nothing to do with which merchants fund.

Deduplication, and why it is the thing to check

Both copies are sent with the same event ID. Events Manager matches them, sees one event rather than two, and keeps the better-attributed copy. On GoHighLevel and the main WordPress plugins that ID is put on both copies for you; a custom build passes it itself, which is what the event ID in the fbq call is for.

Step 8 from the board: Deduplication — mostly automatic. GHL and the WordPress plugins put the same event_id on both copies for you. Custom builds pass it yourself. Either way, check it once: Events Manager → your event → the “Deduplicated” column should be filling up. If it isn’t: every lead is counting twice. CPL looks amazing and the optimization is running on fiction.
One column, checked once. A deduplication that is not happening is the failure that flatters every number on the screen.

This is the failure worth being afraid of, because it does not look like a failure. Two copies counted separately means the account reports twice the leads it produced, so the cost per lead halves overnight and the campaign looks like the best thing you have ever run. Meanwhile the optimisation is running on duplicates and the phone is not ringing any more than it was. A $24 cost per lead that is really $48 is worse than knowing it is $48.

What this means for the build

  • Fire both copies from the same moment: the load of the qualified page, after the one-time passcode has come back. Two copies of an event that fires in the wrong place are still two wrong events.
  • Put the hashed contact details on the server copy. That is the half of the job the browser copy cannot do, and without it Meta cannot attribute the event to an ad click.
  • Never send the disqualified path down either route. The rule about what gets sent back applies to the server copy exactly as it does to the pixel, and a server event is easier to fire by accident.
  • Run the test in Events Manager with the test event code so it does not touch live data, and confirm one deduplicated Lead rather than two.

None of this is difficult, and on a hosted page builder most of it is a switch. It is on the list because it is invisible: a pixel-only setup and a correctly deduplicated one look identical from the outside, and the difference shows up months later as a campaign that never quite learned who to find.

Questions brokers ask

Do I need the Conversions API if I already have the Meta pixel?

Yes. The browser pixel is blocked by iOS settings, ad blockers and slow pages, so a share of your leads never reaches Meta. The Conversions API sends the same event from your server, where nothing can block it.

Will sending the lead twice double-count it?

Not if both copies carry the same event ID. Events Manager matches them and keeps one. If they do not carry the same ID, every lead counts twice, your cost per lead looks half what it is, and the optimisation is running on duplicates.

How do I check that deduplication is working?

Open Events Manager, go to your event, and look at the Deduplicated column. It should be filling up. If it is empty, the two copies are not being matched and the setup needs fixing before anything else.

What is an event ID in the Meta pixel?

A string sent with both copies of the same conversion so Meta can recognise them as one event. GoHighLevel and the main WordPress plugins set it for you; a custom build passes it in the fbq call and in the server payload.

Which copy does Meta keep when both arrive?

One event, with the better attribution of the two. In practice that usually means the server copy, because it carries the hashed email and phone that let Meta match the lead back to the ad click.

Reference

The video this comes from

The two-route diagram, the ten-step build and the transcript in full.

AM

Alex Makowski

Founder, Infinite Bookings

Runs the lead generation operation behind Infinite Bookings — paid traffic, the funding application, and the delivery pipeline that puts records into brokers’ CRMs.

Reachable directly at alex@infinitebookings.com or 732-609-7182.

Get started

We will tell you straight up if we cannot help you. No commission deals, no free trials, no chasing you for three weeks.

Book a 15 min callRather not book? Text my number instead
Exclusive MCA leads
Book a 15 min call