User Tools

Site Tools


privacy:privacy_sandbox

Measuring the Privacy Sandbox

Third-party cookies were not removed from Chrome, and the APIs that were built to replace them are now being removed instead. Both halves of that sentence matter to a crawl you design in 2026, and neither is what the 2022 Privacy Sandbox roadmap says.

This page is about the second half: Topics, Protected Audience, Attribution Reporting, Shared Storage, Private Aggregation, Fenced Frames, CHIPS, the Storage Access API, Related Website Sets and Private State Tokens — what shipped, what is being torn out, what a crawler can see of any of it, and what the seven-venue publication corpus has and has not measured. The cookie side is Cookies; the partitioning of storage is Browser storage; what your automation library does to the engine's partitioning posture is Since 2022 the engine decides, not you.

The one thing to know before you design anything.

  • On 2025-10-17 Google announced it would retire ten Privacy Sandbox technologies: “Attribution Reporting API (Chrome and Android), IP Protection, On-Device Personalization, Private Aggregation (including Shared Storage), Protected Audience (Chrome and Android), Protected App Signals, Related Website Sets (including requestStorageAccessFor and Related Website Partition), SelectURL, SDK Runtime and Topics (Chrome and Android)”.1) CHIPS, FedCM and Private State Tokens continue.
  • The same day, the UK CMA closed its Privacy Sandbox investigation and released Google from the commitments that had constrained the project since 2022. Case opened 2021-01-07, closed 2025-10-17.2)
  • They have not been removed yet. As of 2026-09-01, every one of those Chrome Platform Status “Deprecate and remove” entries is still marked Proposed, and Chromium 151.0.7922.34 exposes and answers every one of the APIs — measured on this page. Chrome stable today is M152 (2026-08-25). The removal milestone for Topics, Protected Audience, Attribution Reporting, Shared Storage, Related Website Sets and requestStorageAccessFor is M153, whose stable date is 2026-09-08.
  • So there is a window, it is short, and the browser version is the single most important thing to pin and report in any Privacy Sandbox measurement. See What to Report.

What to Read First

  • Fledging Will Continue Until Privacy Improves [1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)], USENIX Security 2024 — the only deployment-scale crawl of Protected Audience in this corpus, and the model for how to instrument one. Read §3 for the method (wrapper functions injected by Puppeteer) before you read the results.
  • Exploiting the Shared Storage API [2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)], CCS 2025 — the most recent Privacy Sandbox measurement in the corpus, and the one that shows what the attestation artefacts give you for free.
  • Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving) [3Beugin, Yohan; McDaniel, Patrick (2024): "Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving)", in: Proceedings on Privacy Enhancing Technologies. (DOI)], PoPETs 2024 — the systematic privacy analysis of Topics, with the re-identification numbers everyone cites.
  • A First Look at Related Website Sets [4McQuistin, Stephen; Snyder, Peter; Haddadi, Hamed; Tyson, Gareth (2024): "A First Look at Related Website Sets", in: Proceedings of the ACM Internet Measurement Conference. (DOI)], IMC 2024 — the template for measuring a Privacy Sandbox governance artefact (a GitHub list and its pull requests) rather than a browser API.
  • Then the primary sources, because no paper is current: Google's own Privacy Sandbox feature status page and the per-feature entries on Chrome Platform Status.

What Shipped, and What Is Being Removed

Every row was checked on 2026-09-01 against Chrome Platform Status' JSON API and Google's own status page — not against documentation, blog posts or memory. The Detection column is the expression this page measured in Chromium 151.0.7922.34; read Presence is not availability, and neither is a return value before you use it.

API Former names Shipped Status on 2026-09-01 Detection expression
Topics FLoC (different design) M115, 2023-07-18 Enabled by default. Removal proposed, M153 typeof document.browsingTopics
Protected Audience FLEDGE, TURTLEDOVE M115, 2023-07-18 Enabled by default. Removal proposed, M153 'joinAdInterestGroup' in navigator
Attribution Reporting Conversion Measurement API M115, 2023-07-18 Enabled by default. Removal proposed, M153 'attributionSrc' in HTMLAnchorElement.prototype
Shared Storage (incl. selectURL) M115, 2023-07-18 Removal proposed, M153 'sharedStorage' in window
Private Aggregation M115, 2023-07-18 Removal proposed, M152. Reachable only from Shared Storage and Protected Audience worklets privateAggregation inside a worklet
Fenced Frames M115, 2023-07-18 Removal proposed, M155 'HTMLFencedFrameElement' in window
Related Website Sets First-Party Sets M115, 2023-07-18 Removal proposed, M153. The submission repository is archived none — inferred from requestStorageAccess behaviour
requestStorageAccessFor() M115, 2023-07-18 Removal proposed, M153 'requestStorageAccessFor' in document
CHIPS — the Partitioned cookie attribute M114, 2023-05-30 Continues. Explicitly kept on 2025-10-17 none — no JS surface; set and read back a Partitioned; Secure cookie
Storage Access API M115 per Chrome Platform Status; “Chrome 119 and higher” per Google's status page3) Continues 'requestStorageAccess' in document
Private State Tokens Trust Tokens M115, 2023-07-18 Continues. Explicitly kept on 2025-10-17 typeof document.hasPrivateToken
FedCM WebID M108 Continues. Explicitly kept on 2025-10-17 'IdentityCredential' in window
Bounce tracking mitigations M116, 2023-08-15 Continues. Not an API — a heuristic that clears state none
User-Agent Client Hints / UA reduction rollout from M89; deprecation trial ended 2023-09-23 Continues 'userAgentData' in navigator
IP Protection Gnatcatcher never shipped Discontinued 2025-10-17. Its repository was archived 2025-11-03
Privacy Budget never shipped Never implemented in any browser
FLoC origin trial only, Chrome 89, 2021 Withdrawn January 2022 and replaced by Topics
Privacy Sandbox on Android (SDK Runtime, Topics, Protected Audience, Attribution, Protected App Signals, On-Device Personalization) All scheduled for phaseout not a web surface

