Browser-Server Deduplication
Chapter 12 - Browser-Server Deduplication
When the same conversion fires from both the pixel and the Conversions API, OpenAI deduplicates so it only counts once.
What OpenAI matches on
- Pixel ID, both transports send under the same Pixel ID.
- Event name,
order_created,lead_created, etc. For custom events,custom_event_namereplaces the standard event name in the match. event_id(pixel) /id(server), the unique identifier the advertiser supplies.
All three must match for OpenAI to count it as one event.
The four-step rule
To deduplicate correctly:
- Generate the
event_idyourself. Do not let the SDK auto-generate. The SDK will silently produce a different ID than your server, and dedup will fail. - Use the same value as the pixel
event_idand the server-sideid. - Send both events under the same Pixel ID.
- For custom events, also use the same
custom_event_nameon both sides.
Get any of those four wrong and OpenAI counts the event twice. Inflated conversion numbers, wrong CPA, broken optimisation, all downstream of a missing event_id.
When dedup is unnecessary
If you only run the pixel or only run CAPI, dedup doesn’t matter, there’s nothing to deduplicate against. The SDK can auto-generate event_id for pixel-only setups and OpenAI will count each event once.
Dedup matters the moment you run both transports for the same event type.
Why dual-shipping is worth the extra plumbing
Pixel events get blocked. Ad blockers, JavaScript errors, network drops, browsers that disable third-party tracking, every one of those eats a percentage of pixel-only conversion data. The percentage varies by audience but it is never zero.
Server-side CAPI events do not have those failure modes. They go from your backend to OpenAI’s backend. They cannot be blocked client-side.
Run both. Dedup correctly. Get full coverage.
Detecting failed dedup
If conversion counts in Insights look implausibly high:
- Pull a known order ID.
- Confirm the pixel sent
event_id: "order_...". - Confirm CAPI sent
id: "order_...", same value. - Confirm both used the same Pixel ID.
- If all three match and the count is still doubled, contact OpenAI support, but in practice, problem 1 (auto-generated
event_id) is the cause 95% of the time.
What gets compared, what gets discarded
OpenAI’s documentation does not specify which transport “wins” when both arrive, what’s specified is that the combination is counted once. The practical implication for the advertiser is: don’t worry about which event is canonical. Both should carry the same business-meaningful data (amount, currency, contents). If they do, dedup produces a correct single record regardless of which one OpenAI keeps.