GUIDE

ChatGPT Ads conversion tracking on Shopify

ChatGPT Ads shows clicks, but your Shopify orders do not show up as conversions. OpenAI counts a purchase only when something on your side sends it: a pixel in the shopper's browser, or a server calling its Conversions API. Below: what a purchase event must carry, how to count each purchase once, and how to check that purchases arrive.

How ChatGPT Ads counts a purchase

OpenAI's Measurement Pixel sends events from the visitor's browser. The Conversions API complements it: your server sends the same kind of event directly to OpenAI. OpenAI's documentation says to call the Conversions API from your server only, with your data source ID (OpenAI's documentation also calls it the Pixel ID) and a Conversions API key, both provisioned from the Conversions tab in OpenAI Ads Manager.

Two identifiers tie a purchase to an ad:

  • oppref: an opaque attribution identifier provided by OpenAI, which supports click matching. OpenAI's doc says that, unlike the pixel, the API does not capture oppref for you. The sender has to capture the value itself and pass it, unchanged, with the server event.
  • The __obref cookie: a first-party cookie set by OpenAI's pixel, read in the browser and sent with the server event.

A server-side sender for Shopify has two jobs: read these values while the shopper is on your store, and keep them with the order until the purchase is sent.

Your options on Shopify

OptionWho sends purchasesSetupWhat you see per order
OpenAI's pixel as a custom pixelThe shopper's browserPaste code into a custom pixel in your Shopify adminOpenAI's totals in Ads Manager
An appThe app's serverInstall and connectDepends on the app
Your own serverCode you hostA developer builds and runs itWhat you build

A custom pixel. Shopify's help says custom pixels load in a sandbox, that not all pixel functionality works there, and that adding and using custom pixels is unsupported by Shopify. A browser pixel also reports only what reaches the browser: a closed tab or a blocked script means no purchase.

An app or your own server. Both send purchases from a server, after the order is paid. Your own server gives full control and needs a developer to keep it working with OpenAI's API. The same server-side idea applies to Meta; see how the Meta Conversions API works on Shopify and the wider guide to Shopify server-side tracking.

What a purchase event needs

From OpenAI's Conversions API documentation:

  • The event type. OpenAI's list of types includes order_created, the one its examples use for an order.
  • An id: a non-empty string that identifies the event. A value unique to the order, such as its order ID, fits.
  • timestamp_ms: within the last 7 days and no more than 10 minutes in the future. Older events are refused.
  • source_url, required for web events.
  • The amount in minor units. amount is an integer in the currency's standard minor unit: 4200 with USD means $42.00. A three-letter ISO 4217 currency code is required when an amount is present.
  • Products, as contents items with an ID, name, quantity and per-unit amount.
  • Customer details as hashes: e-mail, phone, external ID and names, each normalised, then hashed with SHA-256 and sent as a lowercase 64-character hex string. An e-mail is trimmed and lowercased; a phone number keeps its country code and loses formatting, the leading + and leading zeroes. Country and IP address go unhashed.

Two limits to know: a request can carry up to 1,000 events, and if one event in the batch fails, the full batch fails. Each identifier list holds at most three values; more returns an error, and OpenAI does not truncate them.

Count each purchase once

If both a browser pixel and a server send the same purchase, OpenAI has to recognise them as one. Its doc says to reuse the same value as the API id and the pixel event_id, and to reuse the same id when retrying. OpenAI then keeps the first event it receives for a matching key and ignores later duplicates.

What that means for your store:

  • keep one server sender for purchases;
  • if you keep a pixel purchase event, it must send the same ID as the server for that order;
  • if your server sender does not share IDs with your pixel, remove the pixel's purchase event, or the same purchase is counted twice.

Consent and the opt-out flag

A server has to follow the buyer's consent choice, the same as a pixel. OpenAI's API has an opt_out field: true opts the event out of future user-level personalisation. OpenAI's doc also says it does not use data collected through the Conversions API for user-level personalisation. The flag does not replace consent: a buyer who declined marketing should not be sent at all. How Tikra applies consent to each platform is in Tikra's consent modes.

