OpenAI announced expansion to 31 European markets on 18 August 2026. Its 31 August update confirms self-service access. For an EU store, I check the billed entity’s country and then the measurement setup.
My custom build has three separate checks: consent, event receipt and attribution. Passing one does not prove the others.
The browser and server routes
The browser SDK sends events with oaiq("measure", ...). The server sends them to https://bzr.openai.com/v1/events with a Pixel ID and a server-only Conversions API key.
The API requires an event ID, type, timestamp and data object, with additional requirements by event type. It accepts up to 1,000 events per batch; one invalid event fails the batch. Timestamps must be within the last seven days and no more than ten minutes ahead.
I use one shared ID for the same action on both routes. With the same Pixel ID and event name, OpenAI keeps the first received event and ignores later duplicates. Custom events also need the same custom name.
Consent before collection
The pixel defaults to granted unless it finds a stored denial or receives an explicit denial. OpenAI documents oaiq("consent", false) before init, followed by true when permission is granted. Denied events are not replayed. Denial removes the attribution cookies.
For a setup that promises no OpenAI requests before consent, I also delay loading the SDK. Blocking measurement pings is narrower than blocking every network request.
The API has no dedicated consent field. Its opt_out flag concerns future user-level personalization. I gate server events myself and check withdrawal before queued events or retries leave the system.
Keep the click reference with the outcome
The pixel captures oppref from the landing URL. The API does not. I preserve the original value through the permitted session and send it on the server event.
The pixel requests a 30-day lifetime for __oppref and 365 days for __obref; browsers can shorten those. These are cookie lifetimes, not attribution windows. If I forward __obref, it goes unchanged into user.obref, subject to consent.
I follow OpenAI’s normalization rules before hashing supported customer identifiers. Geography, IP and user-agent fields use their documented raw formats. I send only the fields the agreed measurement setup permits.
Automatic advanced matching can detect supported customer information and hash it in the browser. The developer guide describes it conditionally. I could not confirm a blanket activation date of 17 August from the current primary pages, so I do not use that date as a fact.
EU targeting and Shopify
The custom-audiences guide says personalized ads are not yet available in the EEA and Switzerland, and custom audiences cannot target those markets. That does not replace the measurement consent gate.
OpenAI’s free Shopify app was listed on 3 September. Its Help page documents catalog sync and commerce events through OpenAI Pixel for Shopify, with current US availability and wider rollout planned.
The pages I read do not establish its full server-event coverage or handling of Shopify consent. I would verify those before deciding whether a custom integration is needed. Missing public detail is not proof that the app ignores consent.
Validate receipt, then reporting
My acceptance checks cover rejection, acceptance and withdrawal. I check SDK debug output and recent-event monitoring, then the campaign’s conversion configuration.
OpenAI’s primary pages disagree on view-through totals. The developer guides exclude them from Conversions; Help’s Measure Results includes eligible view-through events when the one-day reporting window is enabled. I record the selected columns and windows and reconcile click-through and view-through separately. I do not present either definition as settled.
I can build the measurement
The deliverable is consent handling, shared event IDs, preserved click references and reconciliation against actual outcomes. It belongs to my AI shopping channels work and the ChatGPT Ads measurement situation.
I built a demo with synthetic data that checks consent on both the browser Pixel and the order webhook, using one shared purchase ID. You can read the demo repository on GitHub; delivery is a dry run by default.
For organic ChatGPT referrals, use the GA4 and Shopify attribution guide. That is a separate measurement task.