ChatGPT Ads Conversion Tracking: Complete CAPI + Pixel Guide
The #1 reason ChatGPT Ads campaigns look like failures is broken tracking — not bad ads. This guide walks through the OpenAI browser pixel, the Conversions API, the 14 standard events, and the four conditions that must be true before OpenAI credits a conversion, so your CPA reporting is actually trustworthy.
Primary sources: OpenAI conversion tracking docs ↗ · OpenAI Events integration ↗
Why Tracking Fails First
OpenAI's ad platform is younger than Google's by two decades, so its measurement stack is still maturing. When a sale does not show up in the ads dashboard, most advertisers blame the channel and pause. In the overwhelming majority of debugging sessions, the real culprit is one of four implementation gaps: a missing oppref, a wrong minor-unit amount, a mismatched event_id, or simply checking too early.
Conversations with OpenAI's support and its documentation confirm that conversion credit requires all four conditions— event received, matched to a configured event, inside the attribution window, and connected to an eligible click. Fix the plumbing and most “ChatGPT doesn't convert” complaints disappear.
The 14 Standard CAPI Events
The Conversions API accepts a fixed vocabulary of standard events. Sending anything outside of it prevents matching, because auto-mapping is limited. The full list:
page_viewedcontents_vieweditems_addedcheckout_startedorder_createdpurchaselead_createdappointment_scheduledregistration_completedsubscription_createdtrial_startedapp_installedapp_openedcustomMatch event names exactly. Use order_created for purchases on most e-commerce setups, lead_created for form submissions, appointment_scheduled for bookings, and trial_started for SaaS free trials. If none fit, apply the custom event with a descriptive label.
The Four Credit Conditions
OpenAI reports a conversion when, and only when, all of these hold:
- 1
The event is received
Your pixel or CAPI delivered the event payload to OpenAI successfully (HTTP 200, valid JSON).
- 2
It matches a configured conversion event
The event name and configuration match a conversion you selected for attribution in the OpenAI Ads dashboard.
- 3
It falls inside the attribution window
The event timestamp is within the campaign's configured attribution window from the ad click.
- 4
It connects to an eligible click
The oppref parameter ties the event back to a real, valid ad click from your campaign.
This is why a browser pixel alone can under-report: it sometimes loses the oppref across domains, while the Conversions API preserves it server-side. Best practice is to run both with deduplication — not one or the other.
Pixel + CAPI Setup
The robust architecture mirrors Meta and Google: a browser pixel captures events client-side, and a Conversions API endpoint sends the same events server-side where they cannot be lost to ad blockers or privacy restrictions. For WordPress, the free Ridoway Pixel plugindoes all of this automatically — including deduplication.
- 1
Install the pixel: Add the OpenAI browser pixel snippet to your site so page_viewed and standard events fire.
- 2
Add the Conversions API: Forward order_created, lead_created, and purchase events from your server with full order data.
- 3
Include oppref: Keep the utm/oppref click parameter intact in server-side payloads so clicks map to events.
- 4
Send minor-unit amounts: Convert totals to integers in the smallest currency unit (4200, not 42.00).
- 5
Use event_ids: Generate one event_id per purchase and send it in both pixel and CAPI so OpenAI dedupes for you.
oppref, Minor Units, and event_ids
oppref (the click-to-conversion link)
OpenAI appends an oppref value to your ad URLs that identifies the exact ad placement. It must survive redirects and server-side forwarding. If your stack rewrites or strips query strings, conversion credit silently breaks.
Minor-unit amounts
Purchase values are sent as integer minor units. $42.00 becomes 4200, €37.61 becomes 3761. Float values cause events to be rejected or mis-totaled, wrecking ROAS math.
event_id deduplication
If both pixel and CAPI fire for the same purchase, OpenAI needs a shared event_id to count it once. A random UUID per conversion, included in both calls, is the standard pattern.
Verifying Events
Before trusting any CPA, verify in this order:
- Confirm network calls: the pixel request returns 200 with a valid JSON response body.
- Use ChatGPT Pixel Helper in Chrome to see which CAPI events fired on the thank-you page.
- Run the network “server events” check and confirm the event shows a matching event_id and minor-unit value.
- Wait the full 24–48 hour reporting window before judging conversion volume.
- Cross-check one real order in the OpenAI dashboard before drawing any conclusion about CPA.
Once events show “Active” and cross-check on an actual order, your optimization signal is real. That is the moment the algorithm can start learning from purchases instead of clicks.
Frequently Asked Questions
What conversion events does OpenAI support for ChatGPT Ads?
OpenAI supports 14 standard event types: order_created, checkout_started, items_added, contents_viewed, page_viewed, lead_created, registration_completed, appointment_scheduled, subscription_created, trial_started, app_installed, app_opened, custom, and purchase-related purchases. Match these exactly, since auto-mapping is limited.
When does OpenAI count a conversion?
All four conditions must hold: the event is received by OpenAI, it matches a configured conversion event, it falls inside the campaign attribution window, and it is attributed to an eligible ad click (via oppref). Break any one and the conversion is silently not credited.
What does oppref mean in ChatGPT Ads tracking?
oppref (OpenAI pointer reference) is the URL parameter that links a click back to your specific ad and ad group. If it is stripped before the server-side event is sent, attribution fails and the conversion is lost even though the pixel fired.
Should I send amounts in minor units?
Yes. OpenAI expects purchase totals in the smallest currency unit (for example 4200 for $42.00). Sending 42.00 as a float causes the event to be discarded or mis-totaled. Integer-based minor units are required.
What is event_id deduplication?
When you send the same conversion through both the browser pixel and the Conversions API, you should include the same event_id in both so OpenAI counts it once. Missing or mismatched event_ids cause double counting or dropped events.
Skip the manual CAPI plumbing
The Ridoway Pixel installs the browser pixel and Conversions API together, handles event_id deduplication, and preserves oppref — in minutes, no developer needed.