How to check it works

  1. 1Test without touching your reports. OpenAI's API has a validate_only flag that validates events without saving them. Use it to check the format, the key and the data source ID.
  2. 2Wait for a real paid order. The real check is a purchase a customer paid online.
  3. 3Compare counts. In OpenAI Ads Manager, read the conversions reported for your data source for one day. Compare them with your paid online orders in Shopify for the same day, and with what your sender reports it sent. A count above the orders your sender sent usually means a second sender.
  4. 4Read one order. Check that the event carried the order ID, the value in minor units, the hashed e-mail and, when the shopper came from an ad, the oppref.

Or let Tikra send it for you: install from the Shopify App Store

How Tikra sends it

Tikra is a Shopify app that sends your paid online orders to ChatGPT Ads through OpenAI's Conversions API, as purchases. You connect it with two things from the Conversions tab in OpenAI Ads Manager: your data source ID and a Conversions API key. The steps are in Connect ChatGPT Ads.

  • One purchase for each order it sends, with the order ID, time, value, currency and products; the buyer's e-mail, phone and customer ID as hashes; country, IP address, browser and the page address of the order; and OpenAI's own browser cookie and click ID when Tikra reads them.
  • Consent your way. ChatGPT Ads is a marketing platform in Tikra, so your consent mode decides which orders it gets. An order your mode lets through without a clear marketing consent goes with OpenAI's opt-out flag. A refusal, or an opt-out of the sale or sharing of data, stops it.
  • A check on connect. During setup Tikra sends with OpenAI's validate-only flag, so nothing is saved in your reports.
  • One sender. Remove your own OpenAI pixel from the store when Tikra goes live for ChatGPT Ads, or the two count the same purchase twice. The card asks you to confirm this.
  • A record for each order. The Orders page shows what was sent, when and OpenAI's answer, or why an order was not sent, for example an order paid more than 7 days ago. See reading an order's proof.
  • More than ChatGPT Ads: the same orders to Meta, Google Analytics 4, Google Ads, TikTok, Pinterest, Snapchat and Klaviyo.
  • A guarantee: a written guarantee for eligible orders: at least 97 % reach each platform, fixed within 12 hours or a month's fee credited (Terms, section 8) Terms apply.

Tikra costs from $99 a month, 500 orders, with a 14-day free trial that starts when you choose your first plan.

Frequently asked questions

Does Shopify send purchases to ChatGPT Ads on its own?

Not found in Shopify's help. Stores add OpenAI's pixel as a custom pixel, use an app, or run their own server.

Do I need the OpenAI pixel and the Conversions API?

OpenAI describes the Conversions API as a complement to its Measurement Pixel. If you run both for purchases, both must send the same ID for each order. If your server sender does not share that ID, keep one sender for purchases.

Why does the server need to store oppref?

OpenAI's doc says the API does not capture oppref for you. The value is available while the shopper is on your store, so the sender must read it then and pass it with the purchase later.

Will ChatGPT Ads count my purchases twice?

It keeps the first event for a matching key and ignores later duplicates. Two senders with different IDs for the same order are not matched, so the purchase is counted twice.

How old can a purchase be?

OpenAI accepts events from the last 7 days. An order paid earlier cannot be sent.

How do I know purchases arrive?

Use the validate-only test first, then compare OpenAI Ads Manager's conversions for a day with your paid orders and with your sender's own record for that day.

Check your store

Install Tikra and connect ChatGPT Ads

Check that your tracking works

Related: Shopify server-side tracking · Meta Conversions API on Shopify · Shopify conversion tracking

OpenAI and ChatGPT are trademarks of OpenAI, which does not endorse Tikra.

Sources, checked 2026-11-08

  • OpenAI, Conversions API: https://developers.openai.com/ads/conversions-api
  • Shopify Help Center, Custom pixels: https://help.shopify.com/en/manual/promoting-marketing/pixels/custom-pixels