Google's status page also lists Fenced Storage Read, Private Proofs, Probabilistic Reveal Tokens and Script Blocking as Do not launch, and Partitioned Popins and Related Website Partition as Discontinue. If you meet one of those names in a 2024 explainer, it never shipped.4)

The timeline, because the roadmap is not the platform

The single most common error in a Privacy Sandbox paper is to cite a Google announcement as though it described the browser. Between 2020 and 2026 the announced plan changed direction four times, and each reversal invalidated the motivation section of papers already in submission.

Date What happened
2020-01 Chrome announces it will phase out third-party cookies “within two years”
2021, spring to autumn FLoC origin trial, Chrome 89 to 91, for users with at least seven domains in their history; k = 2000 produced 33,872 cohorts, 2.3% of them deemed sensitive [5Berke, Alex; Calacci, Dan (2022): "Privacy Limitations of Interest-based Advertising on The Web: A Post-mortem Empirical Analysis of Google's FLoC", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)]. Widely attacked; withdrawn
2022-01-25 FLoC development ends; Topics proposed instead
2022-02 The UK CMA accepts Google's commitments, making Chrome's cookie plans subject to regulatory oversight
2023-05-30 → 2023-08-15 M114–M116: CHIPS, then the whole ads-API set, then bounce-tracking mitigations, reach stable
2024-01-04 Tracking Protection (third-party cookies off) enabled for 1% of Chrome users
2024-07-22 “A new path for Privacy Sandbox on the web”: deprecation replaced by “a new experience in Chrome that lets people make an informed choice”5)
2025-04-22 Chrome “will not be rolling out a new standalone prompt for third-party cookies”. Third-party cookies stay, by default, indefinitely6)
2025-10-17 Ten technologies retired. The CMA closes its investigation the same day
2025-11-03 / 2025-11-21 The ip-protection and related-website-sets GitHub repositories are archived
2026-08-25 M152 reaches stable. Private Aggregation's removal is targeted here, still marked Proposed
2026-09-08 M153 stable date: the targeted removal milestone for Topics, Protected Audience, Attribution Reporting, Shared Storage, RWS and requestStorageAccessFor

Do not write “third-party cookies are being deprecated” in a 2026 paper, and do not write “the Privacy Sandbox is the replacement” either. Both are now false. If your motivation needs a sentence, the accurate one is: third-party cookies remain enabled by default in Chrome, and the ad-targeting APIs proposed to replace them are being withdrawn. Cookie syncing and Server side tracking carry the same correction for their own framings.

Detecting and Recording the APIs from a Crawl

Presence is not availability, and neither is a return value

Measured here, 2026-09-01, Chromium 151.0.7922.34 as shipped with Playwright 1.62.1. Every Privacy Sandbox JS surface is present under the default flags of both Playwright and Puppeteer, and document.featurePolicy.allowsFeature() returns true for all six ads-API Permissions-Policy features (browsing-topics, join-ad-interest-group, run-ad-auction, attribution-reporting, shared-storage, private-aggregation). Adding --enable-features=PrivacySandboxAdsAPIsOverride changed nothing, in either library. (Puppeteer was pointed at the same Chromium binary via chromium.executablePath(), so this is a comparison of the two libraries' default flag sets, not of two browser builds.)

That is the easy half. The hard half is that calling them tells you nothing either. On an HTTPS page served from a domain that is definitely not enrolled, every call returned a benign empty value rather than throwing:

document.browsingTopics()              RETURNED []
navigator.joinAdInterestGroup()        RETURNED undefined
navigator.runAdAuction()               RETURNED null
sharedStorage.set()                    RETURNED undefined
document.hasPrivateToken()             RETURNED false
document.requestStorageAccess()        RETURNED undefined
fetch(..., {attributionReporting})     RETURNED 200

The same four outputs came back from localhost, from a mapped non-enrolled public-looking domain, with the ads-API override on, and with --privacy-sandbox-enrollment-overrides pointed at the origin. A crawler cannot distinguish “the API is on and there was nothing to report” from “the API is off for this profile” from “this caller is not enrolled” by looking at the return value. An empty Topics array is the expected result on a fresh profile with no history, and it is also what a disabled API gives you.

The consequence for a measurement is direct: do not report “N% of sites can use the Topics API” from a feature-detection sweep. Presence of the symbol is a fact about the browser build, identical on every site. The only site-level facts are (a) whether site code called the API, and (b) whether the caller is enrolled — and those need the instrumentation below.

Chrome DevTools Protocol: what it covers, and for how long

Chromium's CDP Storage domain carries first-class Privacy Sandbox instrumentation, which is far cheaper than injecting wrappers. Enumerated from the browser's own /json/protocol descriptor, Chromium 151.0.7922.34, 2026-09-01:

CDP Storage surface Present in Chromium 151 Present at Chromium tip-of-tree
setInterestGroupTracking, setInterestGroupAuctionTracking, getInterestGroupDetails yes gone
setSharedStorageTracking, getSharedStorageMetadata, getSharedStorageEntries, setSharedStorageEntry, deleteSharedStorageEntry, clearSharedStorageEntries, resetSharedStorageBudget yes gone
events interestGroupAccessed, interestGroupAuctionEventOccurred, interestGroupAuctionNetworkRequestCreated, sharedStorageAccessed, sharedStorageWorkletOperationExecutionFinished yes gone
runBounceTrackingMitigations, getRelatedWebsiteSets yes yes
anything for Topics no no
anything for Attribution Reporting no no

Tip-of-tree is the ChromeDevTools/devtools-protocol master descriptor, fetched 2026-09-01: the Privacy Sandbox commands and all five events are already absent there. The instrumentation is being removed with the API. If you intend to record Protected Audience or Shared Storage activity, pin a Chromium at or before the removal milestone and say which one; a crawl on evergreen Chrome will silently stop producing events.

This is the script this page ran, in full, not an abridged illustration: it stands up a local HTTPS origin with a bidding script, a decision script and a Shared Storage worklet, maps a non-localhost name onto it, drives every API, and prints what CDP delivered. Pointing the same listeners at an ordinary site you do not control will usually print nothing, which is why the mock origin is part of the script rather than an exercise for the reader.

ps_cdp_probe.mjs
// Can a crawler RECORD Privacy Sandbox activity? The CDP Storage domain has
// tracking toggles for interest groups, Shared Storage and Attribution
// Reporting. This probe turns them on, drives each API from a page, and prints
// the events that actually arrive.
//
//   PLAYWRIGHT_BROWSERS_PATH=/workspace/.playwright node sandbox/ps_cdp_probe.mjs
import https from 'node:https';
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { chromium } from 'playwright';
 
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'pscdp-'));
execSync(
  `openssl req -x509 -newkey rsa:2048 -nodes -keyout ${dir}/k.pem -out ${dir}/c.pem -days 2 -subj "/CN=probe.example" -addext "subjectAltName=DNS:probe.example"`,
  { stdio: 'ignore' }
);
 
