Why it happens
The server sends no event_id
The server sends no event_id
The most common one. The pixel passes an ID, the server integration does not, and nothing pairs.
Each side makes its own ID
Both send an event_id, but the browser and the server each generate a random one. They never match.
The event names differ
Purchase on one side and purchase or a custom name on the other. Names must match exactly.
The server event arrives too late
Meta pairs a server event with its browser twin only when it arrives within 48 hours of it. Batched uploads that run later miss the window.
Two server sources
A store integration and a hand-built setup both send Purchase. That is a duplicate dedup cannot catch. See duplicate events.
How to fix it, step by step
Read the event details
In Events Manager, open Data sources, your dataset, Overview, and select the event. Event deduplication shows the share of browser and server events that carry the key.
Generate one ID per action
Make the ID once, on the page, for each action. An order ID works for Purchase. Pass it to the pixel as eventID and send the same value to your server.
Send the same ID and name from the server
The server event carries event_id with the identical value and an event_name spelled exactly like the browser one.
Send promptly
Post server events in real time, not in a nightly batch.
Confirm in Test events
Fire the event from the browser and the server with your test code. Test events marks the pair as deduplicated.
Steps checked against Meta Business Help Center articles: About deduplication for the Meta Pixel and Conversions API; Test your events in Events Manager. Meta for Developers: Handling duplicate pixel and Conversions API events.
Sprites diagnoses this
Sprites diagnoses it
Sprites reads your pixel and CAPI health and shows where it breaks: for every event, whether the browser and server sides pair up or double count.
What Sprites does
- Reads, per event, the share of browser events and of server events that carry the event ID.
- Calls deduplication healthy when both sides carry it on 90 percent of events or more, and broken when one side carries it on under half.
- Says plainly when Meta returned no deduplication data for an event, rather than guessing.
- Shows browser and server counts side by side before deduplication, so the size of the double count is visible.
What it doesn't do
- Add the event ID to your pixel or server code
- Send events to the Conversions API
Questions
How does Conversions API deduplication work?
Meta keeps one event when a browser event and a server event share the same event name and event_id, and arrive within 48 hours of each other.
What should the event_id be?
Any value unique to that action and identical on both sides. An order ID is the easiest for purchases.
How do I know deduplication works?
Open the event in Events Manager. Both browser and server should carry the key on nearly every event.
Do I need deduplication if I only use the Conversions API?
No. With one source there is nothing to pair. It matters the moment both send the same event.
- Meta pixel duplicate events
- Meta Conversions API
- Meta pixel vs Conversions API
- Meta pixel not firing
- Meta pixel not tracking purchases
- Event Match Quality
- CAPI not receiving events
- Pixel events not showing in Events Manager
- Meta pixel not active
- Meta pixel not showing in Ads Manager
- Meta test events not working
See where it breaks
Connect your accounts. Sprites reads them side by side and shows you exactly where the numbers split.