Duplicate purchases in the Pixel and Conversions API: how to deduplicate
Published by the UTM Builder team at Limner.
Meta only merges the Pixel event with the Conversions API event when both arrive with the same name and the same ID. In the browser you send event and eventID; on the server, event_name and event_id. If one side sends a different ID, or none at all, the purchase is counted twice. TikTok works the same way, with event and event_id in the Pixel and in the Events API.
How Meta deduplicates
Meta’s documentation calls the ID method the recommended one. The rules:
- The Pixel’s
eventIDmust match the API’sevent_id, and the event name must be the same on both sides. - Deduplication applies to events that arrive within 48 hours of the first one with that ID, on the same pixel.
- When the two events don’t differ in any meaningful way in their content, Meta generally keeps the one that arrived first.
- The
eventIDmust be unique. The order number works well, because the browser and the server both know the same value.
In the Pixel, the ID goes in the fourth argument of fbq, separate from the purchase data:
fbq('track', 'Purchase', {value: 197.00, currency: 'BRL'}, {eventID: 'pedido-48213'});
In the Conversions API, the same value goes in the server event:
{"event_name": "Purchase", "event_id": "pedido-48213", ...}
The classic mistake is generating one random ID in the browser and another on the server. Both look right and they never match.
The fbp and external_id method
There’s a second method, which matches event_name along with fbp and/or external_id. The documentation lists its limitations: it generally only works when the event is sent from the browser first and then from the server; the server event isn’t discarded if there was no browser event in the previous 48 hours; and it doesn’t deduplicate when there’s only one source. Two consecutive browser events with the same information are both kept, and the same goes for two server events. Use it as a backup to the ID.
Where duplication comes from in Brazil
- Native integration plus Gateway. The help center of Nuvemshop, a Brazilian ecommerce platform, says Conversions API Gateway isn’t compatible with its native integration and that, with both active, the data can be contaminated. It tells you to check in Events Manager whether Gateway shows up as an active source and, if it does, to disconnect it.
- Events and conversions created by hand. The same help center warns that custom conversions and manual events can duplicate the conversions Nuvemshop already sends, and asks you to allow at least 72 hours after deleting them for Meta to sync.
- Checkout platform plus GTM. Kiwify, a Brazilian platform for selling digital products, sets up the Pixel and Conversions API per product and says it passes a unique ID with each event. If you also fire Purchase through GTM on your thank-you page, to the same pixel, that event arrives without Kiwify’s ID and is counted again.
- A new integration on top of the old one. In April 2026 Meta launched a one-click Conversions API setup for the web. The announcement says nothing changes for businesses already using a partner integration or their own setup, and it doesn’t mention deduplication. Before turning on any new path, list everything that already sends server events.
The rule that solves almost every case: one browser source and one server source per pixel, with the same ID.
How to check in Events Manager
- In the pixel’s Overview, open the details for the Purchase event and go to the Event Deduplication tab.
- Read the rate of deduplicated events by source. A low rate triggers a warning.
- Read the deduplication key usage. Little overlap points to an ID that isn’t unique, or an ID sent by only one side.
- Connection Method shows the channel each event came through. If you see a channel you didn’t expect, there’s a forgotten integration.
- Don’t use the Overview count as your number of sales. The documentation says it includes events received before deduplication.
- To test, use Test Events (Events Manager, Data sources, your pixel). The server sends the test code in
test_event_code, which must be left out of production requests.
Official sources
- Meta: Handling Duplicate Pixel and Conversions API Events
- Meta: Verifying Your Setup (Conversions API)
- Meta: Using the Conversions API (Test Events)
- TikTok: About Event Deduplication
- Nuvemshop: How to turn on the Facebook Conversions API (in Portuguese)
- Nuvemshop: How to turn off Facebook Pixel custom events (in Portuguese)
- Kiwify: How to set up the Facebook Conversions API (in Portuguese)
- Meta: Removing Technical Barriers to Help Businesses of All Sizes Get More From Their Ads (April 15, 2026)