All articles

ChatGPT Ads Conversion Tracking: Pixel, Conversions API or Both?

Compare the OpenAI Measurement Pixel and Conversions API for ChatGPT Ads conversion tracking, deduplicate with shared event IDs and use our pre-launch measurement checklist.

Illustrative concept: Pixel and Conversions API events merging through the same event ID into one deduplicated conversion.

TL;DR: ChatGPT Ads conversion tracking works through a data source in OpenAI Ads Manager that receives events from the OpenAI Measurement Pixel (in the browser), the Conversions API (from your server), or both. OpenAI describes the Conversions API as more reliable than the Pixel alone. Our recommendation for most brands is to run both, give each conversion one shared event ID so OpenAI can deduplicate it, preserve the oppref click reference end to end, and wait 24 to 48 hours before reading results.

Updated October 1, 2026. This guide summarizes OpenAI's current documentation and adds our own analysis. Sections labeled "What OpenAI's docs say" stick to the source; sections labeled "Our take" are GPTAd's opinion. Code snippets are illustrative and were not tested against a live account. GPTAd is an independent product preview and is not affiliated with or endorsed by OpenAI.

What is ChatGPT Ads conversion tracking?

Conversion tracking is how you tell OpenAI which actions matter after someone interacts with your ad in ChatGPT: a purchase, a lead, a registration, a booked demo. Three definitions carry the rest of this article:

  • Measurement Pixel: a JavaScript SDK (oaiq) that runs in the visitor's browser and sends website events to OpenAI.
  • Conversions API: an HTTPS endpoint your server calls to send events it has confirmed, such as a paid order or a qualified lead.
  • oppref: the OpenAI click reference appended to your landing page URL. It is the main signal that connects a conversion to a specific ad click.

According to OpenAI's Conversion Measurement guide, a conversion can be reported when the event arrives from a data source connected to your ad account, matches a conversion event configured for the campaign, happens inside the applicable attribution window, and can be connected to an eligible ad click using available signals. Those signals may include oppref, advanced matching data and, where available, modeled measurement.

How does the OpenAI Measurement Pixel work?

What OpenAI's docs say

The Measurement Pixel documentation asks you to place a short snippet near the top of the <head> on every page where you want to capture conversions, then initialize it with a Pixel ID created in the Conversions tab of Ads Manager. You then call measure when something happens:

javascript
oaiq("init", { pixelId: "<YOUR-PIXEL-ID>" });

oaiq(
  "measure",
  "order_created",
  { type: "contents", amount: 2599, currency: "USD" },
  { event_id: "order_12345" }
);

Key details from the docs:

  • It handles plumbing for you. The Pixel captures oppref from the landing URL, stores it in a first-party __oppref cookie, adds the page origin as source_url, timestamps events and batches closely grouped calls.
  • Amounts are integers in minor units. 2599 with USD means $25.99.
  • Optional user data improves matching. You can pass SHA-256 hashes of normalized email, phone, external ID and names, plus raw country, city, region and postal code. Raw identifiers must never be sent.
  • Automatic advanced matching can detect supported customer information on your site and hash it in the browser before sending. OpenAI states raw customer information is not sent through this feature.
  • Consent is built in. Call oaiq("consent", false) before initializing if consent is required, then oaiq("consent", true) once it is granted. Consent defaults to true unless you set it to false or a stored denial exists, and blocked events are not replayed.
  • App events are not supported. app_installed and app_opened must go through the Conversions API.
  • Sites with a Content Security Policy need to allow bzrcdn.openai.com and bzr.openai.com in the documented directives.

The Pixel's cookies have their own lifetimes: __oppref lasts 30 days after it is written (reset each time a new oppref is captured) and __obref lasts 365 days. OpenAI notes these are separate from attribution windows.

What does the OpenAI Conversions API do?

What OpenAI's docs say

The Conversions API documentation opens with a clear position: it is "a more reliable tracking source than the pixel alone," and OpenAI recommends using it when possible. You send events from your server only:

