Meta Pixel and CAPI Deduplication: Why Your Conversions Are Doubled and How to Fix It
If you're running both the pixel and CAPI — and almost everyone is these days — there's a good chance you're counting purchases twice. The browser sends the event through the pixel, the server sends the same event through CAPI, and without deduplication Meta sees two purchases instead of one.
The consequence: you think the campaign performs better than it does. Inflated conversions, overstated ROAS on paper, budget decisions built on a lie. And the sneakiest part is that the doubling is uneven, so you can't even just "divide by two."
How Meta recognizes a duplicate
Two fields have to match across both sources: event_id and event_name. If the browser and server events share the same event_id and the same name, and they arrive within a 48-hour window, Meta collapses them into one. Miss on either field and the events won't collapse.
Sounds simple. In practice it falls apart on the details.
Where it all breaks
First: event_id gets generated independently in two places. The browser made its own ID, the server made its own, they're different, and deduplication never fires. There should be one ID, generated in one place and passed into both channels.
Second: a mismatched event_name. Purchase in the browser, purchase on the server. Case matters. No match, no collapse.
Third, the most mundane one: the server event has no event_id at all. Someone simply forgot to pass it. At that point there's nothing to deduplicate on, by design.
How to do it right
You generate event_id once — usually on the front end at the moment of the event — and put it in the dataLayer. From there it goes to both the browser pixel and the server container via sGTM. One source of truth for the ID. You fix event_name to a single spelling and make sure both branches use exactly that.
The principle: one ID, one name, two channels. That's all.
Checking in Events Manager
Meta shows the percentage of deduplicated events. Go into Events Manager, open the event, and look for the deduplication column. A low percentage there, or a warning that events aren't collapsing, means you have a leak in one of the three places above.
The take: half of the "great ROAS" in the reports of hybrid setups is undeduplicated conversions. Before you celebrate a campaign's results, check the deduplication rate. Sometimes after the fix "performance" drops by a third — but that was the honest performance, not the one you believed in.
SKAdNetwork and SKAN 4.0: Why Your iOS Attribution Lies, and What to Do About It
SKAN 4.0 without the fluff: conversion values, three postback windows, the lock window. How to set up iOS attribution for a fintech app.
Read →Enhanced Conversions for Leads: How to Stop Paying for Leads That Never Make You Money
Set up Enhanced Conversions for Leads in Google Ads via GTM and server-side upload. Send CRM deal status back so Google optimizes for money, not forms.
Read →Consent Mode v2: Do You Need It in the CIS, or Is It Another Google Scare Story?
Consent Mode v2 in GTM without the panic: Basic vs Advanced, when a CIS project really needs it, and how many conversions you lose without it.
Read →