Most of the questions I get about ChatGPT Ads are not about creative or bids. They are about measurement: "the campaign has clicks, my shop has orders, but Ads Manager shows zero conversions." That is almost always a tracking problem, and it is the same kind of problem I fix on Google Ads and Meta every week.
This guide walks through ChatGPT Ads conversion tracking from start to finish, from creating the pixel to fixing zero conversions. The platform is new, so for exact code I point you to OpenAI's developer documentation.
How does ChatGPT Ads conversion tracking work?
ChatGPT Ads conversion tracking works by sending conversion events from your website or server to OpenAI, which then matches them to ad clicks (and eligible ad views) and reports them in Ads Manager. OpenAI offers three ways to send events:
| Method | Runs where | Best for |
|---|---|---|
| Measurement Pixel | Visitor's browser (JavaScript) | Most websites; captures the click reference automatically |
| Image tag | Browser, no JavaScript | Simple page-load conversions where scripts are not allowed |
| Conversions API (CAPI) | Your server or a server-side tag | Reliable purchase and lead events, offline or CRM events |
When someone clicks a ChatGPT ad, OpenAI adds a click reference parameter called oppref to the landing page URL. The pixel reads it and stores it in a first-party cookie (__oppref) so later page views and conversions can be tied back to the click. The Conversions API does not capture oppref by itself; you have to pass it along when you have it.
OpenAI's docs describe the Conversions API as the more reliable source, and recommend using the pixel and CAPI together for important events. That mirrors what I recommend for Meta in Meta Pixel vs Conversion API.
Step 1: Create a pixel in ChatGPT Ads Manager
Your first step is creating a Pixel ID in the conversions area of Ads Manager.
- Log in to ChatGPT Ads Manager and open the Conversions tab.
- Create a new pixel and note the Pixel ID.
- Create the conversion events you plan to use (see step 3). Each campaign optimises on one event, so set these up before you launch.
- If you plan to use the Conversions API, generate the API key from the same area and store it somewhere safe, not in your website code.
Step 2: Install the pixel with GTM or code
You can install the OpenAI measurement pixel either directly in your site's code or through Google Tag Manager. Both work; GTM is easier to manage alongside your other tags.
Installing with Google Tag Manager
At the time of writing there is no Google-built tag for OpenAI in GTM, but community templates exist in the Template Gallery, such as the open-source OpenAI pixel tag published by Stape. A typical GTM setup looks like this:
- Add the OpenAI pixel template (or a Custom HTML tag with the snippet from OpenAI's Measurement Pixel docs).
- Enter your Pixel ID and fire the base tag on all pages, after your consent banner has loaded.
- Create separate event tags for each conversion, triggered by your dataLayer events.
- Pass an event ID from the dataLayer into each event tag.
Your developer or platform should push conversion data to the dataLayer. For a purchase, something like:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'purchase',
event_id: 'ORD-10482', // unique per order, reused server-side
value: 89.00,
currency: 'USD'
});
Installing directly in code
Without GTM, paste the snippet from OpenAI's Measurement Pixel docs into your site's head and fire the event on the thank-you page or after a successful form submission. Never call the Conversions API from page code; OpenAI's docs warn against it because it exposes your API key.
Step 3: Choose the right standard events
Standard events are OpenAI's predefined conversion types, and conversion-optimised campaigns can only optimise on a standard event. OpenAI's supported events page lists order_created for a completed purchase and lead_created for a submitted lead form or contact request. The Conversions API reference also accepts other types, such as registration and trial events, so check the current list before mapping anything else.
| Your business action | Suggested event |
|---|---|
| Ecommerce order confirmed | order_created |
| Quote or booking form submitted | lead_created |
| Account sign-up | Check the current supported list |
| Newsletter sign-up, scroll, time on page | Custom event (reporting only, not optimisation) |
Custom events help reporting, but only standard events can drive optimisation. Custom event names must match Ads Manager exactly.
Step 4: Test that events arrive
Testing proves that events reach OpenAI before you spend money on them. OpenAI provides a few tools for this:
- Pixel debug mode. Set
debug: truewhile testing so you can see pixel activity in the browser console. Debug mode logs activity but does not keep test events out of reporting, so test with care on a live account. - Conversion event stream. OpenAI documents an endpoint that returns recent pixel events (up to 50 from the last 15 minutes). Use it to confirm receipt, not for reporting.
- Validate-only for CAPI. Server events can be sent with
validate_onlyset to true, which checks them without saving them. - GTM Preview. Confirm the right tag fires once, on the right trigger, with the event ID populated.
Finally, once a campaign is live, complete a real conversion after an ad click and confirm it appears in Ads Manager. That is the only test that proves the whole chain, from oppref to attribution.
Step 5: Add the Conversions API and deduplicate
The Conversions API sends conversions from your server, so they are not lost to ad blockers, browser restrictions or closed tabs.
The key fields to get right:
- Event type matching your Ads Manager event, such as
order_created. - Event ID: the API's
idfield should equal the pixel'sevent_idfor the same conversion. - Click reference: pass the
opprefvalue (from the URL or the__opprefcookie) when you have it. - Hashed user data: for example, email trimmed, lowercased and SHA-256 hashed into the
emails_sha256field. Never send raw emails or phone numbers.
Deduplication is how OpenAI avoids counting the same order twice. According to OpenAI's docs, events are matched on Pixel ID, event name and event ID; the first event received is kept and later duplicates are ignored. Use the same ID when you retry a failed send, and a new ID for every genuinely new conversion. If you have done this for Meta, the logic is identical to Meta CAPI event deduplication.
For a server-side GTM build on Stape or Google Cloud, see my guide to ChatGPT Ads Conversions API with server-side GTM.
Step 6: Respect consent
The OpenAI pixel has its own consent setting, and you should connect it to your consent banner. Per OpenAI's docs, when consent is set to false the pixel sends no measurement pings, events blocked during that time are not replayed later, and setting consent to false removes the pixel's cookies. Set the consent state before the pixel initialises. On the server side, stop forwarding the click reference and user data when a user has not consented or withdraws consent. If you already use Consent Mode v2 for Google, map the same banner choices to the OpenAI pixel.
Why does ChatGPT Ads show zero conversions?
ChatGPT Ads usually show zero conversions because the event is not reaching OpenAI, does not match the campaign's event, or cannot be tied to an ad interaction. Work through this checklist:
- The pixel base tag fires on every page, including the landing page that receives
oppref - The event fires on the real conversion, not on a page that redirects away first
- The event type sent matches the conversion event attached to the campaign
- The campaign had the right event attached before traffic started (historic events do not backfill)
- Consent is not blocking every visitor because of a misconfigured default
- Server events include
opprefwhen available, and the correct Pixel ID - You have waited 24 to 48 hours; OpenAI says attributed conversions can take that long to appear
- Pixel and CAPI share event IDs, so you are not seeing duplicates either
Final thoughts
ChatGPT Ads tracking is not hard if you treat it like Meta: a browser pixel, a server event, one shared event ID and consent handled properly. Get it right before your first campaign, because oCPC can only optimise on what it receives. If you want help, my ChatGPT Ads tracking service covers the full setup, or book a free tracking audit.



