ChatGPT Ads tracking: OAIQ pixel and OpenAI Conversions API
Set up the OAIQ pixel and OpenAI Conversions API before your first ChatGPT Ads campaign: oppref, deduplication, standard events and the billing choice.
the short version: ChatGPT Ads reports conversions through the OpenAI pixel (the oaiq snippet), the server side Conversions API, or both, all against one Pixel ID. set it up before you create a campaign, not after, because the Conversions objective needs a working standard event to exist first, and broken tracking actively harms delivery.
Why this comes first
with most ad platforms, bad tracking means bad reporting. you still get your clicks, you just cannot tell what they did.
under ChatGPT Ads’ Conversions objective it is worse than that. delivery is optimised toward the conversion signals you send, so if those signals are missing, wrong or delayed, the system optimises against bad data and your spend goes to the wrong people. the dashboard being wrong is the least of it.
that is why every piece of advice here is “do it before you launch”.
The ways to send conversions
all of them report to the same Pixel ID from the Conversions section of Ads Manager, and you can run more than one.
The JavaScript pixel. the snippet goes inside the <head> of every page, initialises with your Pixel ID, and automatically fires a page_viewed event. then on the pages where something meaningful happens, you add explicit calls:
oaiq("measure", "purchase", { value: 49.00, currency: "USD" });
this is the fastest to install and the one most people start with. it also handles automatic advanced matching for you: it picks up contact details from recognisable forms, normalises them and hashes them with SHA-256 in the browser before anything is sent, so raw customer information never leaves the page.
The Conversions API. server side, sent with a Conversions API key from the same Conversions section. this is the one that survives ad blockers, browser privacy changes and users who close the tab before the pixel fires. it is more work, and it is the version i would push any serious advertiser toward, because browser side tracking loses more events every year.
The image tag. a no-JavaScript fallback for places where you cannot run a script, such as some email and checkout flows. useful at the edges, not a replacement for either of the two above.
Through a measurement partner. if you already use Adjust, Airbridge, AppsFlyer, Branch, Kochava, Singular or Tenjin, you can enter the Pixel ID and API key there and let the partner forward events. for apps this is now the main route, covered in ChatGPT Ads for app installs.
The click reference: oppref
when someone clicks your ad, OpenAI appends a click reference called oppref to the end of your landing page URL, something like ?oppref=gAAAAAb123. the pixel reads it and stores it in a first-party cookie, so a conversion that happens three pages later can still be tied back to the click.
two things break this more often than anything else. a redirect that drops the query string, for example a shortener, a locale redirect, or an http to https hop, throws oppref away before the pixel ever sees it. and a server side event that does not carry oppref has to be matched on weaker signals. so preserve it through every redirect, and pass it into your Conversions API calls whenever you have it.
Running the pixel and the API together
this is the setup worth having: the pixel for speed and coverage, the API for the events browsers lose. the risk is counting the same purchase twice.
the fix is one shared event ID. give each conversion an ID when it happens, send that same ID with the pixel event and with the API event, and OpenAI keeps one and drops the other. build the ID from something stable, such as your order ID, rather than a random number generated separately in two places, because two different random numbers will never match.
The mistake I made
i installed the pixel, saw page_viewed firing, and assumed i was done.
page_viewed fires automatically. your actual conversion events do not. they only exist if you add the measure calls yourself, on the specific pages where the action completes. it is easy to have a green-looking pixel and zero conversion data, and easy to not notice for a week.
check the actual event, not the pixel. fire a real test conversion and confirm it appears in Ads Manager before you spend money against it.
Rules of the Conversions objective that catch people out
these come straight from OpenAI’s own documentation, and each one is easy to discover only after launch.
one standard event per campaign, chosen at creation. the Conversions objective optimises toward a single standard event, such as a purchase, a sign-up or a lead. custom events cannot be used for optimisation, and the event cannot be changed later. to optimise toward something else, you create a new campaign.
you are not paying per conversion. you choose click billing, where you pay per valid click and delivery optimises toward conversions after a click, or impression billing, where you pay per thousand impressions and delivery can also count conversions from people who saw the ad and came back later. impression billing is the one OpenAI says finds more conversions. the choice cannot be changed in place either.
a bid cap is not a price. it is the most you are willing to bid for a conversion. your actual cost per conversion is set by the auction, and you work it out yourself as spend divided by conversions.
Getting the events right
pick a small number of events that map to real business outcomes and use them consistently: a sign-up, a trial start, a purchase. resist the urge to instrument twenty micro events, because you will end up optimising toward whichever one is easiest to trigger, and the easiest event to trigger is rarely the one that makes money. it also matters more here than elsewhere, since only standard events can drive optimisation.
send a value where one exists. optimising toward “a conversion” treats a ₹50 order and a ₹5,000 order identically, which is only correct if your product has one price.
When Ads Manager and your analytics disagree
they will. different attribution windows, time zones, consent and cookie conditions, deduplication rules, and modelled conversions where OpenAI estimates attribution for events it could not tie to a click directly. OpenAI says plainly that a difference does not by itself mean an error. decide up front which source you budget from, and judge trends rather than reconciling every row.
Before you spend
four checks, in order. the pixel is in the head of every page. oppref survives every redirect between the ad and the conversion. a real conversion event fires and appears in Ads Manager. the value you are sending matches what you actually earn.
then work out what you can afford to pay. the LTV to CAC and payback calculator tells you whether a user is worth more than they cost and how long your cash is tied up before you get it back, which is the number that kills companies with otherwise healthy ratios. if you tag the landing URLs with UTMs as well, run them through the UTM checker so a capital letter does not split one campaign into two rows.
the rest of the paid discipline is in the paid ads playbook, and the full library covers the other channels.
FAQ
What is OAIQ in ChatGPT Ads?
oaiq is the function name of the OpenAI pixel, the JavaScript snippet that tracks conversions for ChatGPT Ads. you install it in the head of every page with your Pixel ID. it fires page_viewed on its own, and you add oaiq("measure", ...) calls for real conversions such as a purchase or sign-up.
Does OpenAI have a Conversions API for ChatGPT Ads?
yes. the Conversions API sends conversion events server side, using a Pixel ID and a Conversions API key from the Conversions section of Ads Manager. it survives ad blockers and closed tabs, and it can run alongside the pixel as long as both send the same event ID for the same conversion.
What is oppref?
oppref is the OpenAI click reference appended to your landing page URL when someone clicks a ChatGPT ad. the pixel stores it in a first-party cookie so later conversions can be tied to the click. keep it through redirects and include it in Conversions API calls when you have it.
How do I stop the pixel and Conversions API double counting?
send the same event ID for the same conversion through both. OpenAI then keeps one and discards the duplicate. build the ID from something both sides already know, such as an order ID, rather than generating a separate random number in the browser and on the server.
Can ChatGPT Ads optimise toward a custom event?
not currently. the Conversions objective optimises toward one standard conversion event per campaign, such as a purchase or a sign-up, and custom events are not supported for optimisation. the event is fixed when the campaign is created, so a different goal needs a new campaign.
Sources: pixel behaviour, the Conversions API, oppref, deduplication, automatic advanced matching and modelled measurement from OpenAI’s Conversion Measurement; the standard event rule, billing options and bid cap from OpenAI’s Conversion-optimized Campaigns; the partner list from OpenAI’s Set up Mobile Measurement Partner Integrations; the image tag from Choice OMG’s 2026 field guide. checked 3 October 2026.