Browser Monster Index · About the data
Use it, cite it, build on it
The Index is public data. Here’s how you can reuse it, how to get a copy that never changes, and what every column means. Or explore it in the browser.
Licence and credit
Creative Commons Attribution-NonCommercial 4.0
Free for journalism, research, teaching and personal projects, with credit. For commercial use, email hello@browsermonster.com.
Suggested credit
Browser Monster Index, accessed 24 October 2026. browsermonster.com/data
Monthly releases
Frozen copies that never change
The live data changes as people check sites. On the 1st of every month we freeze a copy, so a number you quote can always be checked. The first release, 2026-10, is cut on 1 November.
API
Read-only, no key needed, open to any website
- GET /api/data/v1/sites?grade=F&sort=-before
- GET /api/data/v1/companies?sector=News
- GET /api/data/v1/sites?format=csv
- GET /api/data/v1/releases
- GET /api/data/v1/dictionary
Same filters as the explore page (sector, grade, flag, cmp, company, country, q, sort, page, size). Up to 900 requests an hour; please cache.
Data dictionary 18 columns · show
| Column | Type | Meaning |
|---|---|---|
| domain | text | The website, without www. |
| sector | text | Our sector label for the site. Empty if we haven’t labelled it. |
| grade | text | A to F. A means little tracking seen; F means heavy tracking seen. |
| score | integer | 0–100, the score behind the grade. Higher is better. See /methodology. |
| tracking_companies | integer | Distinct tracking companies seen across our three visits. |
| cross_site_companies | integer | Of those, companies that can follow people across sites (advertising, social, identity, session replay). |
| cross_site_before_choice | integer | Cross-site companies that loaded as the page opened, before any cookie choice. |
| cross_site_after_reject | integer | Cross-site companies that loaded new requests after we clicked reject. Empty if we couldn’t click reject. |
| no_reject_button | boolean | True if the first screen of the banner had no reject option. |
| paid_option_text | text | The banner text, if it offered a paid subscription instead of rejecting. |
| tcf_partners | integer | Number of advertising partners the consent tool listed (IAB TCF), if it said. |
| consent_tool | text | The cookie-banner platform we recognised, if any. |
| fingerprinting | boolean | True if a script used canvas, WebGL, audio or font fingerprinting. |
| session_recording | boolean | True if a session-recording service loaded. |
| data_brokers | integer | Known data brokers seen. |
| checked_at | date-time | When the check behind these numbers ran (UTC, ISO 8601). |
| company_ids | text[] | IDs of every tracking company seen (downloads only; see /companies/{id}). |
| server_countries | text[] | ISO country codes of tracker servers the page sent requests to, located from London (downloads only). |
The five tables
- Sites: One row per published site: its grade and what we saw on its homepage.
- Companies: One row per tracking company: how many of the matching sites it was seen on, and when.
- Countries: One row per country where tracker servers were located: how many sites sent data there.
- Consent tools: One row per cookie-banner platform: how sites using it behave.
- Sectors: One row per sector: averages across its sites.
These are observations from one location at one time, homepage only; ads and banners change between visits. Some requests after rejecting may be strictly necessary services. Nothing here is proof that a site broke the law. A site appears once it’s on our list or two different people have checked it. Who asked for a check is never part of the data.