bash
curl -X POST "https://bzr.openai.com/v1/events?pid=<PIXEL-ID>" \
  -H "Authorization: Bearer <API-KEY>" \
  -H "Content-Type: application/json" \
  --data '{"validate_only": true, "events": [ ... ]}'
  • Authentication: a Conversions API key provisioned in the Ads Manager Conversions tab. OpenAI's conversion tracking guide notes it is separate from the Advertiser API key, and both belong on your server.
  • Batches: up to 1,000 events per request. If one event fails, the whole batch fails.
  • Required fields: a unique id, the event type, timestamp_ms and a data object whose type matches the event. source_url is required for web events.
  • Time limits: the timestamp must be within the last 7 days and no more than 10 minutes in the future.
  • action_source: web, mobile_app, offline, physical_store, phone_call, email or other.
  • Click matching is on you. Unlike the Pixel, the API does not capture oppref. You must capture it and pass the original value.
  • User data is per event: lists of hashed emails, phones, external IDs and names, plus raw location fields, ip_address, user_agent, the Pixel's obref browser reference (unhashed) and Android GAID. IDFA is not supported.
  • Testing: validate_only: true checks events without saving them.

Pixel vs Conversions API vs both: which should you use?

Swipe to compareScroll horizontally to compare
QuestionMeasurement PixelConversions APIBoth together
Where it runsVisitor's browserYour serverBrowser and server
Captures oppref automaticallyYes, into a first-party cookieNo, you pass itPixel captures it; forward it to the server
Needs an API keyNoYes, kept on the serverYes, server side only
Affected by browser blocking or consent stateYesDepends on what you collect and forwardServer copy can confirm what the browser missed, within your consent rules
Offline, phone or store conversionsNoYes, via action_sourceYes
App install and open eventsNoYesYes
Engineering effortLowestModerateHighest, plus dedup logic
OpenAI's stated viewGood for website actions"More reliable" than Pixel aloneRecommended for "more resilient measurement"

The last row paraphrases OpenAI's docs. The rest is our summary of the documented capabilities.

Why run the Pixel and Conversions API together?

What OpenAI's docs say

OpenAI's help article recommends using both "for more resilient measurement." When the same conversion is sent twice, use the same Pixel ID, the same event name and the same ID (Pixel event_id equals API id). For custom events, keep custom_event_name identical too. OpenAI "uses the first event it receives for a matching key and ignores later duplicates."

Our take

The browser is good at catching the click context; the server is good at confirming the outcome. Together they cover each other's blind spots. Two implications of the dedup rule are easy to miss:

  1. The first copy wins, not the richest one. In our reading, if the browser event lands first with thin matching data and the server copy arrives later with hashed email and oppref, the later copy is the one ignored. So do not rely on one side to carry all the matching information. Pass hashed user data to the Pixel at init when you have it, and forward oppref and obref to your server so both copies can stand on their own.
  2. Your event ID should come from your system of record. An order number, lead ID or booking ID works well because both the page and the server already know it. A random ID generated in the browser only works if you also send it to the server.

For a hybrid setup, the Conversions API docs describe reading the __obref cookie in the browser, sending it to your server and including it unchanged as user.obref, subject to your consent requirements.

Which events should you track? Mapping the funnel

OpenAI's Supported Events list gives you a standard taxonomy. The mapping below is our suggestion for typical businesses:

Swipe to compareScroll horizontally to compare
Funnel stageStandard eventData typeBest sent from
Landing or key page viewpage_viewedcontentsPixel
Product or plan viewedcontents_viewedcontentsPixel
Add to cartitems_addedcontentsPixel
Checkout startedcheckout_startedcontentsPixel
Purchase completedorder_createdcontentsBoth, shared order ID
Lead form submittedlead_createdcustomer_actionBoth, shared lead ID
Demo or consultation bookedappointment_scheduledcustomer_actionBoth, or server if booked by phone
Account createdregistration_completedcustomer_actionBoth
Free trial or paid plan startedtrial_started, subscription_createdplan_enrollmentServer, from billing system
App install or openapp_installed, app_openedcustomer_actionConversions API only

Three documented rules should shape your choices:

  • Only standard events can be optimization goals. OpenAI's help article on conversion optimization campaigns says custom events are not currently supported for that objective, and the selected event cannot be changed after the campaign is created. If a quote request is your real goal, lead_created may describe it honestly; keep custom events for diagnostics.
  • Revenue columns only count order_created. OpenAI's Measure Results article says Order Created Sales and Order Created ROAS are calculated only from attributed order_created events.
  • Offline outcomes have a 7-day clock. You can send a qualified lead or a closed deal with action_source set to offline or phone_call, but the timestamp must fall within the last 7 days. Separately, OpenAI's event quality checks look for server events received within one hour of the action. If your sales cycle is longer than a week, the Conversions API cannot backfill the final close, so pick an earlier, verifiable milestone.

