ChatGPT ads conversion tracking: pixel and CAPI setup
Track ChatGPT ad conversions with two tools that run together: OpenAI's JavaScript pixel in the browser and the server-side Conversions API on your backend. Send the same conversion from both with a shared event id so they deduplicate. Install both before you launch, because conversion-optimized bidding, live since June 2026, optimizes toward a signal it can only use once the events are flowing.
Updated
What changed
First published. Built against OpenAI's June 2026 Ads developer docs.
On this page
- 01How do you track conversions from ChatGPT ads?
- 02What is the difference between the pixel and the CAPI?
- 03How do you install the pixel?
- 04How do you set up the CAPI?
- 05Which conversion events should you send?
- 06What value should you send with a conversion?
- 07How does event deduplication work?
- 08How do you verify tracking is working?
- 09Why does conversion tracking gate CPA bidding?
- 10What can you measure, and what can’t you?
- 11Frequently asked questions
How do you track conversions from ChatGPT ads?
Install two things and connect them with one shared id. OpenAI’s JavaScript pixel
reports conversions from the browser, the Conversions API (CAPI) reports them
from your server, and a shared event id lets OpenAI deduplicate the two so a
single purchase counts once. You provision a Pixel ID and a CAPI key from the
Conversions tab in Ads Manager, then send standard events like order_created or
lead_created from your site.
Do it before you launch, not after. This is the same order the setup guide insists on, and the reason is mechanical: the platform cannot optimize toward conversions it never saw, and the eligibility rule for conversion bidding made that literal.
What is the difference between the pixel and the CAPI?
The pixel runs in the browser. The CAPI runs on your server. The pixel is a
script you add near the top of your site’s head, initialize with your Pixel ID,
and fire on a conversion. It sees client-side context, but it disappears when an
ad blocker, a privacy setting, or a cookie reset gets in the way. The CAPI sends
the same events server-to-server, where none of that reaches it.
OpenAI recommends the CAPI as the more reliable source and treats the pixel as
the complement, not the other way round. The pixel uses a privacy-preserving
identifier (oppref) stored in a first-party cookie, so even the browser path is
built to avoid sharing personal detail with advertisers. Run both, and you get
the browser’s context plus the server’s reliability. Run only the pixel and you
will undercount by however much of your traffic blocks it, which for some
audiences is a quarter or more.
How do you install the pixel?
Create a Pixel ID in the Conversions tab of Ads Manager, then add the pixel
script near the top of your site’s head so it loads before a fast converter can
leave. Initialize it with your Pixel ID, and call the measure function when a
conversion happens, passing the event name and its data. Place the script
sitewide rather than only on conversion pages, so page views and earlier funnel
events are captured too.
oaiq("measure", "order_created", {
type: "contents",
amount: 12999, // $129.99, in cents
currency: "USD",
event_id: "order-5821"
});
That snippet is illustrative. Build against the pixel reference for the exact call shape, since this platform changes weekly. The two things to get right regardless of syntax are the event name (use a standard one where it fits) and the value format (an integer, covered below).
How do you set up the CAPI?
Provision a CAPI key alongside the Pixel ID in the Conversions tab, then send the
same events from your backend at the moment they happen. A purchase fires
order_created from your order-processing code; a signup fires
registration_completed from your auth flow. Because the call originates on your
server, it is not exposed to ad blockers, browser privacy settings, or a user
closing the tab before the pixel fires.
The CAPI is also where value-based optimization gets its honest numbers. Your backend knows the real order total, the refunded amount, and whether a lead was qualified, in a way the browser does not. Sending server events with accurate amounts is what lets conversion bidding optimize toward revenue rather than raw conversion counts. Treat the CAPI as the system of record and the pixel as the real-time supplement.
Which conversion events should you send?
Send the standard event that matches the action, and reserve custom for what
the taxonomy does not cover. OpenAI defines a fixed set of standard events, each
with a data shape. Use page_viewed for an important page load and
contents_viewed when someone views a specific product or item, including
interactions after the page has loaded.
The standard events as of June 2026:
page_viewed,contents_viewed,items_added,checkout_started,order_created(thecontentsdata shape)lead_created,registration_completed,appointment_scheduled(thecustomer_actionshape)subscription_created,trial_started(theplan_enrollmentshape)custom, for a user-defined event the taxonomy does not cover
Match the event to your funnel rather than firing everything. An ecommerce store
cares about items_added, checkout_started, and order_created; a B2B site
cares about lead_created and appointment_scheduled; a SaaS product cares about
trial_started and subscription_created. Sending the events you will actually
optimize toward keeps the data legible and the bidding focused.
What value should you send with a conversion?
Send monetary values as integers in the currency’s lowest denomination, with the
currency code. A $129.99 order is amount: 12999 with currency: "USD", not
129.99. Include the currency whenever you include an amount. This is the
single most common tracking bug, because a number that looks right in testing
($129.99) is off by a factor of 100 once it reaches the platform.
The data shape carries the value. contents events can include an amount and
an array of items, each with its own id, quantity, and amount. customer_action
events like lead_created can carry an amount if a lead has a modeled value.
plan_enrollment events can carry a plan_id and the subscription value. Getting
the value right is what separates “we got 20 conversions” from “we got $4,000 in
tracked revenue,” and only the second number lets you judge return.
How does event deduplication work?
Send the same conversion from both the pixel and the CAPI with the same
event_id, and OpenAI counts it once. Without a shared id, a purchase that fires
from the browser and from your server lands as two conversions, your CPA looks
half what it is, and conversion bidding optimizes toward a number that is not
real.
This is the same pattern Meta’s CAPI uses, so if your team has set up server-side
conversions before, the model transfers. The discipline is to generate the
event_id once, at the moment of the conversion (your order id is a natural
choice), and pass that same value to both paths rather than letting each side
mint its own. Test this deliberately: fire a single real conversion, confirm it
appears once in reporting, and only then trust the counts.
How do you verify tracking is working?
Run a real conversion through the full path and confirm it shows up once, with the right value, in Ads Manager reporting. Do this before you spend a dollar on traffic. A campaign that launches on broken tracking loses more than its first week of optimization. It teaches conversion bidding the wrong lesson, and that is harder to unwind than a clean start.
Check the three failure modes specifically. Confirm the value is the integer you expected and not 100 times too small or large. Confirm the pixel and CAPI events for the same conversion deduplicate to one rather than counting twice. And confirm events fire from the real production funnel, not from a test page alone, because a pixel that works in isolation can still miss the production checkout. The complete guide explains why this rigor pays off: clean conversion data is the asset that compounds while the auction is thin.
Why does conversion tracking gate CPA bidding?
Because conversion-optimized bidding is, by definition, optimization toward conversions, and it cannot start from zero. OpenAI opened CPA bidding in early access on June 5, 2026, and the eligibility rule made the dependency literal: accounts needed at least one conversion event already flowing through the pixel or CAPI before June 1 to qualify. Tracking first, bidding second, in that order.
There is a practical version of this even without the eligibility gate. A bid strategy that targets a cost per acquisition needs enough conversions to learn what drives them. A few per week is not enough. The cost breakdown shows how a modest test budget produces roughly 20 conversions a month, which is the lower end of usable, so the move is to run CPC until the pixel has logged real volume, then switch.
What can you measure, and what can’t you?
You measure outcomes in aggregate: how many conversions a campaign drove, at what value, at what cost. You do not get individual conversations or user-level detail, by design. Advertisers receive aggregated performance, and ChatGPT keeps the conversation itself private, which is one of OpenAI’s stated advertising principles rather than a temporary limitation.
The honest gap is independent verification. OpenAI has said third-party measurement is coming and named technology partners, but a fully independent measurement layer is still being built as of June 2026. For now, your pixel and CAPI data, read against your own backend, is the source of truth, which is one more reason to make that data clean from day one.
Frequently asked questions
How do you measure conversions from ChatGPT ads?
Install OpenAI's conversion pixel on your site and the server-side CAPI on your backend, then let them deduplicate by event id. Do this before launch: conversion-optimized bidding, live from June 2026, needs the signal. The server path keeps counts honest when ad blockers drop the browser pixel.
Can you bid for conversions (CPA) on ChatGPT ads?
Yes, as of June 2026. OpenAI launched on CPM, added CPC bidding in May, and opened conversion-optimized CPA bidding in early access on June 5. CPA bidding needs a conversion event already flowing through the pixel or CAPI, so stand up tracking first. Most new advertisers still start on CPC.
Do you need both the pixel and the CAPI?
You can run either alone, but both together is the reliable setup. The pixel captures browser context the server cannot see; the CAPI keeps reporting when ad blockers or cookie loss drop the pixel. Send the same event from both with one event id and OpenAI deduplicates them.
How do you send the value of a ChatGPT conversion?
As an integer in the currency's lowest denomination, with the currency code. A $129.99 order is amount 12999 with currency USD, not 129.99. Include the currency whenever you include an amount. Getting this wrong is the most common tracking bug, and it quietly distorts every value-based metric.
Sources
- [1]OpenAI Developers: Adsdevelopers.openai.com ↗
- [2]OpenAI Developers: JavaScript Pixeldevelopers.openai.com ↗
- [3]OpenAI Developers: Conversions APIdevelopers.openai.com ↗
- [4]OpenAI Developers: Supported eventsdevelopers.openai.com ↗
- [5]PPC Land: ChatGPT ads conversion optimizationppc.land ↗
Related posts