Book
Tracking

Why the lead is sent to Meta twice

One copy gets blocked. The other always arrives. Both carry the same ID.

Alex Makowski · Updated 17 September 2026 · 4 min read

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.

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.

Keep reading.

Book 15 minutes with Alex.

We will tell you straight up if we cannot help you.

Read this before you book.

  • ✗We do not offer free trials.
  • ✗We do not give discounts.
  • ✗We do not do commission deals.
  • ✓We require an upfront investment to work with us.

If you are not able to invest into getting more leads for your brokerage, do not book a call.

— Alex