const PAGE = `<!doctype html><meta charset=utf-8><title>ps</title>`;
const BID = `function generateBid(){return {ad:'a',bid:1,render:'https://probe.example:8444/ad.html'};}
function reportWin(){}`;
const DEC = `function scoreAd(){return 1;} function reportResult(){}`;
const WORKLET = `class P { async run() { return 0; } }
register('p', P);`;
 
const server = https.createServer(
  { key: fs.readFileSync(`${dir}/k.pem`), cert: fs.readFileSync(`${dir}/c.pem`) },
  (req, res) => {
    const js = { 'content-type': 'application/javascript' };
    if (req.url === '/bid.js') return res.writeHead(200, js).end(BID);
    if (req.url === '/decide.js') return res.writeHead(200, js).end(DEC);
    if (req.url === '/w.js') return res.writeHead(200, js).end(WORKLET);
    if (req.url === '/ad.html') return res.writeHead(200, { 'content-type': 'text/html' }).end('<b>ad</b>');
    res.writeHead(200, { 'content-type': 'text/html' }).end(PAGE);
  }
);
await new Promise((r) => server.listen(8444, '127.0.0.1', r));
 
const b = await chromium.launch({
  headless: true,
  args: [
    '--host-resolver-rules=MAP probe.example 127.0.0.1',
    '--ignore-certificate-errors',
    '--enable-features=PrivacySandboxAdsAPIsOverride',
    '--privacy-sandbox-enrollment-overrides=https://probe.example:8444',
  ],
});
const ctx = await b.newContext({ ignoreHTTPSErrors: true });
const page = await ctx.newPage();
const cdp = await ctx.newCDPSession(page);
 
const events = [];
for (const ev of [
  'Storage.interestGroupAccessed',
  'Storage.interestGroupAuctionEventOccurred',
  'Storage.interestGroupAuctionNetworkRequestCreated',
  'Storage.sharedStorageAccessed',
  'Storage.sharedStorageWorkletOperationExecutionFinished',
  'Storage.attributionReportingSourceRegistered',
  'Storage.attributionReportingTriggerRegistered',
]) cdp.on(ev, (p) => events.push([ev, JSON.stringify(p).slice(0, 220)]));
 
const toggles = [
  ['Storage.setInterestGroupTracking', { enable: true }],
  ['Storage.setInterestGroupAuctionTracking', { enable: true }],
  ['Storage.setSharedStorageTracking', { enable: true }],
  ['Storage.setAttributionReportingTracking', { enable: true }],
];
for (const [m, params] of toggles) {
  try {
    await cdp.send(m, params);
    console.log(`  toggle OK    ${m}`);
  } catch (e) {
    console.log(`  toggle FAIL  ${m}: ${String(e.message).slice(0, 90)}`);
  }
}
 
