Fix guide · Any website · medium · about 45 min
Repeated OpenAI event IDs drop ChatGPT Ads conversions
For the finding “OpenAI event IDs repeat across visits”.
What this means
Your site sent the same event ID with the OpenAI Pixel on two separate visits. An event ID should name one action by one visitor, such as one order or one lead.
OpenAI matches duplicates on the Pixel ID, the event name and the event ID, and it keeps the first event it receives for that combination and ignores later ones. So when every visitor’s order_created carries the same ID, OpenAI can treat all of them as one conversion.
Why it costs you money:
- Real conversions disappear from ChatGPT Ads reporting, so campaigns look worse than they are.
- Conversion-optimized campaigns learn from far fewer conversions than really happened.
- Any server copies of these events (Conversions API) are affected the same way, because they share the ID.
How to confirm it yourself
- Open your page in a private (incognito) window, open developer tools (F12), go to Network and filter by
bzr.openai.com. Accept cookies and trigger the event (for example, submit a test lead). - Click the request and find the event in the payload’s
eventslist. Note itsid. - Close the window, open a new private window and repeat. If the second visit sends the same
idfor the same event type, the ID repeats across visits. - Search your code and tag manager for the call that sends this event, for example
oaiq("measure", "lead_created", and look at where itsevent_idcomes from.
How to fix
Every action needs its own ID. The only time two events should share an ID is when they describe the same action from two sides: the browser copy and the server copy of one purchase.
-
Find where the ID comes from. Typical sources of repeated IDs:
- a fixed value typed into the code or a tag manager field, for example
event_id: "purchase"or a campaign name; - an ID generated once when the page was built or cached, not when the visitor acted. A page cache, CDN or static site generator then serves the same “random” ID to everyone;
- a value that is the same for many visitors, such as a product ID, a form ID or the page URL;
- a tag manager variable that keeps its value for the whole session or is stored in a cookie.
- a fixed value typed into the code or a tag manager field, for example
-
Generate the ID at the moment of the action, in the browser or on your server. Good sources:
- purchases: the order number or transaction ID (
order_12345); - leads and sign-ups: the form submission ID your backend creates, or a random value created when the form is submitted;
- page views and clicks: a random value created when the event fires, for example
crypto.randomUUID()in the browser.
const eventId = crypto.randomUUID(); oaiq("measure", "lead_created", { type: "customer_action" }, { event_id: eventId }); // Send eventId with the form data, so your server can reuse it in its Conversions API event. - purchases: the order number or transaction ID (
-
Keep browser and server in step. If your server sends the same conversion through the Conversions API, it must use the same per-action ID as
id, not a value of its own and not a shared constant. -
Retries are the one exception. OpenAI asks you to reuse the same ID when your server retries sending the same event. That is the same action, so the same ID is correct.
-
If the ID comes from a tag manager: use a variable that creates a new value per event, such as Stape’s Unique Event ID variable, not one stored for the session.
-
Publish your changes and purge page and CDN caches, so no cached page keeps the old ID.
Common causes
- The event ID field in a tag manager template holds a fixed text instead of a variable.
- The ID is generated by the server when the page is rendered, and the page is then cached.
- The site uses a product, form or page identifier as the event ID.
- A tag manager variable keeps its value for the whole session, or reads it from a cookie that lives longer than one action.
How to verify the fix
- Repeat the test with two private windows: the same event now carries a different
idon each visit. - For one test conversion, the browser
idand the serveridare identical. - Re-run the check on IsPixelWorking. The issue should be gone.
Sources
- OpenAI Developers, Measurement Pixel (
event_id; duplicate matching on Pixel ID, event name andevent_id; OpenAI uses the first event and ignores later duplicates): https://developers.openai.com/ads/measurement-pixel - OpenAI Developers, Conversions API (event
id, reuse it when retrying or sending the same conversion through another integration): https://developers.openai.com/ads/conversions-api - OpenAI Developers, Conversion Tracking (use the actual order ID or another unique event ID): https://developers.openai.com/ads/conversion-tracking
- MDN Web Docs, Crypto: randomUUID() method: https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID
- Stape, Unique Event ID variable: https://stape.io/helpdesk/documentation/unique-event-id
More OpenAI guides
- OpenAI Pixel fires before cookie consent: how to fix it
- OpenAI Pixel not firing after cookie consent: how to fix it
- Duplicate OpenAI Pixel events: how to find and remove them
- OpenAI Pixel event_id missing: fix ChatGPT Ads deduplication
- ChatGPT Ads click ID (oppref) lost after an ad click
- OpenAI Pixel tracks a button on desktop but not on mobile
- Two OpenAI Pixel IDs on one site: when it's fine, how to fix
- OpenAI Conversions API deduplication: match the pixel event_id
- OpenAI Ads Pixel setup: install the ChatGPT Measurement Pixel
- How to set up the OpenAI Conversions API for ChatGPT Ads