Section 2 — The Measurement Stack · Last verified: MAY 2026

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 nameorder_created, lead_created, etc. For custom events, custom_event_name replaces 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:

  1. Generate the event_id yourself. Do not let the SDK auto-generate. The SDK will silently produce a different ID than your server, and dedup will fail.
  2. Use the same value as the pixel event_id and the server-side id.
  3. Send both events under the same Pixel ID.
  4. For custom events, also use the same custom_event_name on 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:

  1. Pull a known order ID.
  2. Confirm the pixel sent event_id: "order_...".
  3. Confirm CAPI sent id: "order_..." — same value.
  4. Confirm both used the same Pixel ID.
  5. 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.