What Your AI Chat Leaks to Ad Trackers
- Name the artifact class that is unique to conversational AI — conversation URLs, titles, prompts and screenshots — and why it is far worse than ordinary web tracking
- Recognise the three mechanisms (server-side tag managers, first-party-proxied analytics, mobile WebViews) that make an ad blocker irrelevant here
- Read the consent numbers honestly: what rejecting non-essential cookies actually removes, and what it does not
- Understand why a conversation permalink is not an access control, and what the canary-token experiment proved
- Run a 20-minute self-audit of any assistant you use, and apply the handful of settings changes that measurably matter
The study, in one paragraph
Nine researchers, mostly at IMDEA Networks in Madrid, took the nine
most-used conversational AI services and instrumented them the way the mobile-tracking
research community instruments any app: Chrome v148 driven through the Chrome DevTools
Protocol with full HAR capture for the web clients, and a Google Pixel 3a running an
instrumented Android 12 AOSP build with mitmproxy and Frida for the eight that ship an
Android app — plus static decompilation with Androguard to enumerate embedded SDKs. Every
session was driven by hand with a fixed, deliberately sensitive persona script (a user asking
about a medical condition), repeated across guest / free / paid tiers and across three consent
states: ignore the banner, reject non-essential cookies, accept everything. Measurements were
taken in Spain in May 2026. The paper was accepted at PoPETs — the peer-reviewed venue for
privacy technology — and the authors ran a responsible-disclosure process with the providers
and with European data protection authorities before publishing.
That methodology matters because it is the difference between "someone found a Meta pixel on a page" and a defensible claim about what is transmitted, under which consent state, on which tier, to whom.
| Service | Provider | Web domain | Android package | Tranco rank | Play installs |
|---|---|---|---|---|---|
| ChatGPT | OpenAI | chatgpt.com | com.openai.chatgpt | 48 | over 1B |
| Claude | Anthropic | claude.ai | com.anthropic.claude | 617 | over 10M |
| Grok | xAI | grok.com | ai.x.grok | 956 | over 100M |
| DeepSeek | DeepSeek | chat.deepseek.com | com.deepseek.chat | 1,196 | over 50M |
| Perplexity | Perplexity AI | perplexity.ai | ai.perplexity.app.android | 1,249 | over 100M |
| Gemini | gemini.google.com | com.google.android.apps.bard | 6,045 | over 1B | |
| MS Copilot | Microsoft | copilot.com | com.microsoft.copilot | 11,011 | over 50M |
| Le Chat | Mistral AI | chat.mistral.ai | ai.mistral.chat | 12,039 | over 1M |
| Meta AI | Meta | meta.ai | com.facebook.stella | 13,701 | over 50M |
The headline numbers
- Every one of the nine services contacts at least one third-party advertising or tracking service. There is no clean provider in the set.
- 124 distinct third-party domains, attributed to 44 organisations, 34 of which are advertising or tracking services.
- 6 of 9 web clients and 3 of 8 Android clients leak conversation-derived artifacts — URLs, titles, prompts, screenshots — to 11 and 2 tracking organisations respectively.
- 5 web clients disclose conversation permalinks (or the identifiers needed to rebuild them) to 9 tracking organisations. Three of those five do it by default, with no consent needed.
- 3 of 9 web clients leak the auto-generated conversation title to 9 third parties including Meta, TikTok and DoubleClick.
- Rejecting non-essential cookies leaves 80.8% of third-party trackers still active.
Third-party integration is not the same set on web and on mobile: 11 tracking organisations appear on both client types, 15 are web-only (including Google Tag Manager, TikTok and the consent-management platform OneTrust), and 8 are mobile-only (including Braze). Auditing the website therefore tells you very little about the app, and vice versa.
Why conversation artifacts are a different problem
Ordinary web tracking observes behaviour: which page you loaded, how long you stayed, what you clicked. Conversational AI generates a new class of object — the provider itself manufactures a short, human-readable summary of what you are thinking about, and then that object travels through the same pipes.
The paper's Appendix A shows exactly what that summary looks like. Same prompt, three providers:
| Prompt typed by the user | Title generated by ChatGPT | by Claude | by Grok |
|---|---|---|---|
| "What are the symptoms of early-stage Parkinson's disease?" | Early-stage Parkinson's Symptoms | Early-stage Parkinson's disease symptoms | Early Parkinson's Disease Symptoms |
| "My salary is $85k. How much mortgage can I afford in NYC?" | Mortgage Affordability in NYC | Mortgage affordability on $85k salary in NYC | $85k NYC Salary: $280k-$350k Mortgage |
Look at the bottom-right cell. Grok's title does not merely record the topic — it encodes the answer, including a salary figure and a mortgage range, into a short string. When that string is transmitted to an ad network alongside a stable identifier, the ad network has learned a health condition or a financial profile from a single field. No inference, no modelling, no clickstream reconstruction. The provider did the summarisation for them.
Here is what the paper counted leaking, and to how many distinct tracking organisations:
| Artifact leaked | Providers (web) | Providers (Android) | Trackers (web) | Trackers (Android) |
|---|---|---|---|---|
| Conversation URL | 5 | 0 | 9 | 0 |
| Conversation ID | 2 | 2 | 1 | 1 |
| User prompt | 1 | 1 | 2 | 1 |
| Conversation title | 3 | 0 | 9 | 0 |
| Conversation screenshot | 1 | 0 | 1 | 0 |
| Shared conversation URL | 5 | 0 | 9 | 0 |
| Shared conversation ID | 0 | 1 | 0 | 1 |
The asymmetry is worth internalising: the web clients leak the user-facing artifacts (titles, URLs, screenshots) because web trackers execute inside the page's JavaScript context and can simply read the DOM. Mobile SDKs run outside the WebView's document, so they mostly get the conversation ID — but in exchange they get a much richer identifier set, because a third-party SDK inherits the host app's permissions.
Three mechanisms that make your ad blocker irrelevant
This is the part most coverage misses, and it is the most transferable lesson on the page.
Blocking doubleclick.net in your browser does nothing against any of the following.
- Grok's web client loads a Google Tag Manager container configured to route events through a server-side GTM instance (sGTM). A custom event forwards the conversation URL and the chat topic server-to-server to Meta's Conversions API and TikTok's Events API. Because the hop from Grok's infrastructure to Meta and TikTok never touches your browser, no extension can see it, let alone block it. The same payload carries both Meta's _fbp cookie and TikTok's _ttp cookie, which means the two ad platforms can be joined into a single identity for that event.
- Claude's web client loads Segment Analytics proxied through a first-party domain, a-cdn.anthropic.com, carrying a Conversion API configuration that forwards user events server-to-server from Anthropic's infrastructure to eleven downstream trackers — the paper names Facebook, LinkedIn, TikTok, Reddit and Google Enhanced Conversions among them — with two shared IDs per event. A blocklist keyed on third-party hostnames sees a request to Anthropic's own CDN and lets it through, by construction.
- 71% of all distinct endpoints contacted by the mobile clients originate from WebViews — in-app browsing — rather than from native bytecode. It ranges from 98% in Grok to 91% in Perplexity to 71% in ChatGPT. That means the app is loading the *web* tracking stack (Google Ads, Google Tag Manager, TikTok Analytics, X/Twitter Analytics, Meta Pixel were all observed inside WebViews) inside a container where your browser's content blocker does not run at all.
- The generalisable rule: once a provider moves tracking server-side or proxies it through its own domain, client-side blocking is a measurement of the provider's laziness, not of your privacy. The only client-side controls that still bite are the consent signal itself and not generating the artifact in the first place.
A fourth mechanism shows up in the CSP headers rather than in live traffic. Content-Security-Policy response headers enumerate the origins a page is authorised to contact, including ones that stayed dormant during the test — a useful lower bound on future behaviour. Across the nine services:
| Organisation | Domains in CSP | Number of providers |
|---|---|---|
| Google Tag Manager | googletagmanager.com | 6 |
| Google Analytics | google-analytics.com | 5 |
| Google Ads | googleadservices.com | 4 |
| Meta Pixel / Conversions API | connect.facebook.net, facebook.net | 4 |
| Google DoubleClick | doubleclick.net | 3 |
| TikTok Analytics | analytics.tiktok.com | 2 |
| Reddit Ads / Analytics | pixel-config.reddit.com, redditstatic.com | 2 |
| Microsoft Bing | bat.bing.com, bing.com | 2 |
| Intercom | intercom.io, intercomcdn.com | 2 |
Per-service findings worth knowing
These are the specific, verifiable behaviours the paper documents. Each is a May 2026 observation, not a permanent property.
The consent numbers, read honestly
This is where the study is most useful and most depressing, because it quantifies something everyone suspects.
- 77.3% of observed transmissions of web identifiers to third parties occur only after the user accepts non-essential cookies. Your choice does something.
- But 80.8% of third-party trackers remain active even when non-essential cookies are rejected. What your choice removes is the minority.
- Across all analysed free-tier services, third-party trackers still collect data in 44.4% (4 of 9) of them under a reject-all configuration.
- Of the three web clients that leak conversation titles, 88.9% of those disclosures happen only on accept — titles are among the artifacts consent actually gates.
- Ignoring the banner entirely produced no connections beyond those observed under explicit rejection. Clicking the X is, on these nine services, equivalent to rejecting.
- Subscription tier barely matters. Free and premium accounts contacted largely identical third parties; Claude's mobile free tier was the single clear exception.
Two structural observations follow, and they are the ones to remember:
The strongest controls are least available to the users most exposed. Persistent consent preferences on the web exist only on ChatGPT's paid tier, while roughly 95% of ChatGPT users sit on free tiers — and OpenAI has announced advertising for free and low-cost users. On mobile, most apps present no cookie-consent equivalent at launch at all, despite exposing similar tracking infrastructure. You cannot reject what you were never asked about.
Presence is not proof of purpose. The paper is careful here and so should you be: a third party appearing in traffic does not by itself mean data is being used for advertising. Some SDKs do crash reporting, session replay or in-app payments. Sentry, Datadog and Intercom have obvious operational justifications. The authors also note their methodology cannot separate a provider's own first-party server-side tracking from functional traffic. Read the tables as "these entities receive this data", not "this data is definitely sold".
Permalinks are not an access control
Every one of the nine services lets you share a conversation, and every one of them serves the shared conversation without requiring the recipient to authenticate. The security model is the unguessability of a UUID in the URL. Table 6 in the paper measures the default posture per provider and tier; the two outliers are Grok, where free and premium conversation permalinks are public by default with an opt-out, and Perplexity, where guest-tier conversations are always public with no opt-out at all. Perplexity is also the only provider that offers a whitelist control on top.
The authors then did the thing that turns a theoretical exposure into a measured one. They
deployed canary tokens — from canarytokens.org and from a self-hosted canary infrastructure
with a generic domain, because some assistants recognise and refuse known canary domains — both
pasted directly into prompts and embedded inside uploaded .docx and .pdf files. Then they
waited to see who fetched them.
- For DeepSeek, Copilot, Mistral and Claude, some canary URLs fired once at submission time, from AWS or GCP addresses — consistent with the provider's own link-preview or retrieval infrastructure.
- For Grok, they recorded 70 distinct canary activations over hours to days after submission, from 70 IP addresses spanning 48 autonomous systems in 14 countries across 4 continents, with 65.7% of connections originating in the United States.
- Perplexity repeatedly fetched canary URLs even when the prompt explicitly instructed it not to, from IP ranges belonging to its Perplexity-User crawler on AWS infrastructure in the US.
Seventy retrievals from forty-eight different networks, days later, is not link-preview behaviour. It is the signature of a URL that escaped into a pipeline and got crawled. The authors are appropriately cautious — absence of observed access elsewhere is not evidence of absence, since they only see what their own instrumentation catches — but the positive result stands on its own.
Grok was also the only service where the authors identified something they classified as a security concern exploitable by an external party, rather than an intentional product decision. That is why xAI got a vulnerability-disclosure email on 2026-04-17 rather than an ordinary research notification. As of 2026-09-10 the paper reports that Grok still uses publicly accessible permalinks and that no official response had been received.
Run the audit yourself
None of this requires research infrastructure. You can reproduce the shape of the finding on any assistant in about twenty minutes, and you should, because the stacks change constantly and the paper is explicitly a point-in-time lower bound.
- New browser profile, no extensions, no prior cookies. Prior consent state, auth tokens and telemetry artifacts from an earlier session will silently change what fires. This is the step people skip and it invalidates everything downstream.
- Network tab, check 'Preserve log' and 'Disable cache'. Load the assistant, answer the consent banner the way you normally would, then have a short conversation on a topic you would not want inferred. Let the provider generate a title for it.
- Right-click in the Network panel, 'Save all as HAR with content'. Then search the file for the conversation's UUID, for distinctive words from the generated title, and for your email address in plaintext, MD5, SHA-1 and SHA-256. Hashed email addresses are the identifier people miss because they look like noise.
- Fresh profile again, this time flip accept to reject. Diff the set of hostnames contacted. The delta is what your consent choice actually buys you; the intersection is what it does not.
- Generate a share link and watch the Network panel during that action specifically. Sharing was where the study found the worst transmissions — screenshots and verbatim prompts — and it is a code path that never runs during ordinary chat.
- Put a canary URL on a domain you control in a conversation and in an uploaded document, and watch your access logs for a week. One hit at submission time is a link preview. Repeated hits from unrelated networks days later are not.
Extract every third-party host and hunt for your own identifiers in a HAR
# Every distinct host the page contacted, by request count
jq -r '.log.entries[].request.url' capture.har \
| awk -F/ '{print $3}' | sort | uniq -c | sort -rn
# Any request whose URL or POST body contains the conversation UUID
CONV_ID="paste-the-uuid-from-the-address-bar"
jq -r --arg id "$CONV_ID" '
.log.entries[]
| select((.request.url | contains($id))
or ((.request.postData.text // "") | contains($id)))
| "\(.request.method) \(.request.url)"' capture.har
# Your email, in clear and in the three hashes trackers actually use
EMAIL="you@example.com"
for h in "$EMAIL" \
"$(printf %s "$EMAIL" | md5)" \
"$(printf %s "$EMAIL" | shasum -a 1 | cut -d' ' -f1)" \
"$(printf %s "$EMAIL" | shasum -a 256 | cut -d' ' -f1)"; do
printf '%s -> ' "$h"
grep -c -- "$h" capture.har
doneWhat actually reduces exposure
Ordered by how much they move the needle, per the paper's own mitigation discussion.
- The worst transmissions in the study happen in the sharing code path, and every provider lets you revoke previously shared links. Go through your existing share list now. A permalink you created in 2024 and forgot about is still public on Grok and Perplexity's guest tier, and the canary result shows shared URLs do get fetched.
- Most providers now offer a mode where the conversation is not saved to account history. No saved conversation means no persistent permalink and, in several cases, no generated title — which removes the single most information-dense artifact from the pipeline.
- It removes roughly a fifth of the trackers, and on Claude specifically it demonstrably stopped the Meta Pixel, the Datadog telemetry and the eleven-tracker server-side forwarding. That is a real reduction. It is not privacy.
- Counterintuitive, but: mobile SDKs inherit the host app's permissions and get identifiers the browser never exposes — advertising IDs, SSAID, installation IDs, geolocation — and most apps present no consent mechanism at all. The web client leaks richer conversation content; the app leaks stronger, harder-to-reset identity.
- Three of the eight apps transmit the AAID to third parties (Adjust, AppsFlyer, Singular). Deleting the advertising ID entirely — Settings, Privacy, Ads — is stronger than resetting it, because the study shows resettable IDs being transmitted alongside permanent install- and account-level IDs, which lets a tracker re-bind a fresh AAID to the old profile.
- None of the above touches the server-side pipeline. The only architecture that removes the third-party surface completely is a local model or a raw API call from your own client — an API request carries no tag manager, no pixel and no WebView.
If you build on these APIs, this is your problem too
The paper's scope note is easy to skim past and it is the part that should worry engineers: the leakage vectors observed here "stem from embedding standard web and mobile tracking directly into conversational interfaces". Nothing about them is specific to a frontier lab. If you have shipped an LLM-powered support chatbot, a custom assistant or a third-party AI wrapper, and your marketing team has installed the usual analytics on the same pages, you have almost certainly reproduced this architecture by accident.
Three concrete things to check in your own product:
- Do you generate conversation titles or summaries client-side? If so, they are in the DOM,
and any tag manager on that page can read them. The fix is to keep generated summaries out of
the document title, out of
<meta>tags, and out of any analytics event payload. - Are conversation IDs in the URL path? Then they are in the
Refererheader of every third-party request the page makes, and indocument.locationfor every script. The study found two providers shipping the global conversation ID to Datadog as an independent parameter, which is enough to reconstruct a permalink. - Is your share page publicly readable? Under the ePrivacy Directive's Article 5(3) and the EDPB's Guidelines 2/2023 on its technical scope, URL and pixel tracking, persistent identifiers, and instructing the browser to forward data to a server-side API all require prior informed consent. The CJEU's Fashion ID judgment (C-40/17, paragraph 78) goes further: enabling third-party access is itself a processing decision that triggers your obligations, whether or not the third party ever reads the data.
The disclosure timeline
Useful as a model for how this kind of research lands, and as a record of who moved.
| Date | Event |
|---|---|
| 2026-03-23 | Authors first notice tracker activity while analysing Perplexity and Grok |
| 2026-04-06 | Testing expanded to all major platforms across consent states, tiers and privacy modes |
| 2026-04-13 | Findings notified to data protection authorities in the EU and UK |
| 2026-04-17 | xAI notified via vulnerability disclosure, specifically about Grok's conversation access controls |
| 2026-05-27 | The Spanish DPA (AEPD) cites the work, requesting escalation to an EDPB plenary meeting held 2026-06-06 |
| 2026-08-15 | OpenAI updates ChatGPT's privacy policy to explicitly mention third-party trackers (causal link unconfirmed by the authors) |
| 2026-09-10 | Grok still exposes publicly accessible permalinks; no official response received |
Check yourself
0/6- All nine major conversational AI services contact at least one advertising or tracking organisation: 124 third-party domains, 44 organisations, 34 of them ATSes. There is no clean option in the mainstream set.
- Conversational AI creates an artifact class that ordinary web tracking does not have — the provider's own generated title, a compressed natural-language summary of user intent — and 3 of 9 web clients ship it to 9 third parties including Meta, TikTok and DoubleClick.
- Client-side blocking is structurally defeated three ways: server-side tag managers (Grok to Meta Conversions API and TikTok Events API), first-party-proxied analytics (Claude's Segment via a-cdn.anthropic.com, forwarding to eleven trackers), and mobile WebViews carrying 71% of all mobile endpoints.
- Consent removes the minority: 80.8% of trackers survive rejecting non-essential cookies, and the strongest control — persistent consent preferences — exists only on ChatGPT's paid tier while roughly 95% of users are on free tiers.
- A conversation permalink is an unguessable URL, not an access control. Canary tokens proved shared Grok conversations are fetched 70 times from 48 autonomous systems in 14 countries, days after the chat ended.
- The cheapest real mitigations: revoke old share links, use temporary/incognito chat, delete rather than reset your Android advertising ID, and move genuinely sensitive work to a raw API call or a local model where no tag manager exists.
- If you ship an LLM feature, you probably inherited this architecture by accident — check for generated summaries in the DOM, conversation IDs in URL paths, and publicly readable share pages.
Sources & further reading
- Prompt like a Butterfly, Sting like a Tracker: A Privacy Analysis of Web and Mobile Conversational AI Agents (PDF) — the primary source for every number on this page. Oliveira, Sanchez, De Santa Olalla Gómez, Serna, Jackevicius, Garcia-Herrero, Girish, Suarez-Tangil and Vallina-Rodriguez; accepted at PoPETs 2027; CC BY 4.0.
- guinucool/pbst2027 — the open-science artifact repository: third-party classification code, fingerprinting-API detection, PII extraction, the manually labelled third-party domain list, sample Grok HAR captures and an artifact appendix with reproduction instructions. Raw traffic captures are withheld as they contain sensitive data.
- A visual summary of the paper (Spanish) — the co-author's own walkthrough, useful for the legal framing.
- Hacker News discussion, item 49890226 — 421 points and 136 comments as of 2026-09-30, including practitioner pushback on methodology and several follow-up reproductions.
- IMDEA Networks — the research institute behind the measurement work, and a reliable source for follow-up studies in this line.
- Canarytokens — the free canary-token service the authors used, and the easiest way to reproduce the permalink-access experiment yourself.
- EDPB Guidelines 2/2023 on the technical scope of Article 5(3) of the ePrivacy Directive — the regulatory text that brings URL tracking, pixels and server-side forwarding inside the consent requirement.
- Related on AILmanac: ChatGPT's Ad Pixel and the
__obiCookie, What Your Agent Uploads, Agentic Browsers and Same-Origin Risk, Cryptographic Context Injection in Grok.
Next
- ChatGPT's Ad Pixel and the
__obiCookie — the other half of the advertising story: how OpenAI's own measurement pixel joins a ChatGPT account to the shopping sites you visit, and why rejecting marketing consent does not stop it. - The Private Local AI Stack — the architecture that removes this entire surface, and what you give up to get it.
- Back to Security & Responsible Use — the rest of the threat model, from prompt injection to agent sandboxing.