Skip to content

Tracking & attribution engineeringCapability

Measuring ChatGPT (OpenAI) Ads: Pixel + Conversions API With Consent and Dedup

Build the OpenAI Ads pixel and a consent-gated server-side sender that share one event id, so a purchase is counted once and nothing leaves without consent.

For
ChatGPT Ads advertisers in the US, UK and Europe
Checked

Sounds familiar?

Tick what applies to you

The situation Tracking & attribution engineering
OpenAI Ads is new, and the measurement story is not settled yet.

Tick the lines that describe your case.

Describe my task

How I solve it

What I build

I build the pixel and the server leg together, on one identity. A browser event and a server event share a single event id, so the platform can drop the duplicate instead of double-counting. A consent gate decides whether an event is allowed to leave at all, and the server sender runs on infrastructure you control. The whole thing is small, testable, and separable from the rest of your stack.

ChatGPT Ads is no longer US-only. OpenAI launched it in the UK on 11 August 2026 and in 31 European countries in late August, Spain and the Netherlands among them.

Before building, I check what you already have. OpenAI publishes a free ChatGPT Ads app in the Shopify App Store, listed on 3 September 2026. It syncs your catalog into a ChatGPT Ads product feed and connects an “OpenAI Pixel for Shopify” that sends commerce events to Ads Manager. As of 2 October 2026, OpenAI’s pages don’t settle whether the app already works for UK and EU stores. OpenAI’s help centre also lists measurement partners: Fospha, Hightouch, INCRMNTAL, LiveRamp, Northbeam, Rockerbox, Triple Whale and WorkMagic. I build the part they leave out. OpenAI’s own advice for Shopify, headless and server-side purchases is the browser pixel plus the Conversions API, with oppref sent on the server events.

The process

How it works

6 steps. Scope and a fixed price are agreed before the first one.

  1. Confirm the pixel is installed and reads its consent default correctly before anything is sent. The pixel loads oaiq.min.js from bzrcdn.openai.com near the top of <head> and starts with oaiq("init", { pixelId }). It treats consent as granted unless you call oaiq("consent", false) first, so where consent is needed that call goes before init.

  2. Define the purchase event and the identity fields it will carry, matching the pixel and the server leg. A purchase is order_created, with the amount as an integer in minor units (4200 for $42.00), not Shopify's decimal total. The server leg sends email and phone as SHA-256 hashes. In the browser, automatic advanced matching does the hashing when it is enabled; OpenAI documents it as on for pixels created through its Ads API, so I check its state in your account.

  3. Add the server-side sender, gated by consent, with one shared event id for dedup. It posts to OpenAI's Conversions API at bzr.openai.com/v1/events with a key that stays on the server. The API has no consent field, so the gate sits in the sender. The pixel keeps the oppref click reference in a first-party __oppref cookie for 30 days; the API doesn't capture it, so the sender passes it with each server event.

  4. Test a full purchase end to end and confirm the platform records it once, with the right value and currency. OpenAI matches duplicates on Pixel ID, event name and event id (the pixel's event_id is the API's id).

  5. Add a small check that alerts you if the server leg stops delivering.

  6. Hand over the setup and a short note on what to watch as the product changes.

Handover

What you get

A server-side sender for OpenAI Ads conversions: a pixel and a server leg sharing one event id so nothing double-counts, a consent gate that decides when an event may leave, and a small tested module you can keep. For a single channel it lives as a small standalone sender next to the rest of your tracking.

Built with

  • OpenAI pixel (oaiq) and Conversions API
  • a consent layer
  • a small server module (I have used a Cloudflare Worker for the same pattern)
  • hashed identity fields
  • shared event ids for dedup
  • vitest tests

Proof

Done before, with dates and numbers

Capability Work I do; the proof below is from related projects.

Before → after

The closest live reference is a server-side build on another ad platform, the same technique this page is about. In that funnel the browser-only Lead event matched at 7.1, while the Calendly booking event — where the richer customer data sat — matched at 9.3, measured on 2026-05-27. The gap is the point: the booking step held the better data, and the server-side leg is what carries it into the conversion event.

  • Spanish 1:1 coaching business

    delivered 2026-06, 5★

    7.1 to 9.3

    a server-side booking Lead with a shared event id for dedup raised match quality from 7.1 to 9.3.

  • EU premium fashion brand, multi-currency

    active client

    37/37

    37 of 37 orders with matching receipts across 9 currencies; click-id coverage on one step moved from 11.8% to 78.9%.

Client words

No client words here. The live quotes I have are from Meta and Google Ads work, not from OpenAI Ads, and I will not present them as proof of this channel.

What you can look at

I built a demo with synthetic data that gives the browser Pixel and the order webhook one purchase ID, with consent checked on both routes. You can read the demo repository on GitHub; delivery is a dry run by default.

What you can check yourself is whether a ChatGPT Ads pixel loads on your store: the free AI Shopping Readiness Check reports it from outside.

I have no ChatGPT Ads client results yet. The figures above come from server-side work on other ad platforms, with client details anonymised.

Price and timeline

What it costs and how it runs

A Focused Fix is scoped and quoted in writing before any work starts. First I check what your pixel, the OpenAI app or a measurement partner already sends, so you pay only for the part that is missing.

QuoteFixed before work starts

Price
Focused Fix from USD 450 (package: OpenAI Ads tracking setup). Discussing the task is free.
Timeline
Focused Fix: scope and fixed price agreed in writing.
First step
Describe the task. I reply within one working day, free, and tell you which option fits — or that you can fix it yourself.
Describe a task like this

A note from Daniilbefore you decide

When you don’t need this

OpenAI Ads is early. If your store does not run it, this is not a reason to rebuild your tracking. If a connector such as OpenAI’s Shopify app or a listed measurement partner already sends your events once, with consent handled, you don’t need a custom sender. And if your problem is that the ad is bad, not the measurement, the sender will not fix that.

— Daniil

Questions

What people ask about this

Will this double-count my purchases?

No. The pixel and the server leg share one event id. OpenAI deduplicates on the Pixel ID, the event name and that id, keeps the first event it receives and ignores later duplicates. The test step confirms it, rather than assuming it.

What about consent in the EU?

The sender is gated: an event leaves only when your consent layer allows it. That matters here because OpenAI's pixel treats consent as granted unless you set it to false, and the Conversions API has no consent field of its own. What basis you rely on is a legal question for your counsel. This covers technical implementation, not legal advice.

Do I have to move off my current setup?

No. The sender is added for this one channel. The rest of your tracking is untouched.

Doesn't OpenAI's Shopify app already do this?

It may cover part of it. OpenAI's free ChatGPT Ads app for Shopify syncs your catalog into an ads product feed and connects an OpenAI pixel that sends commerce events to Ads Manager. OpenAI doesn't say whether it also sends server-side Conversions API events. I check what it sends in your account first and build only the part it leaves out.

Daniil Maximkin

Hi, I’m Daniil.

I work with you from defining the problem to implementation and handover. You talk to the person who does the work. I work in English and Russian.

Have a task like this?

Describe your task

The first answer is free, within one working day. Or write directly: next@taskfordaniel.com