await page.goto('https://probe.example:8444/', { waitUntil: 'domcontentloaded' });
const res = await page.evaluate(`(async () => {
  const o = {};
  const t = async (n, f) => { try { o[n] = 'ok ' + JSON.stringify(await f()); } catch (e) { o[n] = 'ERR ' + String(e.message).slice(0,110); } };
  await t('joinAdInterestGroup', () => navigator.joinAdInterestGroup({
    owner: location.origin, name: 'probe', biddingLogicURL: location.origin + '/bid.js',
    ads: [{ renderURL: location.origin + '/ad.html', metadata: {} }],
  }, 3600));
  await t('runAdAuction', () => navigator.runAdAuction({
    seller: location.origin, decisionLogicURL: location.origin + '/decide.js',
    interestGroupBuyers: [location.origin], resolveToConfig: false,
  }));
  await t('sharedStorage.set', () => window.sharedStorage.set('k', 'v'));
  await t('sharedStorage.addModule', () => window.sharedStorage.worklet.addModule('/w.js'));
  await t('sharedStorage.run', () => window.sharedStorage.run('p', {}));
  return o;
})()`);
await page.waitForTimeout(2500);
 
console.log('\n== API calls from the page ==');
for (const [k, v] of Object.entries(res)) console.log(`  ${k.padEnd(22)} ${v}`);
console.log(`\n== CDP events received (${events.length}) ==`);
for (const [ev, p] of events) console.log(`  ${ev.padEnd(52)} ${p}`);
if (!events.length) console.log('  (none)');
 
await b.close();
server.close();

Its real output on 2026-09-01: three toggles accepted, Storage.setAttributionReportingTracking rejected with a protocol error (it does not exist), and seven events delivered — one auction started, two auction network requests (bidderJs and sellerJs), three sharedStorageAccessed (set, addModule, run) and one sharedStorageWorkletOperationExecutionFinished. Removing the setSharedStorageTracking toggle drops that to three, so the toggles are load-bearing rather than decorative.

A sharedStorageAccessed event carries accessTime, scope (window or the worklet), method (set, addModule, run, selectURL, …), ownerOrigin, ownerSite and the call's params — that is, everything needed to reproduce [2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)]'s prevalence figure without writing a page-script wrapper at all. An auction produces interestGroupAuctionEventOccurred with a uniqueAuctionId and the full auctionConfig, followed by interestGroupAuctionNetworkRequestCreated entries tagged bidderJs and sellerJs — the seller attribution that gives [1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)]'s 99.8% figure.

The wrapper-injection route, and why the corpus used it

Topics and Attribution Reporting have no CDP surface at all, in any Chromium version checked. For those, the corpus's method is the one to copy: [1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)] “used Puppeteer to orchestrate Chrome”, visiting each domain in a fresh browser instance, and “injects wrapper functions into the page and logs all” calls to navigator.runAdAuction, navigator.joinAdInterestGroup and navigator.leaveAdInterestGroup. Inject the wrapper before any page script runs — page.addInitScript() in Playwright, page.evaluateOnNewDocument() in Puppeteer — and wrap document.browsingTopics, the attributionReporting option on fetch, and the attributionSrc setter on HTMLAnchorElement/HTMLImageElement the same way.

Two things this costs you, both worth a sentence in your methods section: a wrapper is visible to page script and is therefore detectable (Crawler detection), and it sees only the main world unless you also install it into every frame and worklet.

Nothing outside Chromium implements the ads APIs

Firefox and Safari never implemented Topics, Protected Audience, Shared Storage, Fenced Frames or Private Aggregation. The Storage Access API and CHIPS are the exceptions with genuine cross-browser support. Two attribution efforts outside Chrome are worth dating rather than assuming:

  • Firefox Privacy-Preserving Attribution (PPA) shipped as an experiment in Firefox 128 (July 2024), scoped to Mozilla-operated sites, and drew a noyb complaint to the Austrian DPA for being on by default. Bugzilla 1979093, “Remove checkbox in settings for feature that was never enabled”, is RESOLVED FIXED against the 143 Branch (last changed 2025-08-21).7)
  • W3C Attribution Level 1 is a live W3C Working Draft from the Private Advertising Technology Working Group, fetched 2026-09-01 at w3.org/TR/attribution. Google's 2025-10-17 post says it will “continue to engage on it through the web standards process”. No browser ships it. This is the surface to watch, not to measure.

OpenWPM cannot observe any of this, because it drives Firefox — still true at v0.36.0, released 2026-08-24, whose README opens “OpenWPM is built on top of Firefox”. If your instrument is OpenWPM, a Privacy Sandbox measurement is not a configuration change, it is a different crawler.

Populations You Can Reuse Without Crawling

Privacy Sandbox is unusually generous with public artefacts, and three of the four measurement papers in the corpus lean on them. All counts below were taken on 2026-09-01.

Artefact Where Size today What it is good for
Enrollment report privacysandbox/attestationenrollment_report.csv 326 rows The company-level population. Columns: Enrollment Id, Company Name, Android APIs, Chrome APIs, SDK Names, Site
Preloaded attestation list PrivacySandboxAttestationsPreloaded/privacy-sandbox-attestations.dat, inside your own Chromium install 263 sites, component version 2025.7.18.0 The list the browser itself enforces against. No network access needed
Per-site attestation file https://<site>/.well-known/privacy-sandbox-attestations.json one per enrolled site Which APIs each site declared. [2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] fetched 289 of these and got 245 (85%)
Related Website Sets list GoogleChrome/related-website-setsrelated_website_sets.JSON 70 sets, 320 member domains, 66 sets (94.3%) with at least one associated site. Repository archived A complete census, not a sample. Also reachable in-browser via CDP Storage.getRelatedWebsiteSets
Topics taxonomy patcg-individual-drafts/topicstaxonomy_v2.md 469 topics. There is no v3 The label space. Note the Android taxonomy is curated separately — do not conflate them

The enrollment report is also a measurement in itself. Of its 326 rows, the Chrome APIs each enrollee asked for:

