TL;DR
Three of the decisions involved are one-way doors in OpenAI's own documentation, and a fourth gate sits at the account level: campaign creation can return a 403 saying conversion bidding is not enabled, which means contacting your OpenAI partner representative and waiting [1]. That makes the September deadline arithmetic. OpenAI announced in August 2026 that ChatGPT Ads is expanding to 31 European markets, with self-serve buying in the EEA and Switzerland reported from early September [7][8], so most European merchants are looking at their first Q4 on this channel.
Key Takeaways
- "You cannot change an existing CPM or CPC campaign to oCPC" and "You cannot change the campaign goal or selected conversion event after creation" [1]. Both mean building a new campaign.
- Conversion-optimized campaigns need exactly one active standard conversion event as the goal, and custom events cannot be goals [1].
- Reporting "applies going forward from attachment", so nothing measures the stretch before the conversion event was attached [3].
- The Conversions API requires
timestamp_ms"within the last 7 days and no more than 10 minutes in the future" [4]. That is a freshness limit on ingestion, not an attribution window. - Amounts are integers in the currency's minor unit:
4200means $42.00 withcurrency: "USD"[4]. A store selling in JPY that multiplies by 100 reports 100 times its revenue. - Deduplication uses your Pixel ID, event name and
id, and the first event OpenAI receives for a matching key wins [4]. Retries are safe; a late backfill has nowhere to land.
What is already locked once a campaign exists?
Before you create a conversion-optimized campaign, OpenAI's documentation lists prerequisites: the ad account must support conversion bidding, and "The Conversions API is a more reliable tracking source than the pixel alone". Then come the two flat statements: "You cannot change an existing CPM or CPC campaign to oCPC" and "You cannot change the campaign goal or selected conversion event after creation" [1]. The third lock is on the reporting side: "Reporting applies going forward from attachment" [3]. Nothing retroactive, no import of the week you were not measuring.
The account gate is the one that turns a week of slack into a month. If campaign creation returns a 403 with "Conversion bidding is not enabled", OpenAI's instruction is to contact your partner representative [1]: an email thread and someone else's queue, fine to wait on in late September and bad to wait on in the third week of November. Setup mechanics live in how to track OpenAI Ads conversions on Shopify, and this article assumes you have read it or will.
What does the European expansion change about the timing?
It puts a large group of merchants on this channel for the first time in the same quarter that everything else is on fire. OpenAI announced the expansion to 31 European countries in August 2026, described in trade coverage as its largest market expansion to date, with self-service access through Ads Manager in the EEA and Switzerland reported for early September [7][8]. Neither write-up pins a single go-live date, so treat the August announcement as the fact and the September date as a report. Ads appear to Free and Go users, while ChatGPT Plus, Pro and Enterprise stay ad-free [7][8].
For a European store that means no campaign history to lean on, no prior-year CPA to compare against, and no conversion data at all until the pipeline runs. Which argues for October as the learning month and November as the spending month, the opposite of how most merchants sequence a new channel. The same logic runs through the rest of the stack, which is why BFCM retargeting audiences get built in September.
In what order do you verify a new conversion source?
Ours has no test surface for this destination, and OpenAI's platform has two, so the order matters more than usual.
| Step | Surface | Timing |
|---|---|---|
| 1 | Place one real test order on your store | Immediate |
| 2 | The app's recent-events card | Within a minute or two, successful events only |
| 3 | OpenAI's recent-events endpoint for your Pixel ID | Roughly the last 15 minutes [6] |
| 4 | Insights in Ads Manager | Next day, after daily processing [3] |
To be precise about the surfaces: WeltPixel Conversion Tracking exposes no per-event test mode for ChatGPT Ads, unlike the test codes Meta, TikTok and Reddit accept or the Test Mode toggles on Snapchat and Pinterest. OpenAI itself documents a validation mode that checks a request without saving the events, and its own note says validation-only requests do not appear in event monitoring [2]. That is the trap: a merchant validates a payload, sees nothing in monitoring, and concludes the integration is broken. OpenAI also documents GET /v1/conversions/events, which "returns a sample of recent events from roughly the last 15 minutes" and is described as useful for testing and troubleshooting, with Insights reserved for attributed and historical reporting [6].
Do not judge the setup on the same evening. Impressions and clicks "can become available within minutes" while conversions wait for daily processing [3]. Reading the resulting report against your Shopify orders is its own job, and how to read OpenAI Ads conversion reports against Shopify orders covers the weekly routine and why the two numbers will not match.
Why a post-season backfill will not rescue a late start
The Conversions API refuses stale events: timestamp_ms "must be within the last 7 days and no more than 10 minutes in the future" [4]. Read that next to the classic recovery move, where tracking gets fixed on the Monday after a big weekend and someone offers to resend Saturday's orders, and the recovery move stops being available around day seven. The same event sent at order time is fine, which is the whole argument for having the pipeline running before the volume arrives.
Deduplication is built for retries and awkward for imports: "Deduplication uses your Pixel ID, event_name, and id. OpenAI uses the first event it receives for a matching key and ignores later duplicates" [4]. First arrival wins. A retry after a timeout is therefore safe, and a re-send with a corrected value is a no-op.
One number to keep straight, because it gets repeated wrongly: the 7 days is a freshness limit on ingestion. It is not an attribution window. OpenAI defines the attribution window as the period after an ad interaction during which an outcome can be credited, says click-through attribution follows the applicable configured click window, and its own setup example uses 30 days [2][3].
The value bug that shows up as a 100x ROAS
Amounts on this platform are integers in the currency's minor unit. OpenAI's own example: use 4200 for $42.00 with currency: "USD" [4]. For most stores that means cents, and a flat multiply by 100 works. For a store selling in JPY, where the currency has no minor unit, the same multiply reports 100 times the real revenue, and every derived number follows it. A store selling in KWD has the opposite problem, because that currency carries three decimal places.
WeltPixel Conversion Tracking converts the amount per currency, with the zero-decimal and three-decimal currency sets handled explicitly per currency code, and takes both the amount and the currency code from the Shopify order record. If you are hand-rolling the send, unit-test that conversion first and the currency code second: an amount that is right against the wrong code is harder to spot in a report than a missing event.
What has to survive the trip from the click to the order?
The click identifier is the part that has to make the trip. OpenAI's Measurement Pixel captures an oppref value from the landing page URL, stores it in a first-party __oppref cookie that expires 30 days after each write, and keeps a browser reference in a __obref cookie that expires 365 days from creation [5]. The Conversions API page is direct about the division of labour: "Unlike the pixel, the API does not capture oppref for you" [4]. So a server-side send has to be handed the identifier by something.
In the app, the identifier comes from OpenAI's own cookie when it exists, so the value sent server-side matches the pixel's, from the current URL's parameter when it does not, and from the landing URL that Shopify recorded on the order when the browser never ran at all. That last path is what covers a shopper on a blocked browser or a session where the pixel never initialised, and it needs no work from you. Consent behaves the way it does across the app: browser events respect Shopify's Customer Privacy API signals, and on our Plus plan each server-side integration can optionally be set to skip visitors who explicitly declined marketing consent, a per-integration setting that is off by default.
If you want the ChatGPT Ads pixel and the Conversions API running before October campaigns start learning, with the purchase built from the Shopify order record and sent by the API, WeltPixel Conversion Tracking [9] covers both halves, including the click identifier recovery above and the minor-unit conversion, on our Plus plan.
FAQ
Can I switch an existing ChatGPT Ads campaign to conversion bidding later?
No. OpenAI states that an existing CPM or CPC campaign cannot be changed to oCPC, and that the campaign goal and selected conversion event cannot be changed after creation [1]. Plan the campaign around the conversion event you want before you create it.
Is there a test event tool for ChatGPT Ads conversions?
Not in the app for this channel. OpenAI documents a validation mode that does not save events and whose requests do not appear in event monitoring, plus a recent-events endpoint returning a sample from roughly the last 15 minutes [2][6]. Verification happens on those two surfaces plus the app's recent-events card.
How far back can I send conversions after fixing a broken setup?
Seven days, and only because of the ingestion limit: timestamp_ms must be within the last 7 days and no more than 10 minutes in the future [4]. Anything older has nowhere to land, and reporting only applies from attachment forward [3].
What attribution window does ChatGPT Ads use?
Click-through attribution follows the configured click window, and OpenAI's own setup example uses 30 days, with a fixed one-day view-through window that is supplemental [2][3]. CPA, post-click conversion rate and optimization remain based on click-through conversions [3].
Do I need the Conversions API if the pixel is installed?
OpenAI's own prerequisite list for conversion-optimized campaigns says the Conversions API is a more reliable tracking source than the pixel alone [1]. The pixel captures the click identifier for you, the API does not [4][5], so the two are set up together.
Sources
- OpenAI developer documentation, "Conversion-optimized campaigns" (conversion bidding prerequisite and the
403"Conversion bidding is not enabled" response; exactly one active standard conversion event as goal; custom events cannot be goals; "You cannot change an existing CPM or CPC campaign to oCPC"; "You cannot change the campaign goal or selected conversion event after creation"; Conversions API more reliable than the pixel alone), developers.openai.com/ads/conversion-optimized-campaigns, accessed September 21, 2026 - OpenAI developer documentation, "Conversion tracking" (setup sequence;
attribution_window_days: 30in the documented example; validation mode that does not save events and does not appear in event monitoring; recent-events endpoint), developers.openai.com/ads/conversion-tracking, accessed September 21, 2026 - OpenAI developer documentation, "Reporting" ("Reporting applies going forward from attachment"; daily processing and "Allow at least one day for conversion data to appear"; clicks and impressions within minutes; configured click window with the 30-day setup example; one-day supplemental view-through window; CPA and post-click conversion rate based on click-through conversions), developers.openai.com/ads/reporting, accessed September 21, 2026
- OpenAI developer documentation, "Conversions API" (
timestamp_ms"must be within the last 7 days and no more than 10 minutes in the future"; required fields; amount as an integer in the currency's minor unit with4200for $42.00; deduplication on Pixel ID,event_nameandidwith first arrival winning; "Unlike the pixel, the API does not captureoppreffor you"), developers.openai.com/ads/conversions-api, accessed September 21, 2026 - OpenAI developer documentation, "Measurement Pixel" (
opprefcaptured from the landing page URL; first-party__opprefcookie expiring 30 days after each write;__obrefbrowser reference expiring 365 days from creation), developers.openai.com/ads/measurement-pixel, accessed September 21, 2026 - OpenAI developer documentation, "Troubleshooting" (
GET /v1/conversions/eventsreturns a sample of recent events from roughly the last 15 minutes, useful for testing and troubleshooting; Insights for attributed and historical reporting), developers.openai.com/ads/troubleshooting, accessed September 21, 2026 - Search Engine Land, "ChatGPT ads are expanding to 31 European countries" (31 European countries; largest market expansion to date; ads shown to Free and Go users while Plus, Pro and Enterprise remain ad-free), searchengineland.com/chatgpt-ads-are-expanding-to-31-european-countries-485468, accessed September 21, 2026
- Search Engine Roundtable, "ChatGPT ads expand to Europe" (published August 19, 2026; ads in Europe shown only to Free and Go users while Plus, Pro and Enterprise remain ad-free; an update to the post relays a third-party report that Ads Manager in the EEA and Switzerland was coming September 4, 2026), seroundtable.com/chatgpt-ads-europe-41902.html, accessed September 21, 2026
- WeltPixel Conversion Tracking, Shopify App Store listing, apps.shopify.com/weltpixel-conversion-tracking, accessed September 21, 2026