How does attribution work for ads inside conversations?

What OpenAI's docs say

Click-through attribution uses the configured click window. OpenAI's Measure Results article lists 7, 14 or 30-day click-through reporting windows and a view-through window of either 0 days (disabled) or 1 day. If a conversion qualifies for both a click and an impression, the click gets credit. OpenAI describes this as last-touch logic, not multi-touch, and says changing reporting windows does not change optimization, bidding or billing.

A documentation inconsistency worth knowing: the Pixel and Conversions API developer pages say view-through conversions are reported separately and are not included in Conversions. The more recently updated Measure Results help article says that with the 1-day view-through window selected, eligible view-through conversions are included in the Conversions total and can be split out in separate columns. Check which behavior your Ads Manager shows and note your window settings next to any number you share.

Reported totals may also include modeled conversions where available, and attributed conversions can take 24 to 48 hours to appear.

Our take

Conversations change the shape of the journey. On search, the query is a few words; on social, the ad interrupts browsing. In ChatGPT, the ad appears next to a conversation where someone may already have described their problem, budget or constraints in detail. That context is why we say brands want to "show up when buyers ask ChatGPT." It also means a person may see your ad while exploring, leave, and come back later, which is exactly the case view-through reporting and impression billing try to account for.

For measurement, that has three practical consequences:

  • Expect more gaps between click and conversion. A 1-day view-through window and a last-touch model will not capture everything. Treat Ads Manager as one lens, not the full story.
  • Do not compare ChatGPT Ads numbers directly with search or social. Windows, view-through rules and modeled conversions differ by platform. OpenAI itself says differences with third-party analytics do "not necessarily indicate an error."
  • Record the conversation-era questions you are targeting. When results come in, you will want to know which buyer questions and ad angles you were testing, not just which campaign ID converted.

What are common implementation mistakes?

These come from our reading of OpenAI's troubleshooting and event quality guidance plus general tracking experience:

  • Losing oppref in redirects. Link shorteners, geo redirects, consent walls and checkout domains can strip query parameters. OpenAI explicitly asks advertisers to preserve oppref through redirects and navigation.
  • Sending dollars instead of cents. amount: 25.99 is wrong; the docs require integers in the currency's minor unit (2599).
  • Different event IDs on browser and server. Dedup fails and conversions are double counted, or the event quality check flags repeated matches.
  • Retrying with a new ID or a new timestamp. OpenAI's event quality article says to keep the original event ID and time on retries, not the upload time.
  • One bad event breaking a batch. Because a single invalid event fails the whole batch, validate with validate_only and log rejected batches.
  • Hashing the wrong string. Normalize first (for example, lowercase and trim emails; strip punctuation from phones while keeping the country code), then SHA-256 and send lowercase hex.
  • Forwarding your server's IP or user agent. The docs ask for the real client's values.
  • Firing conversions on page reload. Thank-you pages that fire order_created every time they load inflate counts.
  • Calling the Conversions API from the browser. The Pixel docs say not to, and it would expose your key.

What about privacy and consent?

What OpenAI's docs say

OpenAI says conversion data should only be shared when permitted and in compliance with applicable laws and OpenAI terms, after giving users clear information and obtaining necessary consents where required by law. Identifiers must be hashed. Ads Manager reporting is designed to show campaign performance rather than individual-level activity. OpenAI also states it does not currently use Pixel or Conversions API data for user-level personalization, and the opt_out flag will be respected if that changes.

Our take

  • Decide your default before launch. Because the Pixel assumes consent unless told otherwise, sites that need opt-in consent should call oaiq("consent", false) before init and wire the consent banner to flip it.
  • Apply the same rules server side. If a visitor declined measurement, do not forward their obref or hashed identifiers through the Conversions API either. OpenAI says to stop sending obref when consent is revoked.
  • Update your privacy notice and vendor list to name OpenAI as a measurement recipient, and involve whoever owns legal review.

Pre-launch measurement readiness checklist

Use this before you spend on your first campaign:

  1. Create one data source (Pixel ID) per website and reuse it for both Pixel and Conversions API.
  2. Install the Pixel snippet near the top of <head> on every relevant page; update your CSP if you have one.
  3. Configure consent behavior before init where required.
  4. Choose your primary conversion as a standard event and create the conversion event setting in Ads Manager.
  5. Generate event IDs from your order, lead or booking system and use them on both sides.
  6. Capture oppref on landing, store it with the session and the order or lead, and pass it to the Conversions API.
  7. Send hashed user data only where permitted, normalized exactly as documented.
  8. Test with debug: true in the browser and validate_only: true on the server.
  9. Check the recent-events monitor (roughly the last 15 minutes) for both pixel_sdk and server_to_server events.
  10. Walk the full path: ad link, redirects, landing page, checkout or form, confirmation, server event.
  11. Write down your click-through and view-through reporting windows and whether view-through is in your Conversions total.
  12. Agree how you will reconcile Ads Manager with GA4 and your CRM before the first report.

How should you judge results in the early days?

Our take

  • Wait for the data to settle. OpenAI says conversions can take 24 to 48 hours to appear and spend can lag roughly 7 to 8 hours. A day-one CPA is not a CPA.
  • Watch event quality first, performance second. OpenAI's event quality score refreshes daily over seven complete days. In week one, "are the right events arriving with the right matching data?" is the more answerable question.
  • Use conversion time when comparing with your CRM. Ads Manager defaults to ad event time; the "Conversions (by conv. time)" column lines up better with order systems.
  • Separate click-through from view-through before you calculate cost per conversion, and say which one you used.
  • Keep counts next to percentages. Small numbers swing hard. We cover this reporting discipline in How to Measure Your First ChatGPT Ads Campaign.

Where GPTAd fits

GPTAd is an independent workspace in development for conversational advertising, built for founders, ecommerce brands, marketing teams and agencies. It is not affiliated with OpenAI, and it does not install pixels, connect to Ads Manager or launch ChatGPT campaigns today. What we are building focuses on the strategy that sits upstream of measurement: prompt and intent research, ad angle exploration, competitor visibility insights and conversational ad creation. Knowing which buyer questions you want to win makes it much easier to decide which conversions are worth tracking.

If you are planning your first ChatGPT Ads test and want to see where GPTAd is heading, book a 15-min early-access walkthrough at [email protected] or follow us on LinkedIn.

FAQ

Do I need both the OpenAI Pixel and the Conversions API?

No, either one can send conversions. OpenAI calls the Conversions API more reliable than the Pixel alone and recommends using both together for more resilient measurement, with a shared event ID for deduplication.

Can I track ChatGPT Ads conversions without a developer?

The Pixel snippet can be added through a tag manager, and OpenAI's help center says Google Tag Manager works if it loads the Pixel reliably without reordering calls. The Conversions API requires server-side work.

How do I stop the same purchase being counted twice?

Send it with the same Pixel ID, the same event name and the same ID on both sides (Pixel event_id and API id). OpenAI keeps the first copy it receives and ignores later duplicates.

What attribution windows does ChatGPT Ads use?

OpenAI's help center lists 7, 14 or 30-day click-through reporting windows and a 0-day or 1-day view-through window. Changing them affects reporting only, not optimization, bidding or billing.

Can I send offline or phone conversions?

Yes. The Conversions API accepts action_source values including offline, phone_call and physical_store, as long as the event timestamp is within the last 7 days.

Why don't Ads Manager and Google Analytics match?

OpenAI lists different attribution methods and windows, time zones, browser and consent conditions, deduplication, configuration and modeled conversions as common reasons. A difference does not necessarily mean an error.

Is GPTAd part of OpenAI?

No. GPTAd is an independent product and is not affiliated with, endorsed by or sponsored by OpenAI. ChatGPT is a trademark of OpenAI.

References

  1. OpenAI Developers: ChatGPT Ads Measurement Pixel
  2. OpenAI Developers: Conversions API
  3. OpenAI Help Center: Conversion Measurement
  4. OpenAI Developers: Supported Events
  5. OpenAI Developers: Conversion Tracking
  6. OpenAI Help Center: Measure Results
  7. OpenAI Help Center: Understand and Improve Event Quality
  8. OpenAI Help Center: Conversion Optimization Campaigns
Good questions open new possibilities.
From ideas to your next opportunity

Make room for
your next move.

Meet the workspace we’re building for the next chapter of advertising.

Get early access