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

Browser-Server Deduplication

Sacha Lefebvre, founder of Paid Ai Search
Sacha Lefebvre Founder, Paid Ai Search · LinkedIn

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_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.