Chrome API declared at enrollment Enrollees Share of 326
Topics 249 76.4%
Protected Audience 237 72.7%
Attribution Reporting 228 69.9%
Shared Storage 205 62.9%
Private Aggregation 193 59.2%

25 of the 326 rows declare no Chrome API at all (they are Android-only enrolments). Read this as intent to call, not as deployment: an enrolment is a form somebody filled in, and [2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] found that the API traffic on real sites came from four domains, not from hundreds.

Use in Publications

How much of the corpus is about this at all

The full-text sweep ran over the 5,869 papers with a paper.cols.txt in the corpus (seven venues, 2010–2026; the structured extraction covers 5,859 of them). Free-text API names were folded through scripts/ps_fold.mjs so that FLoC counts with Topics, FLEDGE and TURTLEDOVE with Protected Audience, and First-Party Sets with Related Website Sets.

Query Papers Share of 5,869
name “Privacy Sandbox” at least once 43 0.7%
name at least one API family (folded) 67 1.1%
name “Privacy Sandbox” five or more times 9 0.2%

This is the page's central limitation and it belongs at the top of the section rather than in a footnote. A dozen papers in seven venues over sixteen years is not a literature; it is a handful of studies, and every generalisation on this page rests on them. Anything you want to know that the table below does not answer, the corpus cannot tell you — go to the specs and to Chrome Platform Status.

API family Folded-in former names Papers
Topics API FLoC 22
User-Agent Client Hints / UA reduction 10
Protected Audience FLEDGE, TURTLEDOVE 8
Privacy Sandbox on Android SDK Runtime 7
CHIPS (partitioned cookies) the Partitioned attribute 5
Private State Tokens Trust Tokens 5
Fenced Frames 4
Related Website Sets First-Party Sets 4
Attribution Reporting API Conversion Measurement API 3
Shared Storage API 3
Private Aggregation / Aggregation Service 2
Storage Access API 2
FedCM Federated Credential Management 1
IP Protection Gnatcatcher 0
Bounce Tracking Mitigations (the Chrome feature by name) 0

And by year, which is the more useful shape — this is a topic the corpus noticed late and is already losing interest in:

Year Papers with full text Name “Privacy Sandbox” Name any API family
2020 402 1 1
2021 380 1 2
2022 546 4 7
2023 720 7 12
2024 701 13 17
2025* 770 13 21
2026* 415 4 7

*2025 and 2026 are provisional: CCS 2026 and IMC 2026 have not been held, and IEEE S&P 2026 and TheWebConf 2026 are incompletely selected because selection screens on abstracts that are not yet in OpenAlex. Do not read the 2026 row as a decline. See corpus.

The silence, which is the bigger finding

The field is crawling Chrome and not looking at what Chrome now does.

Population N Name at least one API family
Web crawls published 2023–2026 332 24 (7.2%)
Web crawls published 2024–2026 235 18 (7.7%)
Web crawls published 2025–2026* 153 11 (7.2%)
Of those, the ones that said they drove Chrome or Chromium, 2024–2026 86 8 (9.3%)

“Web crawl” is crawlConfig != null or studyTypes containing automated-web-crawl, and platforms containing web. The last row's denominator is papers that stated a browser: crawlConfig.browsers is stated by only 47.2% of the 1,120 crawling papers in the corpus, so 86 is a lower bound on Chrome-driving crawls, and 9.3% is a share of the ones that told you.

If you are looking for a gap to fill, Attribution Reporting is measured by nobody. Three papers in 5,869 name it — a related-work list, a browser-permissions census that counts how often sites feature-detect it, and one arXiv citation in a reference list. Not one instruments it, crawls for it, or reports its deployment prevalence. Given the M153 target, the window to measure a deployed Attribution Reporting API in Chrome is now measured in days.

What the corpus did measure

Each row names the paper's own population. Nothing here is a share of the corpus.

