ChatGPT serves ads. Here's the full attribution loop

· privacy web · Source ↗

TLDR

  • OpenAI injects structured ad objects into ChatGPT’s SSE stream and closes the attribution loop via a merchant-side tracking SDK called OAIQ.

Key Takeaways

  • Ad units arrive as single_advertiser_ad_unit delta events in the /backend-api/f/conversation SSE stream, separate from model output.
  • Four Fernet-encrypted tokens per ad: ads_spam_integrity_payload (server-side anti-fraud), oppref (30-day attribution cookie), olref (impression logging), and ad_data_token (SSE payload reconciled at click time).
  • Targeting is contextual per conversation: same account, six topics, six different brands including Grubhub, GetYourGuide, Canva, and Aritzia.
  • target.open_externally: false keeps post-click navigation inside ChatGPT’s in-app webview, giving OpenAI a second signal layer on top of the OAIQ pixel.
  • The OAIQ SDK (bzrcdn.openai.com/sdk/oaiq.min.js v0.1.3) reads ?oppref= from the merchant landing page, writes it to __oppref with a 720-hour TTL, and POSTs events to bzr.openai.com/v1/sdk/events.

Hacker News Comment Review

  • Commenters immediately flagged that separate SSE events make ad blocking straightforward today, but expect the easy window to close once ads are folded into the main model response stream.
  • Tone across comments is uniformly negative: words like “gross” and “enshitification” dominate, with no commenter defending the move or offering a neutral technical read.
  • One commenter floated a friction-monetization scenario (watch an ad to unlock a longer context window), which reflects broader anxiety about where the incentive structure goes next.

Notable Comments

  • @WD-42: notes that distinct SSE events make blocking trivial now, but “once the ads are injected directly into the main response is when things get interesting.”
  • @gxs: “it feels like we’ve been in the golden age and the window is coming to a close.”

Original | Discuss on HN