NEWS

OpenAI uses ad cookie to link external browsing to ChatGPT accounts

A study by Buchodi's Threat Intel shows how the __obi cookie, classified as 'analytics' by OpenAI, leaves ChatGPT and returns from partner sites carrying the user's browsing and purchase data.

OpenAI uses ad cookie to link external browsing to ChatGPT accounts
Image: Redação iMasters

A technical study published by the newsletter Buchodi's Threat Intel describes how OpenAI runs a cross-site tracking mechanism that links a user's browsing on third-party pages to their ChatGPT account. Researcher Jamie Larson reproduced the entire flow on an Android phone, validated it with two independent traffic capture methods, and cross-checked the data against months of observed traffic covering 936 distinct advertiser pixels across 1,029 domains. The full report is available at Buchodi's Threat Intel.

The mechanism is named __obi, a cookie scoped to .openai.com that originates inside ChatGPT itself and is sent back to OpenAI when the user visits advertiser sites running the company's measurement pixel, the same model used by Meta and Google for years. The difference, according to the researcher, is running this engineering on top of a chat product that receives far more sensitive information than a social network.

How the token is born inside ChatGPT

The process starts on chatgpt.com itself. The client generates 16 random bytes and calls POST /backend-api/bazaar/obi/sync-token (or the /backend-anon/ route when the user is logged out). The backend returns a JWT signed with RS256:

{
 "iss": "chatgpt-wadi",
 "aud": "bzr.openai.com",
 "purpose": "obi_sync",
 "operation": "set",
 "consent_decision": "analytics_allowed",
 "consent_policy_version": "user_granular_consent_v1",
 "sub": "«64-hex subject, the account»",
 "obi": "«22-character identifier»",
 "exp": "«iat + 60s»"
}

bzr is the internal name of OpenAI's ad platform ("bazaar"); wadi is the service that issues the token. The sub field is the user's account, obi is the tracking identifier, and the token expires in 60 seconds, enough to bind the two values and send them to the collector's domain. The client then makes a cross-site POST to bzr.openai.com/v1/obi/sync with that token, and the response sets the cookie:

Set-Cookie: __obi=«value»; Domain=.openai.com; HttpOnly;
 Max-Age=31536000; Path=/; SameSite=none; Secure

The SameSite=none setting combined with Secure is exactly what a cookie needs to be sent on third-party requests. It's the only way to guarantee it comes back when the browser loads a script on another domain. According to the study, __obi is the only OpenAI identifier configured this way: every other cookie from the company (oai-did, oaicom-stable-id, session cookies) was blocked on the same requests, either by SameSite=Lax or by domain mismatch.

What comes back from partner sites

Any company that buys ads on ChatGPT installs a small piece of OpenAI code on its own site, oaiq.min.js, hosted at bzrcdn.openai.com, following the same pattern as Meta and Google's pixels. When that tag loads, the browser already attaches the __obi cookie to the very

Translated from the Brazilian Portuguese original · Read the original