Paper Mechanism Population and instrument Headline measured result
[1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)] USENIX Sec 2024 Protected Audience (as FLEDGE) Tranco top 70,000, Puppeteer-driven Chrome with injected API wrappers; three snapshots, June, July and September 2023 FLEDGE calls on 9.5% (n = 6,682) of the 70K sites over the whole period. 11,941 of 11,959 observed auctions (99.8%) were run by Google Ad Manager. 15,935 interest groups observed. Of 306,407 joinAdInterestGroup calls, 30.90% (n = 94,673) asked for an expiry beyond the browser's 30-day cap
[2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] CCS 2025 Shared Storage, selectURL Tranco, Puppeteer + DevTools capture, February 2025; 12,955 sites reached 1,311 (10.1%) invoked the Shared Storage API; 1,250 (9.6%) called selectURL. All of it traced to four domains: securepubads.g.doubleclick.net (1,222 sites), ep3.adtrafficquality.google (177), crcldu.com (46), ads.optable.co (17). Separately: of 289 candidate enrolled domains, 245 (85%) served a valid attestation file, 61% of which declared Shared Storage; 48.2% of the attested domains appear in the Disconnect Tracker Protection list
[4McQuistin, Stephen; Snyder, Peter; Haddadi, Hamed; Tyson, Gareth (2024): "A First Look at Related Website Sets", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] IMC 2024 Related Website Sets The RWS list and its GitHub pull requests, to 30 March 2024; plus a 114-response user study At the 26 March 2024 list, 41 sets, of which 92.7% had at least one associated site — the category where common ownership is not required. 58.8% of 114 pull requests were closed without being merged. Median Levenshtein distance between an associated site's SLD and its primary's was 7; median joint HTML similarity 0.04. 36.8% of same-set pairs shown to participants were judged unrelated
[3Beugin, Yohan; McDaniel, Patrick (2024): "Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving)", in: Proceedings on Privacy Enhancing Technologies. (DOI)] PoPETs 2024 Topics Simulation over 250k users from a real browsing-history distribution, plus the Tranco top 1M classified with Topics 0.4% of simulated users re-identified across two advertisers in a one-shot scenario, rising to 57% after 15 epochs and 75% after 30. Noise removal recovers about 25% of injected noisy topics one-shot, 49% after 15 epochs, 94% after 30. Topics' own classifier matched at least one human-assigned category for 57% of categorised top-million domains
[6Jha, Nikhil; Trevisan, Martino; Leonardi, Emilio; Mellia, Marco (2023): "On the Robustness of Topics API to a Re-Identification Attack", Proceedings on Privacy Enhancing Technologies 2023(4):66-78. (DOI)] PoPETs 2023 Topics Simulated personas from real traces Correct cross-site re-identification reaches 15–17% in a pool of 1,000 users, with false positives under 0.2%. With 100,000 personas, 35–42% are not even 2-anonymous
[7Alvim, Mário S.; Fernandes, Natasha; McIver, Annabelle; Nunes, Gabriel H. (2024): "The Privacy-Utility Trade-off in the Topics API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] CCS 2024 Topics Quantitative information-flow analysis over two AOL-derived datasets (211,313 and 198,023 user rows) Third-party cookies leak the user completely; the full Topics pipeline leaks 0.0028% and 0.0162% of that, depending on the taxonomy. But an observer distinguishes a genuine topic from an injected random one with posterior expected gain 95.8–96.2%
[5Berke, Alex; Calacci, Dan (2022): "Privacy Limitations of Interest-based Advertising on The Web: A Post-mortem Empirical Analysis of Google's FLoC", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] CCS 2022 FLoC comScore Web Behavior Database, 93,808 machines, 52 weeks of 2017 More than 50% of cohort-ID sequences are unique after 3 weekly recomputations and 95% after 4. Cohort membership did not violate t-closeness for race or income more than chance
[8Turati, Florian; Kubicek, Karel; Cotrini, Carlos; Basin, David (2023): "Locality-Sensitive Hashing Does Not Guarantee Privacy! Attacks on Google's FLoC and the MinHash Hierarchy System", Proceedings on Privacy Enhancing Technologies 2023(4):117-131. (DOI)] PoPETs 2023 FLoC The SimHash construction itself, plus MovieLens histories Reconstructed more than 10% of the browsing history for at least 30% of users from cohort hashes alone. SimHash pre-image generation succeeded 100% at 5-domain histories, falling to 11% at 25
[9Rasaii, Ali; Dao, Ha; Feldmann, Anja; Javid, Mohammadmahdi; Gasser, Oliver; Gosain, Devashish (2025): "Intractable Cookie Crumbs: Unveiling the Nexus of Stateful Banner Interaction and Tracking Cookies", in: Proceedings on Privacy Enhancing Technologies, pp. 429-445. (DOI)] PoPETs 2025 CHIPS Stateful Chrome crawl, 6,518 domains with banners, January 2025 Of 3,177 unique tracking cookies, only 40 (1.3%) carried Partitioned, and 26 of those 40 were accompanied by a non-partitioned cookie from the same tracker. Across all 79,898 unique stored cookies, 521 were partitioned
[10Ali, Mir Masood; Chitale, Binoy; Ghasemisharif, Mohammad; Kanich, Chris; Nikiforakis, Nick; Polakis, Jason (2023): "Navigating Murky Waters: Automated Browser Feature Testing for Uncovering Tracking Vectors", in: Proceedings of the Network and Distributed System Security Symposium. (Link)] NDSS 2023 cross-browser storage and tracking vectors, including Private State Tokens 126 versions of seven browsers 21 mechanisms usable as tracking vectors, 13 of them for third-party tracking; every latest version tested was vulnerable to at least one
[11Lin, Maxwell; Lin, Shihan; Wu, Helen; Wang, Karen; Yang, Xiaowei (2024): "Browsing without Third-Party Cookies: What Do You See?", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] IMC 2024 what blocking third-party cookies actually changes Tranco top 10,000; 7,490 domains crawled successfully More than 90% of domains showed less than a 10% screenshot difference with third-party cookies disabled — the “cookieless web looks different” premise is largely not true at the page level

One adjacent paper gives the CHIPS context without measuring the attribute: [12Nikkhah Bahrami, Pouneh; Fass, Aurore; Shafiq, Zubair (2025): "CookieGuard: Characterizing and Isolating the First-Party Cookie Jar", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] (IMC 2025) describes CHIPS as “an opt-in model for cookie partitioning” and contrasts it with Firefox's Total Cookie Protection and Safari's ITP, which partition by default — which is why a CHIPS adoption figure is a measure of publisher and tracker uptake, not of browser policy. ([13Kancherla, Gayatri Priyadarsini; Goel, Dishank; Bichhawat, Abhishek (2025): "Least Privilege Access for Persistent Storage Mechanisms in Web Browsers", in: Proceedings of the ACM Web Conference. (DOI)] is cited on this page only for its third-party storage-access figures on Browser storage; it never discusses CHIPS, and an earlier draft wrongly attached this claim to it.) The only dedicated CHIPS adoption study we found is outside these seven venues: Zöllner, Feldmann and Dao, A First Look at Cookies Having Independent Partitioned State, PAM 2025.8) We have not read it and quote no figure from it.

