Status: Public bug report. Last verified: 2026-05-28. Affected: Every new OpenAI Ads advertiser who installs the pixel using the snippet provided by the Ads Manager onboarding UI.
The install snippet that OpenAI Ads Manager hands to new advertisers includes a stray oaiq("measure", "registration_completed", ...) call that fires on every page load, not just on actual registration events. Because the snippet is installed in the <head> of every page on the site, every visitor's pageview is recorded as a completed registration conversion.
The result: conversion data becomes unusable. Total registration_completed events equal total pageviews. Real conversions are drowned in noise. ROAS and CPA metrics are polluted, and if you use conversion-based delivery, the bidder optimizes against a meaningless signal.
A cleaner version of the snippet exists on the developer docs (developers.openai.com/ads/measurement-pixel), but most advertisers don't read those — they paste the snippet shown to them in the Ads Manager Conversions tab when they create a new Pixel ID. That snippet is broken.
- Broken: the install instructions displayed by OpenAI Ads Manager when a new Pixel ID is created (Conversions tab → Install your pixel).
- Clean: the example snippet on the developer documentation at https://developers.openai.com/ads/measurement-pixel (init only, no extraneous
measurecall).
This means the bug only hits the merchants who follow the onboarding flow as designed — primarily SMB owners without engineering support, who trust the Ads Manager UI to give them working code.
- Sign up for an OpenAI Ads account at https://ads.openai.com (US business; the self-serve beta is open as of 2026-05-05).
- Navigate to Conversions → Create pixel (or open any existing pixel).
- Click the "Install your pixel" instructions. Copy the snippet exactly as shown.
- Paste the snippet into the
<head>of any HTML page on your site. - Open the page in a browser with developer tools open (network tab or console).
- With
debug: trueenabled in the snippet (it ships that way), the console will log aregistration_completedevent firing on every page load. - Reload the page or navigate to any other page on the site. The event fires again. Every time.
The install snippet should only initialize the pixel. It should never fire a conversion event on its own. Conversion events (measure(...) calls) are meant to be added contextually — for example, registration_completed belongs on the registration confirmation page, order_created belongs on the thank-you page after checkout, and so on.
A correct install snippet contains only the loader and the oaiq("init", { pixelId: ... }) call. Nothing else.
The snippet provided by Ads Manager looks like this (Pixel ID redacted):
<script>
!function(w, d, s, u) {
if (w.oaiq) return;
var q = function() {
q.q.push(arguments);
};
q.q = [];
w.oaiq = q;
var j = d.createElement(s);
j.async = 1;
j.src = u;
var f = d.getElementsByTagName(s)[0];
f.parentNode.insertBefore(j, f);
}(window, document, "script", "https://bzrcdn.openai.com/sdk/oaiq.min.js");
oaiq("init", {
pixelId: "<YOUR-PIXEL-ID>",
debug: true
});
</script>
<script>
oaiq("measure", "registration_completed", {
type: "customer_action",
amount: 0,
currency: "USD"
});
</script>The first <script> block is correct — it initializes the pixel. The problem is the second <script> block: it calls oaiq("measure", "registration_completed", ...) immediately, with no guard, no event handler, no page-specific check. Since the snippet is meant to be installed in the <head> of every page on the site, this call executes on every page load.
Every visitor who opens any page on your site fires a registration_completed event whether or not they actually registered.
The Ads Manager UI appears to render an example measure call inline with the install code, presumably as a template to show advertisers what an event looks like. But it embeds the example as live code in the install block, instead of presenting it as a separate, page-specific snippet to add to the registration confirmation page.
A secondary issue: the snippet ships with debug: true. That flag is appropriate for development and integration testing but should not be left enabled in production — it produces verbose console output on every page load.
Replace the broken install code with this. It contains only the loader and the init call. Add measure calls separately, on the specific pages where the corresponding event actually happens.
<script>
!function(w, d, s, u) {
if (w.oaiq) return;
var q = function() {
q.q.push(arguments);
};
q.q = [];
w.oaiq = q;
var j = d.createElement(s);
j.async = 1;
j.src = u;
var f = d.getElementsByTagName(s)[0];
f.parentNode.insertBefore(j, f);
}(window, document, "script", "https://bzrcdn.openai.com/sdk/oaiq.min.js");
oaiq("init", {
pixelId: "<YOUR-PIXEL-ID>"
});
</script>When you actually want to record a conversion, add a separate <script> block to the specific page where that event happens. For example, on the registration confirmation page only:
<script>
oaiq("measure", "registration_completed", {
type: "customer_action"
});
</script>For e-commerce thank-you pages, use order_created with the real order value. For lead forms, fire lead_created after the submission completes. Never fire a measure call from the global install snippet.
<script>
!function(w, d, s, u) {
if (w.oaiq) return;
var q = function() {
q.q.push(arguments);
};
q.q = [];
w.oaiq = q;
var j = d.createElement(s);
j.async = 1;
j.src = u;
var f = d.getElementsByTagName(s)[0];
f.parentNode.insertBefore(j, f);
}(window, document, "script", "https://bzrcdn.openai.com/sdk/oaiq.min.js");
oaiq("init", {
- pixelId: "<YOUR-PIXEL-ID>",
- debug: true
+ pixelId: "<YOUR-PIXEL-ID>"
});
</script>
-<script>
- oaiq("measure", "registration_completed", {
- type: "customer_action",
- amount: 0,
- currency: "USD"
- });
-</script>If you already installed the pixel using OpenAI's snippet, here's how to verify whether you're hitting this bug:
- Open your site in a browser with developer tools open.
- Go to the Network tab. Filter for requests to
bzr.openai.com. - Reload your homepage. You should see a request to
bzr.openai.com/v1/events. - Inspect the request payload. If it contains
"type": "registration_completed", the bug is firing on your site right now. - Cross-check in your Ads Manager Conversions report: if
registration_completedevent counts match your total pageview counts, you have the broken snippet installed.
The fix is to remove the second <script> block (and the debug: true flag) and redeploy the page.
This bug doesn't just clutter your reports. It actively degrades campaign performance:
- If you use conversion-based bidding, OpenAI's auction algorithms will treat every visitor as a conversion. The bidder learns to deliver impressions to anyone who clicks, not to people who actually register. ROAS collapses.
- Lookalike or interest expansion features (if/when OpenAI ships them) will model audiences against polluted seed data, broadening into the wrong segments.
- Funnel analysis is impossible. You can't distinguish "this campaign drove 500 registrations" from "this campaign drove 500 pageviews."
- A/B tests of ads, creative, or landing pages are blind. Every variant looks like it converts perfectly.
For a new advertiser running their first OpenAI Ads campaign, this bug silently destroys the data they need to decide whether the platform works for them — which means it may push otherwise-viable advertisers away from the platform entirely.
This bug report was published by Reach on 2026-05-28.
Reach is a ChatGPT Ads agency. We set up OpenAI Ads pixels for clients every week, which is how we caught this — the stray registration_completed event was polluting client conversion data within hours of install. We're now building a WordPress plugin and Shopify app that auto-installs the corrected snippet plus health monitoring for OpenAI Ads conversion tracking, so the next wave of advertisers doesn't have to wait for OpenAI to ship a fix.
Get notified when the plugin launches: joinreach.ai/pixel
Need this fixed for your store now? Reach's agency team will patch your pixel install and set up your conversion tracking properly: joinreach.ai
We've also reported this issue to OpenAI directly. Until they patch the install instructions in Ads Manager, every new advertiser who follows the documented setup flow will hit this bug.
This bug was independently surfaced by multiple advertisers in the first weeks of the OpenAI Ads self-serve rollout. Community confirmation has appeared in videos and forum discussion in May 2026, including:
Found a bug not described here, or a different issue with the official snippet? Open an issue on this repo. Last verified against the Ads Manager install snippet on 2026-05-28.