Skip to content
Tech News
← Back to articles

How ChatGPT serves ads

read original more articles
Why This Matters

OpenAI has integrated targeted advertising into ChatGPT conversations, allowing brands to reach users seamlessly within the chat interface. This system uses structured ad units and tracking SDKs to deliver and monitor ads, blending advertising with conversational AI. The development signifies a new approach to personalized, context-aware advertising in AI-driven platforms, impacting both the tech industry and consumer experience.

Key Takeaways

OpenAI's ad platform has two halves. On the ChatGPT side, the backend injects structured single_advertiser_ad_unit objects into the conversation SSE stream while the model is responding. On the merchant side, a tracking SDK called OAIQ runs in the visitor's browser and reports product views back to OpenAI. The two are tied together by Fernet-encrypted click tokens, four of them per ad.

I captured both halves on a consented mobile-traffic research fleet. Everything below comes from observed traffic.

How an ad gets into a conversation

When you send a message to ChatGPT, the backend opens an SSE response at chatgpt.com/backend-api/f/conversation . Most events in that stream are model-output. Some are ad units. They look like this:

event: delta data: { "type": "single_advertiser_ad_unit", "ads_request_id": "069e89b3-c038-7764-8000-6e5a193e5f69", "ads_spam_integrity_payload": "gAAAAABp6Js_<...redacted...>", "preamble": "", "advertiser_brand": { "name": "Grubhub", "url": "www.grubhub.com", "favicon_url": "https://bzrcdn.openai.com/cabfae7ead26b03d.png", "id": "adacct_6984ed0ba55481a29894bb192f7773b4" }, "carousel_cards": [{ "title": "Get Chinese Food Delivered", "body": "Satisfy Your Cravings with Grubhub Delivery.", "image_url": "https://bzrcdn.openai.com/cabfae7ead26b03d.png", "target": { "type": "url", "value": "https://www.grubhub.com/?utm_source=chatgptpilot&utm_medium=paid&utm_campaign=diner_gh_search_chatgpt_kw_traffic_nb_x_nat_x&utm_content=nbchinese&oppref=gAAAA<...>&olref=gAAAA<...>", "open_externally": false }, "ad_data_token": "eyJwYXlsb2<...>" }] }

Notes:

single_advertiser_ad_unit is a typed schema. The naming implies siblings (multi-advertiser, etc.).

is a typed schema. The naming implies siblings (multi-advertiser, etc.). advertiser_brand.id is adacct_<32-hex> — a stable per-merchant account identifier.

is — a stable per-merchant account identifier. Brand favicon and ad image both load from bzrcdn.openai.com . OpenAI hosts the advertiser's creative, not the merchant.

. OpenAI hosts the advertiser's creative, not the merchant. target.open_externally: false opens the link in ChatGPT's in-app webview, so OpenAI observes the post-click navigation on top of any pixel signal.

... continue reading