Denominators and Pitfalls

  • A site-level prevalence figure is a fact about a handful of scripts. [2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] found Shared Storage on 10.1% of reachable sites and four distinct callers. [1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)] found FLEDGE on 9.5% of 70K sites and 99.8% of auctions run by one seller. Publish the distinct-caller count in the same table as the site share, or your reader will conclude that a tenth of the web adopted an API when a tenth of the web embeds one ad tag.
  • A union over snapshots is not a prevalence. [1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)]'s 6,682 sites is the union over three crawls; the per-snapshot counts fell, 4,628 in June to 3,903 in July to 3,585 in September 2023. Say which one your number is.
  • Presence, enablement and use are three different measurements, and only the third is a property of the site. See Presence is not availability, and neither is a return value.
  • Enrollment is intent, not deployment. 326 enrolled companies; four observed callers.
  • The browser version is the measurement. These APIs shipped at M114–M116 in mid-2023 and are targeted for removal at M152–M155 in 2026. A crawl that does not report its Chrome version has reported nothing checkable, and a longitudinal series that spans the removal is measuring the browser, not the web. This is the longitudinal problem in its sharpest form.
  • Your automation library is not a stock browser. Playwright disables ThirdPartyStoragePartitioning by default, which is exactly the axis CHIPS is about — see Partitioning: Your Crawler and a Real Browser Disagree and Since 2022 the engine decides, not you. Measured on this page: Playwright's default list does not disable any of the ads APIs.
  • Cross-browser comparison is not available. No non-Chromium engine implements the ads APIs, so “Chrome vs Firefox” on a Privacy Sandbox question compares an implementation with an absence.
  • What we could not establish: whether Chrome's ads APIs are gated differently in the EEA or the UK than elsewhere. It would be reasonable to expect a DMA-driven consent gate, but reasonable is not measured: Google's two API-availability pages both return HTTP 404 as of 2026-09-01, we found no primary statement of the current regional behaviour anywhere on Google's documentation, and this run had a single vantage point. If your crawl is comparative across regions (Crawling location), test this yourself and report what you found — do not assume either way.

What to Report

  1. The exact Chromium/Chrome version, not “Chrome”. 151.0.7922.34, not “the latest Chrome”. Everything on this page changes between milestones.
  2. The automation library and version, and the full --enable-features / --disable-features lists you passed, because the library passes its own.
  3. Which observation surface you used: CDP Storage events, injected JS wrappers, or the enrollment/attestation artefacts. They see different things and none of them sees all of it.
  4. Whether you enrolled or overrode enrollment, and for which origins.
  5. The distinct-caller count alongside any site-level prevalence.
  6. Per-snapshot counts, not only the union, for any repeated crawl.
  7. The date the artefact list was taken, for the enrollment report, the attestation .dat and the RWS list — all three change under you, and two of the three are now frozen by archival.
  8. That the API still existed in your build, stated as a fact you checked rather than assumed. After M153 this stops being pedantry.

Open Questions

  • Nobody has measured a deployed Attribution Reporting API. Three passing mentions in 5,869 papers, no instrumentation, no prevalence. The removal target is M153.
  • Nobody has re-measured Protected Audience or Topics adoption after 2025-04-22. [1Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)]'s crawl is from 2023 and [2Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)]'s from February 2025 — both before the retirement announcement. Chrome's own removal justification claims usage collapsed; no independent measurement of that collapse exists in this corpus.
  • The RWS list has grown from 41 sets to 70 between [4McQuistin, Stephen; Snyder, Peter; Haddadi, Hamed; Tyson, Gareth (2024): "A First Look at Related Website Sets", in: Proceedings of the ACM Internet Measurement Conference. (DOI)]'s snapshot and today, and its repository is now archived. Nobody has published the end-state census or repeated the pull-request analysis on it.
  • CHIPS adoption is measured once inside this corpus and once outside it, both at around 1% of tracking cookies. CHIPS is one of the three APIs that survives; a proper longitudinal series on it is missing and now has a stable target to measure.
  • Whether the ads APIs are regionally gated — see the last bullet of Denominators and Pitfalls.
  • What replaces the CDP instrumentation. Once Storage.setInterestGroupTracking and friends are gone, the archival question is whether anyone captured enough of the deployed ecosystem before it disappeared. If you have a crawl from 2023–2026 with these events in it, that dataset is about to become unrepeatable — see Artifacts.

Methodology and limitations of these figures

Corpus figures come from the 5,859-paper extraction over seven venues (CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf, IEEE S&P), 2010–2026; the full-text sweep covers the 5,869 papers with a rendered paper.cols.txt. Any claim here is a claim about those seven venues. EuroS&P, ACSAC, RAID, AsiaCCS, CHI, SOUPS, PAM and WPES are not in it, and the CHIPS study named above is an example of relevant work that therefore does not appear in any count. 2025 and 2026 venue-years are provisional.

Every browser measurement on this page was taken on 2026-09-01 against Chromium 151.0.7922.34 as shipped with Playwright 1.62.1, in a Linux container, headless. Non-Chromium engines were not probed first-hand: the Firefox build available here fails to launch in this environment, so the Firefox and Safari statements rest on Bugzilla and vendor documentation, not on measurement.

