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.