Il pixel pubblicitario di ChatGPT e il cookie __obi
- Distinguere i tre cookie dello stack pubblicitario di OpenAI — due sul dominio dell'inserzionista, uno su .openai.com — e capire perché solo il terzo ti collega
- Seguire il flusso di sync: un JWT RS256 con validità di 60 secondi emesso da ChatGPT e inviato in POST cross-site a un collector che imposta la chiave di join
- Capire perché il "rifiuta marketing" di un banner cookie può lasciare tutto attivo, e perché la chiamata di consenso dell'inserzionista non può disattivarlo
- Vedere cosa raccoglie l'Automatic Advanced Matching da una pagina che nessuno gli ha chiesto di leggere — e quali campi, secondo la documentazione di OpenAI stessa, viaggiano in chiaro
- Sapere esattamente dove il meccanismo non funziona (e perché un iPhone è un modello di minaccia diverso da un Android)
- Controllare il tuo browser in cinque minuti e mettere in sicurezza il tuo pixel con due impostazioni
Il modello mentale che quasi tutti hanno degli annunci in ChatGPT è una scatola: gli annunci compaiono dentro ChatGPT, personalizzati in base a ciò che hai detto dentro ChatGPT, e la scatola ha un muro intorno. Gli inserzionisti comprano posizionamenti; non vedono mai le tue conversazioni. Questa parte è vera, e OpenAI lo dice chiaramente.
La parte interessante è quella fuori dalla scatola. OpenAI distribuisce anche un pixel di misurazione che gli inserzionisti installano sui propri siti, come fanno con quello di Meta o di Google. I pixel di misurazione hanno bisogno di una chiave di join: un identificatore che dica il browser che ha visto l'annuncio è lo stesso browser arrivato al checkout. A settembre 2026 un ricercatore indipendente ha tracciato come viene creata quella chiave di join, e si scopre che viene emessa da ChatGPT stesso, consegnata a un collector pubblicitario di OpenAI e poi trasportata dal tuo browser verso ogni sito di inserzionista che esegue il pixel.
Il flusso non è una fuga di dati né un bug. È una pipeline di misurazione pubblicitaria progettata così — la stessa forma che Meta e Google usano da un decennio. Ciò che rende la cosa degna di una pagina è una scelta di progettazione specifica sulla classificazione del consenso, più un default attivato ad agosto 2026 che ha silenziosamente trasformato molti siti di inserzionisti in raccoglitori di identità.
Tre cookie, due domini
Leggendo la copertura mediatica, vedrai __obi, __obref e __oppref usati quasi in modo intercambiabile. Sono tre cose diverse con tre profili di privacy diversi, e confonderle è il modo in cui si finisce o per esagerare la reazione o per rassicurarsi con il controllo sbagliato.
| Cookie | Impostato su | Impostato da | Durata | Cos'è |
|---|---|---|---|---|
__oppref | il dominio dell'inserzionista | l'SDK del pixel | 30 giorni da ogni scrittura | ID di attribuzione catturato dall'URL della landing page. Normale tracciamento dei click. |
__obref | il dominio dell'inserzionista | l'SDK del pixel | 365 giorni | Un riferimento casuale del browser, limitato a quel singolo inserzionista. |
__obi | .openai.com | bzr.openai.com | 365 giorni (Max-Age=31536000) | La chiave di join cross-site. HttpOnly, Secure, SameSite=None. |
I primi due sono documentati da OpenAI nella documentazione pubblica per inserzionisti. Sono first-party rispetto all'inserzionista e, da soli, non ti collegano tra siti diversi — la cattura del ricercatore lo conferma: 2.828 dei 2.860 valori __obref osservati comparivano sotto esattamente un inserzionista, che è l'aspetto che dovrebbe avere un cookie per sito.
__obi è quello che non è per sito. Vive su .openai.com con SameSite=None, che è esattamente la configurazione che permette a un browser di allegarlo a richieste effettuate dalla pagina di qualcun altro. Dei 30 valori __obi distinti osservati dal ricercatore, 12 comparivano sotto più di un inserzionista — uno di essi sotto dieci. Questo è il grafo cross-site, misurato.
★ __obi è HttpOnly. Nessun JavaScript su nessuna pagina può leggerlo, incluso quello del pixel. Sembra protettivo e per lo più non lo è: il browser lo allega automaticamente alle richieste dirette a bzr.openai.com, quindi il pixel non ha mai bisogno di leggerlo. HttpOnly impedisce agli script di pagina di rubare l'identificatore; non fa nulla per impedire che l'identificatore venga usato.
Come viene costruito il join
- Il client web di ChatGPT genera 16 byte casuali e invia un POST a /backend-api/bazaar/obi/sync-token su chatgpt.com — oppure a /backend-anon/… quando non hai fatto il login. La risposta è un JWT RS256 con scadenza di 60 secondi.
- I claim decodificati includono iss: "chatgpt-wadi", aud: "bzr.openai.com", purpose: "obi_sync", un identificatore obi di 22 caratteri, un sub che contiene un identificatore di account di 64 caratteri esadecimali, un subject_type pari a account_user oppure anonymous e — il claim su cui ruota tutta questa pagina — consent_decision: "analytics_allowed".
- Il JWT viene inviato in POST cross-site a bzr.openai.com/v1/obi/sync ("bzr" si ritiene sia un nome interno, Bazaar). La risposta porta Set-Cookie: __obi=…; Domain=.openai.com; HttpOnly; Max-Age=31536000; Path=/; SameSite=none; Secure.
- Qualsiasi pagina che esegue il pixel carica bzrcdn.openai.com/sdk/oaiq.min.js e invia in POST gli eventi di conversione a bzr.openai.com/v1/sdk/events. Poiché quelle richieste sono dirette a openai.com, il browser vi allega __obi. La pagina dell'inserzionista non tocca mai il cookie; si limita a innescare la richiesta.
Dei 932 token di sync decodificati dal ricercatore, 736 portavano subject_type: account_user e 196 erano anonimi. Quindi in circa quattro sync osservati su cinque, l'identificatore piantato era stato emesso nel contesto di un account ChatGPT loggato.
L'autore è prudente su cosa questo dimostri e cosa no, e dovresti esserlo anche tu: il collegamento da __obi all'account è stato dedotto dal design del token, non osservato direttamente. Ciò che si osserva è che ChatGPT emette un token legato a un account, un collector lo converte in un cookie cross-site di lunga durata, e quel cookie compare poi sotto più inserzionisti non collegati tra loro.
La classificazione del consenso è tutta la storia
Ecco la parte che rende questo caso diverso da "anche Meta ha un pixel".
La cookie policy di OpenAI elenca __obi sotto analytics. I cookie di misurazione delle campagne di Google, Meta, LinkedIn, TikTok, Reddit e Microsoft stanno sotto marketing nella stessa interfaccia. Il JWT che innesca il sync porta consent_decision: "analytics_allowed" — non un consenso marketing.
Segui la conseguenza attraverso un normale banner cookie europeo:
- Clicchi su "Rifiuta marketing, consenti analytics" — una scelta che fa un'ampia fetta di utenti attenti alla privacy, e che molte piattaforme di consenso presentano come la via di mezzo sensata.
- Il consenso analytics viene concesso, quindi il token di sync viene emesso.
__obiviene piantato su.openai.comper un anno.- Ogni pixel di inserzionista che incontri successivamente lo riceve.
Hai rifiutato la categoria a cui il comportamento appartiene, e il comportamento è avvenuto lo stesso, perché era archiviato sotto una categoria diversa. Il ricercatore ha chiesto a OpenAI esattamente questo — perché __obi è classificato come analytics, e se gli utenti che rifiutano il consenso marketing lo ricevano comunque — via mail a press@openai.com e privacy@openai.com il 2026-09-14. Il supporto di OpenAI ha confermato la ricezione della richiesta e non ha risposto a nessuna delle due domande.
★ L'interruttore di consenso dell'inserzionista non può aiutarti. La documentazione di OpenAI fornisce agli inserzionisti oaiq("consent", false), che "rimuove entrambi i cookie" — cioè __obref e __oppref, i due sul dominio dell'inserzionista. Non ha alcuna presa su .openai.com. Un sito che blocca il pixel in modo impeccabile dietro il proprio CMP sta bloccando i due cookie che non erano mai stati il problema di tracciabilità.
Esiste un controllo separato e reale dentro ChatGPT: Impostazioni → Controlli dei dati → Privacy marketing, riportato come attivo per impostazione predefinita sugli account gratuiti e disattivo su quelli a pagamento. Considera la sua relazione con __obi come irrisolta: l'indagine non ha verificato se disattivarlo fermi il sync, OpenAI non ha risposto quando le è stato chiesto, e un'impostazione etichettata marketing che governa un cookie archiviato come analytics è esattamente lo scollamento in discussione. Disattivalo — è l'interruttore giusto a cui pensare — ma non dare per scontato che sia quello che ferma il comportamento sulla rete finché qualcuno non cattura il traffico con l'impostazione disattivata.
Automatic Advanced Matching: il pixel legge la pagina
Il problema di un pixel di conversione è che gli identificatori di click spariscono — bloccati, rimossi, o persi in un redirect. La risposta del settore è l'advanced matching: inviare identità in forma hash insieme all'evento, così la piattaforma pubblicitaria può fare il join su quella. Meta lo offre da anni. La versione di OpenAI ha una particolarità che vale la pena conoscere.
L'Advanced Matching Automatico (AAM) non aspetta che l'inserzionista passi qualcosa. La documentazione di OpenAI dice che il pixel "rileva automaticamente le informazioni cliente supportate dal tuo sito web". La cattura del ricercatore mostra quattro fonti di raccolta etichettate:
| Etichetta | Fonte | Come ottiene il valore |
|---|---|---|
in | Fornito dall'inserzionista | Il sito lo passa deliberatamente |
fm | Campi di form | Estratto da input riconoscibili nella pagina |
ht | Testo della pagina | Ricavato dal contenuto renderizzato |
js | Tag manager | Letto da window.dataLayer, dal data layer di Adobe o da layer GTM rinominati |
Negli eventi osservati, l'identità estratta automaticamente ha superato quella fornita dall'inserzionista 685 a 255. Il pixel, la maggior parte delle volte, raccoglieva cose che nessuno gli aveva chiesto di raccogliere.
Hash contro chiaro — direttamente dalla documentazione di OpenAI. Email, telefono, ID esterno, nome e cognome vengono normalizzati e sottoposti a SHA-256 nel browser. Paese (codice ISO), regione, città e codice postale sono elencati come campi in chiaro. L'affermazione di OpenAI secondo cui "le informazioni cliente grezze non vengono inviate a OpenAI tramite l'automatic advanced matching" è limitata all'insieme dei dati identitari; la geografia non è in quell'insieme. La cattura conferma: il codice postale è stato il campo di form più raccolto, 100 eventi su 28 siti, senza hash.
Esiste una denylist — OpenAI esclude password, codici monouso, numeri di carta, codici fiscali/SSN, date di nascita, anamnesi, diagnosi e campi giudiziari. È una mitigazione reale e va riconosciuta. È anche una denylist, il che significa che protegge le categorie a cui qualcuno ha pensato.
L'identità non è l'unico payload. Gli eventi trasportano anche il percorso URL della pagina che li ha generati — pagine prodotto, URL di articoli, passaggi di checkout — con i termini di ricerca nella query string riportati come rimossi. Per un retailer questo significa gli articoli specifici che hai guardato; per un editore significa gli articoli specifici che hai letto.
★ Il default è cambiato il 2026-08-17. L'AAM era già il default per i nuovi pixel Web creati; quel giorno OpenAI lo ha attivato anche sui pixel esistenti, con logica di opt-out invece che di opt-in. Il ricercatore ha trovato l'AAM attivo su 638 pixel su 881 di cui erano visibili le impostazioni. Se hai installato un pixel OpenAI all'inizio del 2026 e non l'hai più toccato, ad agosto il tuo sito ha iniziato a raccogliere campi di form senza alcun deploy da parte tua.
Dove non funziona
Questo non è un tracker universale, e le eccezioni contano più del solito:
- Chrome per Android — la piattaforma su cui il ricercatore lo ha riprodotto. Interessata.
- Safari, e Chrome su iOS — non interessati. L'Intelligent Tracking Prevention di Safari blocca il cookie di terze parti, e ogni browser iOS gira su WebKit, quindi "Chrome su iPhone" eredita lo stesso blocco. Un utente iPhone e un utente Android sono davvero in modelli di minaccia diversi qui.
- Chrome desktop — non testato nel lavoro pubblicato. Ignoto, non sicuro.
- La copertura è comunque parziale. Solo circa il 20% delle sessioni ChatGPT osservate ha prodotto un token di sync; il client web mobile serve annunci senza sincronizzare. Qualunque grafo esista è rado, non totale.
Quest'ultimo numero taglia in due sensi. Significa che l'identificatore è tutt'altro che universale — e significa che "ho controllato una volta e non ho visto nulla" non è prova di assenza.
Controlla il tuo browser
Cinque minuti, senza strumenti oltre ai DevTools. Fallo su Chrome per Android se vuoi vedere il meccanismo in azione.
Cerca prima il sync, poi il cookie
# 1. Open ChatGPT with DevTools → Network, filter: obi # Look for a POST to: # /backend-api/bazaar/obi/sync-token (logged in) # /backend-anon/bazaar/obi/sync-token (logged out) # then a cross-site POST to: # https://bzr.openai.com/v1/obi/sync # 2. Paste the JWT from the sync-token response into a local decoder. # You are looking for these claims: # iss: "chatgpt-wadi" aud: "bzr.openai.com" # purpose: "obi_sync" consent_decision: "analytics_allowed" # subject_type: "account_user" | "anonymous" # 3. Application → Cookies → https://chatgpt.com # Look for __obi on domain .openai.com, Max-Age 31536000, # HttpOnly, Secure, SameSite=None. # 4. Now visit a retailer that runs the pixel and filter for: # bzrcdn.openai.com/sdk/oaiq.min.js # bzr.openai.com/v1/sdk/events # Check the Cookies tab of that events request: __obi riding along # is the cross-site join, observed on your own machine.
Decodifica il JWT in locale. Incollare un token che contiene un sub legato a un account in un decoder web consegna quell'identificatore a una terza parte — un modo leggermente assurdo di concludere un'indagine sulla privacy.
Se gestisci il pixel
Qui sei titolare del trattamento in un modo che lo snippet di installazione del pixel non rendeva ovvio. Due impostazioni e un'abitudine:
- Ads Manager → Tools → Conversions → Data Source → Edit pixel, poi disattiva Automatic Advanced Matching (oppure conferma che lo vuoi attivo). L'impostazione è per pixel — se ne gestisci diversi, ne cambi diversi. Dal 2026-08-17 il default è attivo, quindi l'inazione è una decisione.
- Verifica che la tua piattaforma di consenso impedisca davvero il caricamento dello script prima del consenso, invece di chiamare oaiq("consent", false) a posteriori. E conosci il limite: quella chiamata rimuove __obref e __oppref, entrambi sul tuo dominio. Non può rimuovere __obi da .openai.com.
- Carica una pagina di checkout o di registrazione con i DevTools aperti, invia dati di prova e leggi il payload dell'evento diretto a bzr.openai.com. Conferma quali dei tuoi campi sono stati raccolti dai collector fm e ht. I campi che non avevi mai pensato come segnale pubblicitario — un codice postale, un campo di testo libero di un form di supporto — sono quelli da cercare.
- Se l'AAM è attivo, il tuo sito trasmette a OpenAI identità cliente in forma hash e geografia in chiaro. Questo va nella tua privacy policy e nel tuo registro dei trattamenti, indipendentemente dal fatto che il CMP sia configurato correttamente.
★ Hash non significa anonimo. Lo SHA-256 di un indirizzo email è un identificatore deterministico: chiunque possieda la stessa email calcola lo stesso digest. Questo è esattamente il punto — è così che funziona il join. Tratta l'identità in forma hash come dato personale pseudonimizzato nella tua analisi di conformità, non come dato de-identificato.
Se usi soltanto ChatGPT
- Disattiva Impostazioni → Controlli dei dati → Privacy marketing. È l'interruttore giusto a cui pensare; l'effetto su
__obinon è confermato, come sopra. - Usa il gestore dei cookie, non solo l'impostazione dell'account — per la navigazione non autenticata, il link a piè di pagina "Gestisci cookie" / "Le tue scelte sulla privacy" è l'unica superficie che hai.
- Invia il Global Privacy Control. OpenAI dichiara di rispettare il GPC come segnale di opt-out legalmente valido. Firefox e Brave lo inviano nativamente; per Chrome esistono estensioni. È un segnale leggibile da una macchina con peso normativo alle spalle in California e in diverse altre giurisdizioni.
- La scelta del browser è un controllo reale qui. Safari blocca il meccanismo oggi. Non è un argomento per cambiare browser per un cookie — è un promemoria del fatto che la policy sui cookie di terze parti pesa sulla tua postura di privacy più di qualsiasi interruttore tu possa trovare in una schermata di impostazioni.
Cosa è effettivamente accertato e cosa no
Vale la pena tenerlo distinto, perché la copertura mediatica confonde le cose:
Accertato tramite cattura: gli endpoint, gli attributi del cookie, i claim del JWT incluso consent_decision, le quattro fonti di raccolta, la separazione campo per campo tra hash e chiaro (che la documentazione di OpenAI conferma), i conteggi — 936 pixel su 1.029 hostname, 12 valori __obi su 30 sotto più inserzionisti, 638 pixel su 881 con AAM attivo.
Dedotto, ed etichettato come tale dall'autore: che __obi venga ricollegato lato server a un account ChatGPT. Il design del token va in quella direzione; il collegamento non è stato osservato.
Senza risposta da OpenAI: perché __obi è classificato come analytics, e se rifiutare il consenso marketing produca comunque il sync.
Non testato: Chrome desktop, e se l'interruttore Privacy marketing fermi il comportamento sulla rete.
Verifica te stesso
0/5Fonti e approfondimenti
- Buchodi — "ChatGPT now knows what you do on other websites via ad collector" — l'indagine originale: endpoint, claim del JWT, attributi dei cookie, etichette delle fonti di raccolta e i conteggi citati in tutta questa pagina. Include i limiti dichiarati dall'autore stesso.
- daily.dev — "ChatGPT now knows what you do on other websites via ad collector" — la voce dell'aggregatore per la notizia arrivata in prima pagina su Hacker News il 2026-09-21.
- OpenAI Developers — Ads: Measurement Pixel — documentazione ufficiale di
__obref/__oppref, l'elenco dei campi con hash SHA-256, i campi geografici in chiaro eoaiq("consent", false). - OpenAI Developers — Ads — la superficie di prodotto rivolta agli inserzionisti a cui il pixel appartiene.
- OpenAI Help Center — Conversion Measurement — la descrizione di OpenAI dell'Automatic Advanced Matching e il percorso dell'impostazione per pixel.
- OpenAI Help Center — Ads in ChatGPT — i controlli rivolti all'utente, incluso Impostazioni → Controlli dei dati → Privacy marketing.
- Cybersecurity News — "ChatGPT Ad Tracking Cookie Follows Users Across Third-Party Advertiser Websites" — resoconto indipendente con il dettaglio degli attributi dei cookie.
- Global Privacy Control — il segnale del browser che OpenAI dichiara di rispettare come opt-out valido.
Prossimi passi
- Cosa carica davvero il tuo agente di coding — la stessa domanda un livello più sotto: misurare il traffico in uscita invece di fidarsi di un interruttore di privacy.
- Sign in with ChatGPT — l'altro punto in cui l'identità del tuo account OpenAI lascia openai.com.
- I browser agentici rompono la same-origin policy — cosa succede quando ciò che trasporta i tuoi cookie è un agente e non tu.