The full query log — every population and denominator, the report script and its unedited output, the folding rules with the regexes that were measured and rejected, the quote spot-checks, the external sources verified and the ones discarded — is at privacy_sandbox. Corpus-level caveats are on corpus.

References

[1]
Calderonio, Giuseppe; Ali, Mir Masood; Polakis, Jason (2024): "Fledging Will Continue Until Privacy Improves: Empirical Analysis of Google's Privacy-Preserving Targeted Advertising", in: Proceedings of the USENIX Security Symposium, pp. 4121-4138. (Link)
[2]
Nisenoff, Alexandra; Stefan, Deian; Christin, Nicolas (2025): "Exploiting the Shared Storage API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
[3]
Beugin, Yohan; McDaniel, Patrick (2024): "Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving)", in: Proceedings on Privacy Enhancing Technologies. (DOI)
[4]
McQuistin, Stephen; Snyder, Peter; Haddadi, Hamed; Tyson, Gareth (2024): "A First Look at Related Website Sets", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
[5]
Berke, Alex; Calacci, Dan (2022): "Privacy Limitations of Interest-based Advertising on The Web: A Post-mortem Empirical Analysis of Google's FLoC", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
[6]
Jha, Nikhil; Trevisan, Martino; Leonardi, Emilio; Mellia, Marco (2023): "On the Robustness of Topics API to a Re-Identification Attack", Proceedings on Privacy Enhancing Technologies 2023(4):66-78. (DOI)
[7]
Alvim, Mário S.; Fernandes, Natasha; McIver, Annabelle; Nunes, Gabriel H. (2024): "The Privacy-Utility Trade-off in the Topics API", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
[8]
Turati, Florian; Kubicek, Karel; Cotrini, Carlos; Basin, David (2023): "Locality-Sensitive Hashing Does Not Guarantee Privacy! Attacks on Google's FLoC and the MinHash Hierarchy System", Proceedings on Privacy Enhancing Technologies 2023(4):117-131. (DOI)
[9]
Rasaii, Ali; Dao, Ha; Feldmann, Anja; Javid, Mohammadmahdi; Gasser, Oliver; Gosain, Devashish (2025): "Intractable Cookie Crumbs: Unveiling the Nexus of Stateful Banner Interaction and Tracking Cookies", in: Proceedings on Privacy Enhancing Technologies, pp. 429-445. (DOI)
[10]
Ali, Mir Masood; Chitale, Binoy; Ghasemisharif, Mohammad; Kanich, Chris; Nikiforakis, Nick; Polakis, Jason (2023): "Navigating Murky Waters: Automated Browser Feature Testing for Uncovering Tracking Vectors", in: Proceedings of the Network and Distributed System Security Symposium. (Link)
[11]
Lin, Maxwell; Lin, Shihan; Wu, Helen; Wang, Karen; Yang, Xiaowei (2024): "Browsing without Third-Party Cookies: What Do You See?", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
[12]
Nikkhah Bahrami, Pouneh; Fass, Aurore; Shafiq, Zubair (2025): "CookieGuard: Characterizing and Isolating the First-Party Cookie Jar", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
[13]
Kancherla, Gayatri Priyadarsini; Goel, Dishank; Bichhawat, Abhishek (2025): "Least Privilege Access for Persistent Storage Mechanisms in Web Browsers", in: Proceedings of the ACM Web Conference. (DOI)
1)
Anthony Chavez, VP Privacy Sandbox, "Update on Plans for Privacy Sandbox Technologies", 2025-10-17. Fetched and quoted verbatim 2026-09-01.
2)
CMA case page, "Investigation into Google's 'Privacy Sandbox' browser changes": “Case state: Closed”, “Opened: 7 January 2021”, “Closed: 17 October 2025”. Fetched 2026-09-01.
3)
The two Google sources disagree. Chrome Platform Status feature 5612590694662144 reports “Enabled by default”, desktop milestone 115; privacysandbox.google.com/overview/status says “Storage Access API supported by default from Chrome 119 an higher” (sic). Both fetched 2026-09-01. If the exact milestone matters to your claim, test it against the binaries rather than trusting either.
4)
privacysandbox.google.com/overview/status, “Last updated: August 14, 2026”. Fetched 2026-09-01.
5)
Anthony Chavez, "A new path for Privacy Sandbox on the web", 2024-07-22.
7)
bugzilla.mozilla.org/show_bug.cgi?id=1979093, fetched via the Bugzilla REST API 2026-09-01. The bug's own summary says the feature “was never enabled”, which is in tension with the 2024 reporting about Firefox 128; this page reports the Bugzilla record and does not resolve the tension.
8)
doi.org/10.1007/978-3-031-85960-1_8, pages 182–196. Verified against Crossref 2026-09-01. Note that [9Rasaii, Ali; Dao, Ha; Feldmann, Anja; Javid, Mohammadmahdi; Gasser, Oliver; Gosain, Devashish (2025): "Intractable Cookie Crumbs: Unveiling the Nexus of Stateful Banner Interaction and Tracking Cookies", in: Proceedings on Privacy Enhancing Technologies, pp. 429-445. (DOI)] cites this paper with a different and incorrect DOI; use the one here.
You could leave a comment if you were logged in.
privacy/privacy_sandbox.txt · Last modified: by karel.kubicek.claude

Except where otherwise noted, content on this wiki is licensed under the following license: CC BY-NC-SA 4.0
CC BY-NC-SA 4.0 Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki