Across the published advertiser results from ChatGPT Ads, the single most reported problem was not cost or targeting — it was measurement. Ads Manager reported one click count while site analytics showed a very different session count, and three independent advertisers hit the same wall.
OpenAI’s documentation actually explains why that gap occurs and how to narrow it. This guide reconstructs the setup from those official pages.
Measurement Has Three Layers
Per OpenAI’s conversion measurement documentation, the flow is:
- A data source, created in Ads Manager.
- Event delivery through the OpenAI Pixel, the Conversions API, or both.
- Matching, where OpenAI evaluates the event against the campaign’s configured conversion event and the applicable attribution window, then tries to connect it to an eligible ad click.
Step three is where most setups quietly fail. Firing the event is not sufficient; the event has to be connectable to the right click. The mechanism that makes that possible is oppref.
oppref: Where Measurement Actually Breaks
OpenAI appends a click reference called oppref to the end of the landing page URL, in the form yoursite.com?oppref=gAAAAAb123. The Pixel captures that value and stores it in a first-party cookie so it can be associated with a conversion that happens later. For server-side delivery, oppref should be included in Conversions API calls when available.
The decisive instruction appears in OpenAI’s event quality documentation: preserve the oppref parameter when a person lands from an ad, including through redirects and navigation. In practice the usual culprits are:
- An intermediate redirect between the ad link and the landing page — a tracking link, a shortener, a language redirect, a www or https redirect — dropping the query string.
- A landing page that forwards the visitor to another URL without carrying the query string.
- A checkout step that hands off from browser to server without passing the click information.
OpenAI’s guidance is to test the full path: tracking links, redirects, checkout, and any browser-to-server handoff. Reusing another person’s click information or substituting a default value is explicitly prohibited.
The Rule for Running Pixel and API Together
OpenAI recommends both channels for resilience, with one condition: when the same conversion is sent through both, it must carry the same event ID. Otherwise deduplication cannot happen and a single sale can report as two conversions. Distinct actions need distinct IDs.
There is also an automatic layer. Automatic advanced matching (AAM) helps connect a website conversion to an ad when no click identifier is available: the Pixel detects supported customer information from recognizable forms, normalizes and hashes it with SHA-256 in the browser, and includes it with the event. Raw customer information is not sent to OpenAI, and no change to the Pixel implementation is required.
The legal responsibility stays with the advertiser. OpenAI requires that conversion data be sent only where permitted, after clear disclosure of what the site collects and after obtaining any consent the law requires.
Why Ads Manager and Analytics Disagree
This is the channel’s most-complained-about behaviour, and OpenAI answers it directly. Ad clicks measure ad interactions; an analytics session depends on page load, redirects, consent settings, browser blocking, UTM handling, attribution windows and time zones.
OpenAI lists six ordinary causes, and adds that a difference does not necessarily indicate an error:
| Cause of the gap | What to do |
|---|---|
| Different attribution method or window | Align the window on both sides before comparing |
| Event timestamps, reporting time zones, date boundaries | Compare the same date range and the same time zone |
| Browser, consent and storage conditions | Account for consent refusal and tracking prevention |
| Different deduplication behaviour | Use one event ID per action |
| Campaign or conversion-event configuration | Verify the event attached to the campaign |
| Modeled conversion reporting | Remember the total may include modeled conversions |
That last row matters. Where modeled measurement is available, OpenAI may estimate attribution for otherwise unattributed events, and reported totals can include modeled conversions. Reading the panel total as a literal list of observed sales is therefore wrong.
The Most Common Trap: Conversions Reporting Zero
OpenAI’s reporting documentation carries a blunt warning. A conversion event can be firing and accepted and still show zero if it does not match the conversion event configured for the campaign.
The conditions:
- For standard events, the configured event type must match the event you send.
- For custom events, the type must be Custom and the custom event name must match exactly. A matching display name alone is not enough.
- The correct conversion must be attached to the campaign before traffic starts.
And the costly part: if you fix the configuration, historical events do not backfill. Data from the misconfigured period is gone, and you have to test again with new eligible traffic. That single sentence is why instrumentation cannot wait until after launch.
Attribution Windows and Reporting Settings
Ads Manager offers a click-through window of 7, 14 or 30 days and a view-through window of 0 days (disabled) or 1 day, in any supported combination.
Three details change decisions:
- A window change affects reporting only. It does not alter optimization, bidding or billing, and the logic is last-touch, not multi-touch.
- The default time axis is ad event time — the moment of the click or impression that received credit. To report on when the conversion happened, switch on the “Conversions (by conv. time)” column. This is why the same conversion can land on a different day in daily reports.
- Clicks outrank views. If both an impression and a click qualify for the same conversion, the click receives credit.
Patience is also part of the setup: OpenAI advises allowing 24 to 48 hours for attributed conversions to appear, and totals can change as events are processed. Declaring failure on day one is premature.
For ecommerce there is one more easily missed constraint: Order Created Sales and Order Created ROAS are calculated only from attributed order_created events. No other standard or custom event contributes to those columns, which is usually why a ROAS column looks empty.
Reading the Event Quality Warnings
OpenAI publishes an event quality assessment per data source, refreshed daily over seven complete calendar days. The framing matters: the score does not predict campaign performance and does not guarantee that a conversion will match. It points at parts of the setup worth reviewing.
| Warning | What it actually means |
|---|---|
| Limited email or customer ID information | Eligible events lack an email or your own stable customer ID; keep one consistent ID per person and never reuse a shared or placeholder value |
| Ad click information missing or unconnectable | oppref is being lost en route; test tracking links, redirects, checkout and the browser-to-server handoff |
| Conversions API events delayed | The check looks for receipt within one hour of the action; inspect queues, failed requests and retries |
| Conversion matches need review | Repeated callbacks or duplicate tags may be sending one action twice; use a consistent event ID for copies |
| Limited additional matching information | Supply phone, name, postal code and country, and forward the real client IP and user agent on server events — not your server’s own address |
| Limited event types observed | Thin activity across browsing, intermediate and completed-outcome groups; custom events do not count toward this breadth check |
One rule stands out for retries: preserve the action’s original timestamp rather than replacing it with the upload time. OpenAI also explicitly prohibits sending extra events, inventing identifiers or altering event times to improve a score.
Symptom-to-Cause Table
| Symptom | Likely cause | Check |
|---|---|---|
| Clicks in the panel, no sessions in analytics | Redirects, consent refusal or UTM handling | CSV comparison on identical date range and time zone |
| Conversions at zero | Event name does not match campaign configuration | Confirm the custom event name matches exactly |
| One sale, two conversions | Pixel and API sending different event IDs | Use a single event ID for copies |
| ROAS column empty | No order_created event being sent | Verify the order event’s name and delivery |
| Conversions appear late | Reporting lag | Wait 24–48 hours before judging |
| Dates shift in daily reports | Default axis is ad event time | Enable “Conversions (by conv. time)“ |
What to Send Support
Before contacting support about a reporting discrepancy, OpenAI asks for nine items. Sending the full set is what separates an implementation bug from an ordinary attribution difference:
| # | Item | ☐ Status |
|---|---|---|
| 1 | Ad account ID | ☐ |
| 2 | Campaign and ad names | ☐ |
| 3 | Date range and time zone | ☐ |
| 4 | Ads Manager CSV export | ☐ |
| 5 | Analytics comparison | ☐ |
| 6 | Pixel ID | ☐ |
| 7 | Event names | ☐ |
| 8 | Sample conversion timestamps | ☐ |
| 9 | Screenshots of the discrepancy | ☐ |
Quick Take
On this channel, measurement is not a component of campaign setup — it is a precondition. Because historical events never backfill, a broken implementation is not something to fix later.
There is reason to suspect that some of the zero-conversion campaigns in the published advertiser reports were measurement failures rather than performance failures: the click counts did not reconcile, nobody could confirm whether oppref survived the journey, and the panel offers no context report to check against.
The order is data source, Pixel, server-side delivery, a test proving oppref survives the full path, then attaching the correct event to the campaign. Spending makes sense only after that.
Related Reading
- ChatGPT Ads Opens in Türkiye: Date, Eligibility and Minimum Budget
- What Advertisers Actually Got From ChatGPT Ads
- Server-side tagging
- UTM parameters
- Attribution window
Official Sources
- OpenAI Help Center: Conversion Measurement
- OpenAI Help Center: Measure Results
- OpenAI Help Center: Understand and improve event quality
- OpenAI Help Center: ChatGPT Ads frequently asked questions
Frequently asked questions
- How do you set up conversion tracking on ChatGPT Ads?
- Create a data source in Ads Manager, then send conversion events through the OpenAI Pixel, the Conversions API, or both. OpenAI evaluates those events against the conversion event configured for the campaign and the applicable attribution window before matching them to an ad click.
- What is oppref?
- oppref is OpenAI's click reference, appended to the end of the landing page URL. The OpenAI Pixel captures it and stores it in a first-party cookie so later conversion events can be associated with the click. It should also be passed into Conversions API calls when available.
- Why don't Ads Manager clicks match Google Analytics sessions?
- Per OpenAI, ad clicks measure ad interactions, while analytics sessions depend on page load, redirects, consent settings, browser blocking, UTM handling, attribution windows and time zone settings. Compare the same date range and time zone, then use CSV exports to check campaign and ad-level activity.
- Why do my conversion events show zero in Ads Manager?
- An event can fire and be accepted yet still report zero if it does not match the conversion event configured for the campaign. For custom events the event type must be Custom and the name must match exactly; a matching display name is not enough. Corrected configurations do not backfill historical events.
- What attribution windows does ChatGPT Ads support?
- Click-through reporting windows of 7, 14 or 30 days, plus a view-through window of either 0 days (disabled) or 1 day. Changing a window affects reporting only, not optimization, bidding or billing, and the logic is last-touch rather than multi-touch.
- How long until conversions appear in reporting?
- OpenAI advises allowing 24 to 48 hours for attributed conversions to be included, and notes that totals may change as recent events are processed.
- Can the Pixel be deployed through Google Tag Manager?
- Yes, provided the tag manager loads the Pixel snippet on the correct pages and does not block or reorder the initialization and event calls. If it cannot load reliably, install the snippet directly or use server-side measurement.
- Should the Pixel and Conversions API be used together?
- OpenAI recommends using both for more resilient measurement. When the same conversion is sent through both channels, use the same event ID so OpenAI can deduplicate it; use different IDs for distinct actions.