Table of Contents
Cloudflare Radar
Cloudflare Radar Domain Rankings is a DNS-based ranking of popular pay-level domains, built from queries to 1.1.1.1. It is free, requires an API token, and has been a default input of Tranco since 1 August 2023. This page is the construction and API note that Website selection points at. It is not a second copy of that page, and it is not a catalogue of the rest of Radar (outages, BGP, TLS adoption, content categories).
A bucket is not a rank. The API gives an ordered list only for the top 100 (daily, last 24 hours, global and per country). Everything else is an unordered set: the top 1,000, the top 10,000, the top 1,000,000. There is no rank 5,000. Sampling “the Cloudflare Radar top 10k” as if it were a total order is inventing structure the file does not have. Beugin et al. used the ordered top 100 as a total order for exactly this reason [1Beugin, Yohan; McDaniel, Patrick (2024): "Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving)", in: Proceedings on Privacy Enhancing Technologies. (DOI)]. Wickramasinghe et al. took the top 2,000 — that is a bucket [2Wickramasinghe, Nimesha; Shaghaghi, Arash; Tsudik, Gene; Jha, Sanjay K. (2025): "SoK: Decoding the Enigma of Encrypted Network Traffic Classifiers", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)].
What this page is for
- Here: how Domain Rankings is built, which buckets exist, how the free API actually behaves, and what to put in a methods section.
- Website selection: why you would pick Radar rather than CrUX or Umbrella, and the DNS-list caveats that apply in full.
- Tranco: how Tranco turns those buckets into a virtual rank (geometric mean of the bounds) and mixes them with four other providers.
- Sampling and Longitudinal: drawing from a pinned file, and why a 2022 Tranco list and a 2024 Tranco list are different instruments partly because Radar joined the default set.
What to read first
- Cloudflare's own launch post, 30 September 2022 [3Martinho, Celso; Zejnilovic, Sabina (2022): "Goodbye, Alexa. Hello, Cloudflare Radar Domain Rankings". Cloudflare Blog. Published 2022-09-30 (Link)] — two models (head vs tail), popularity as estimated user-population size rather than query volume, and the bucket sizes. Read it for the instrument, not for today's dashboard chrome.
- The current Domain Rankings API docs — token,
/radar/ranking/top,/radar/datasets/ranking_top_<n>. Checked 2026-08-27. - [4Galloway, Tillson; Karakolios, Kleanthis; Ma, Zane; Perdisci, Roberto; Keromytis, Angelos D.; Antonakakis, Manos (2024): "Practical Attacks Against DNS Reputation Systems", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] — IEEE S&P 2024. A $10/month VPN was enough to push a name into Radar's top 100k bucket and, through it, into Tranco. Current, and the reason a DNS ranking is not hard to game just because Alexa is gone.
- [5Ruth, Kimberly; Kumar, Deepak; Wang, Brandon; Valenta, Luke; Durumeric, Zakir (2022): "Toppling Top Lists: Evaluating the Accuracy of Popular Website Lists", in: Proceedings of the 22nd ACM Internet Measurement Conference, pp. 374–387. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] — IMC 2022, before Radar Rankings existed. Their ground truth is Cloudflare's server-side HTTP request logs (CDN hits), not 1.1.1.1 resolver traffic. They found CrUX closest to those logs. Domain Rankings is a different Cloudflare product — DNS to 1.1.1.1, a population-size model — and did not exist in February 2022. Do not cite Ruth as a Radar-versus-CrUX accuracy number.
Two listings, not one
Queried from the public dashboard on 2026-08-27 (the HTML app is 403 to curl; Playwright rendered it), worldwide, “Last 7 days” for the page chrome, Updated: Aug 27, 2026:
| Rank | Domain | What that row is |
|---|---|---|
| 1 | google.com | website |
| 2 | googleapis.com | infrastructure |
| 3 | cloudflare.com | infrastructure / website |
| 4 | gstatic.com | infrastructure |
| 5 | apple.com | website |
| 6 | microsoft.com | website |
| 7 | facebook.com | website |
| 8 | amazonaws.com | infrastructure |
| 9 | googlevideo.com | infrastructure |
| 10 | fbcdn.net | infrastructure |
The latest Tranco daily list available that day (id 46W9X, generated 2026-08-26; the dated lookup for 2026-08-27 was still 404) started google.com, cloudflare.com, gstatic.com, facebook.com, microsoft.com. These are not prefixes of each other. Radar is a 1.1.1.1 view; it keeps CDN and API hostnames that a page-load ranking down-weights.
A second ranked table on the same dashboard is Top 100 Internet services (Google, Facebook, Apple, Microsoft, Instagram, …). That is not a domain list. Downloading it will not give you something you can crawl.
The dashboard itself warns that the top 100 and the trending lists “include domains with organic activity as well as domains with emerging malicious behavior.”1) Trending lists (TRENDING_RISE, TRENDING_STEADY) are a third ranking type on /radar/ranking/top. They are not a sampling frame.
How the ranking is built
Domain Rankings launched on 30 September 2022 [3Martinho, Celso; Zejnilovic, Sabina (2022): "Goodbye, Alexa. Hello, Cloudflare Radar Domain Rankings". Cloudflare Blog. Published 2022-09-30 (Link)]. Tranco's methodology page dates the list to 26 September 2022. The input is aggregated, anonymised DNS to 1.1.1.1, not HTTP hits on Cloudflare-operated websites. (HTTP traffic powers other Radar products. Mixing the two is how a methods section becomes un-reproducible.) Rows are pay-level domains. Cloudflare boils names to the registrable domain, with a short exception list for .co.uk-style third-level registrations [3Martinho, Celso; Zejnilovic, Sabina (2022): "Goodbye, Alexa. Hello, Cloudflare Radar Domain Rankings". Cloudflare Blog. Published 2022-09-30 (Link)].
Popularity is not query volume. The launch post's metric is “the estimated relative size of the user population that accesses a domain over some period of time”, using a bot-filtered proxy that is not a unique-user count [3Martinho, Celso; Zejnilovic, Sabina (2022): "Goodbye, Alexa. Hello, Cloudflare Radar Domain Rankings". Cloudflare Blog. Published 2022-09-30 (Link)]. One model, trained on the head, produces the ordered top 100. A second model, trained on a broader population with fewer features, produces a top million which is then cut into unordered buckets. The buckets exist because the tail of a top list is not a total order worth publishing — Scheitle et al. and Ruth et al. already said this; Cloudflare agreed and refused to fake ranks past 100.
Current listings, from the API docs (fetched 2026-08-27):
| Listing | Order | Window | Update | Geography |
|---|---|---|---|---|
| Top 100 | total order (rank 1 … 100) | last 24 hours | daily | global, and per country |
| Buckets 200, 500, 1k, 2k, 5k, 10k, 20k, 50k, 100k, 200k, 500k, 1M | unordered sets | last 7 days | weekly | global only |
The top-100 file is a prefix of nothing except itself. The top-1,000 bucket contains the top 100, but you cannot recover their order from the bucket file. Tranco, needing a number to feed Dowdall, replaces each bucket with the geometric mean of its bounds.2) That is Tranco's conversion, not Cloudflare's.
Licences, from Radar's own About page (rendered 2026-08-27): graphs and images on radar.cloudflare.com are CC BY 4.0; API data and direct downloads are CC BY-NC 4.0. If you ship the default Tranco list as part of a product, Radar's clause is the one that bites — see Tranco. Academic measurement with attribution is the intended use.
The ranking is manipulable
Galloway et al. generated names, queried them through a $10/month VPN, and watched three lists [4Galloway, Tillson; Karakolios, Kleanthis; Ma, Zane; Perdisci, Roberto; Keromytis, Angelos D.; Antonakakis, Manos (2024): "Practical Attacks Against DNS Reputation Systems", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)]. On Radar, which publishes 2LDs, they “consistently achieved a ranking in the top 100,000”. That is a bucket, not rank 1. Downstream, Tranco (which was already averaging Radar) put the same names at rank 1 million within 10 days and inside 500k within 14 days. The paper's headline “$10 … in just two weeks” is about that campaign, including Umbrella. Radar was the easy 2LD list in the middle, not a hardened replacement for Alexa.
If your study needs a list an adversary cannot cheaply join, Radar-alone is the wrong instrument. Tranco's default list has included Radar since 1 August 2023, so Galloway's names reached Tranco through that input [4Galloway, Tillson; Karakolios, Kleanthis; Ma, Zane; Perdisci, Roberto; Keromytis, Angelos D.; Antonakakis, Manos (2024): "Practical Attacks Against DNS Reputation Systems", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)]. CrUX is the page-load ranking Ruth et al. found closest to Cloudflare's HTTP logs in 2022 [5Ruth, Kimberly; Kumar, Deepak; Wang, Brandon; Valenta, Luke; Durumeric, Zakir (2022): "Toppling Top Lists: Evaluating the Accuracy of Popular Website Lists", in: Proceedings of the 22nd ACM Internet Measurement Conference, pp. 374–387. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)]; Galloway et al. did not evaluate it. The cost of faking CrUX is argued on Website selection, not measured in either paper.
Fetching a list
The API is free on every Cloudflare plan and refuses unauthenticated calls. On 2026-08-27, GET /client/v4/radar/ranking/top?limit=5 without a token returned HTTP 400, success: false, error code 9106, “Missing X-Auth-Key, X-Auth-Email or Authorization headers”. Create a Custom Token with Account → Radar → Read (first-request docs, fetched 2026-08-27).
There is no Tranco-style permanent id. A date plus a listing (ordered top 100 vs bucket size n) plus the SHA-256 of the saved CSV is the pin. The API response is a different object (JSON for /ranking/top; a domain list, sometimes with a header, for a bucket) — hash it too if you keep it. The dashboard CSV download is the same CC BY-NC 4.0 data; the graphs next to it are CC BY 4.0. Do not confuse them.
Endpoints this page uses:
| What you want | Call |
|---|---|
Ordered top 100 (optional location=US, optional date) | GET /radar/ranking/top?rankingType=POPULAR&limit=100 |
| Unordered bucket of size n | GET /radar/datasets/ranking_top_<n> |
| One name's rank (top 100) or bucket | GET /radar/ranking/domain/{domain} |
| List dataset ids / aliases | GET /radar/datasets?datasetType=RANKING_BUCKET |
limit greater than 100 on /ranking/top is not “give me the top 200 ordered”. The ordered object stops at 100. The script below refuses --top 200 instead of forwarding it.
The script talks to the same API the docs describe, writes a manifest, and prints a methods sentence. Without CLOUDFLARE_API_TOKEN it exits 2. That is the path this sitting can run:
$ python3 pin_radar.py --top 20 set CLOUDFLARE_API_TOKEN to a Cloudflare API token with Account > Radar, Read. https://developers.cloudflare.com/radar/get-started/first-request/ $ echo $? 2 $ python3 pin_radar.py --top 200 --top 200 is outside 1–100; the ordered list stops at 100. Use --bucket for a larger unordered prefix. $ echo $? 2
- pin_radar.py
#!/usr/bin/env python3 """Pin a Cloudflare Radar Domain Rankings snapshot. Talks to the Radar API (token required). Writes a CSV and a manifest whose `cite` line is the methods sentence. Hashes the API response and the saved CSV separately — they are not the same bytes. It does not draw a sample. export CLOUDFLARE_API_TOKEN=... python3 pin_radar.py python3 pin_radar.py --top 100 python3 pin_radar.py --top 100 --location US python3 pin_radar.py --bucket 1000 python3 pin_radar.py --bucket 1000000 --date 2026-08-20 python3 pin_radar.py --domain google.com `--top` is the ordered list and stops at 100. `--bucket` is an unordered prefix (200 … 1,000,000). `--domain` looks up one name's rank or bucket. Those three are mutually exclusive. `--location` is only valid with `--top`. """ from __future__ import annotations import argparse import csv import hashlib import json import os import sys import urllib.error import urllib.parse import urllib.request from datetime import datetime, timezone UA = "measuretheweb-pin-radar/1.0" API = "https://api.cloudflare.com/client/v4/radar" BUCKETS = ( 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, ) PERM = "Account > Radar, Read. https://developers.cloudflare.com/radar/get-started/first-request/" def token() -> str: if "CLOUDFLARE_API_TOKEN" not in os.environ: print( "set CLOUDFLARE_API_TOKEN to a Cloudflare API token with " f"{PERM}", file=sys.stderr, ) raise SystemExit(2) value = os.environ["CLOUDFLARE_API_TOKEN"] if value == "": print("CLOUDFLARE_API_TOKEN is set but empty", file=sys.stderr) raise SystemExit(2) return value def api_get(path: str, query: dict[str, str], tok: str) -> tuple[bytes, int]: qs = urllib.parse.urlencode(query) url = f"{API}{path}" if qs: url = f"{url}?{qs}" req = urllib.request.Request( url, headers={ "User-Agent": UA, "Authorization": f"Bearer {tok}", }, ) try: with urllib.request.urlopen(req, timeout=60) as resp: return resp.read(), resp.status except urllib.error.HTTPError as e: body = e.read() print(f"{url}: HTTP {e.code} {body[:300]!r}", file=sys.stderr) raise SystemExit(1) def parse_json(raw: bytes, url: str) -> dict: payload = json.loads(raw.decode()) if payload["success"] is not True: print(f"{url}: success!=true {payload}", file=sys.stderr) raise SystemExit(1) return payload["result"] def write_csv(path: str, rows: list[list[str]]) -> None: with open(path, "w", encoding="utf-8", newline="") as handle: csv.writer(handle).writerows(rows) def sha256_bytes(data: bytes) -> str: return hashlib.sha256(data).hexdigest() def sha256_file(path: str) -> str: with open(path, "rb") as handle: return hashlib.sha256(handle.read()).hexdigest() def main() -> int: ap = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, ) ap.add_argument("--top", type=int, default=None, help="ordered prefix, 1–100") ap.add_argument("--bucket", type=int, default=None, help="unordered bucket size") ap.add_argument("--domain", default=None, help="look up one domain") ap.add_argument("--location", default=None, help="alpha-2 country code, only with --top") ap.add_argument("--date", default=None, help="YYYY-MM-DD; latest if omitted") ap.add_argument("--out", default="pin_radar.manifest.json") args = ap.parse_args() modes = [x for x in (args.top, args.bucket, args.domain) if x is not None] if len(modes) > 1: print("give one of --top, --bucket, --domain", file=sys.stderr) return 2 if args.location is not None and args.top is None: print("--location is only valid with --top", file=sys.stderr) return 2 if args.top is None and args.bucket is None and args.domain is None: args.top = 100 if args.top is not None and (args.top < 1 or args.top > 100): print( f"--top {args.top} is outside 1–100; the ordered list stops at 100. " "Use --bucket for a larger unordered prefix.", file=sys.stderr, ) return 2 if args.bucket is not None and args.bucket not in BUCKETS: print( f"--bucket {args.bucket} is not a published size. " f"Allowed: {', '.join(str(b) for b in BUCKETS)}", file=sys.stderr, ) return 2 tok = token() fetched_at = datetime.now(timezone.utc).isoformat() query: dict[str, str] = {} if args.date is not None: query["date"] = args.date if args.top is not None: query["limit"] = str(args.top) query["rankingType"] = "POPULAR" if args.location is not None: query["location"] = args.location path = "/ranking/top" raw, _status = api_get(path, query, tok) result = parse_json(raw, path) rows_out = [["rank", "domain"]] for item in result["top_0"]: rows_out.append([str(item["rank"]), item["domain"]]) if len(rows_out) - 1 != args.top: print( f"expected {args.top} ranked rows, got {len(rows_out) - 1}", file=sys.stderr, ) return 1 loc = args.location if args.location is not None else "WW" csv_path = f"radar_top{args.top}_{loc}.csv" write_csv(csv_path, rows_out) response_digest = sha256_bytes(raw) csv_digest = sha256_file(csv_path) date_note = args.date if args.date is not None else "latest" cite = ( f"We used Cloudflare Radar Domain Rankings ordered top {args.top} " f"(location {loc}, date {date_note}), " f"GET /radar/ranking/top, " f"response SHA-256 {response_digest}, CSV SHA-256 {csv_digest}." ) manifest = { "source": "cloudflare-radar", "mode": "top", "fetched_at": fetched_at, "path": path, "query": query, "location": loc, "date": date_note, "rows": args.top, "head": rows_out[1:6], "response_sha256": response_digest, "csv_sha256": csv_digest, "csv": csv_path, "meta": result["meta"], "cite": cite, } elif args.bucket is not None: alias = f"ranking_top_{args.bucket}" path = f"/datasets/{alias}" raw, _status = api_get(path, query, tok) text = raw.decode() domains = [ln.strip() for ln in text.splitlines() if ln.strip()] if domains and domains[0].lower() == "domain": domains = domains[1:] if len(domains) != args.bucket: print( f"expected {args.bucket} domain rows from {alias}, got {len(domains)}", file=sys.stderr, ) return 1 csv_path = f"radar_bucket_{args.bucket}.csv" write_csv(csv_path, [["domain"], *[[d] for d in domains]]) response_digest = sha256_bytes(raw) csv_digest = sha256_file(csv_path) date_note = args.date if args.date is not None else "latest" cite = ( f"We used the Cloudflare Radar Domain Rankings unordered top-{args.bucket} " f"bucket (date {date_note}), GET /radar/datasets/{alias}, " f"response SHA-256 {response_digest}, CSV SHA-256 {csv_digest}." ) manifest = { "source": "cloudflare-radar", "mode": "bucket", "fetched_at": fetched_at, "path": path, "query": query, "alias": alias, "date": date_note, "rows": len(domains), "head": domains[:5], "response_sha256": response_digest, "csv_sha256": csv_digest, "csv": csv_path, "cite": cite, } else: path = f"/ranking/domain/{urllib.parse.quote(args.domain)}" raw, _status = api_get(path, query, tok) result = parse_json(raw, path) details = result["details_0"] digest = sha256_bytes(raw) date_note = args.date if args.date is not None else "latest" cite = ( f"Cloudflare Radar Domain Rankings lookup of {args.domain} " f"(date {date_note}): {json.dumps(details, sort_keys=True)}." ) csv_path = None manifest = { "source": "cloudflare-radar", "mode": "domain", "fetched_at": fetched_at, "path": path, "query": query, "domain": args.domain, "date": date_note, "details": details, "bytes_sha256": digest, "cite": cite, } with open(args.out, "w", encoding="utf-8") as handle: json.dump(manifest, handle, indent=2) handle.write("\n") print(json.dumps(manifest, indent=2)) wrote = args.out if csv_path is None else f"{args.out} and {csv_path}" print(f"wrote {wrote}", file=sys.stderr) return 0 if __name__ == "__main__": raise SystemExit(main())
Use in this corpus
“Cloudflare Radar” in this seven-venue corpus is mostly not Domain Rankings. A full-text sweep for cloudflare next to radar, unioned with the schema's sourceList and tools[] fields, hits 32 papers. A hand verdict on each one:
| Role | Papers of 32 | What they used |
|---|---|---|
| other Radar product (BGP, TLS, outages, HTTP, categories, …) | 17 | not a ranking |
| Domain Rankings as a sampling frame | 5 | the list this page is about |
| citation / related work only | 3 | named, not used |
| named only as a Tranco input | 3 | they crawled Tranco |
| ingested the ranking API or the OpenINTEL Radar zone file | 2 | IYP; OpenINTEL from October 2022 |
| looked up popularity of domains they already had | 1 | alongside Tranco |
| attacked the ranking | 1 | [4Galloway, Tillson; Karakolios, Kleanthis; Ma, Zane; Perdisci, Roberto; Keromytis, Angelos D.; Antonakakis, Manos (2024): "Practical Attacks Against DNS Reputation Systems", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] |
Nine papers used Domain Rankings (sample, lookup, ingest, or attack): 0.2% of the 5,859-paper corpus, 3 of 1,120 crawling papers. First use is 2024. The 2025–2026 rows are provisional.
The schema's sourceList is the wrong query on its own. It fires on 6 papers; 2 of those 6 used Radar for BGP/RPKI, not rankings, and 5 of the 9 ranking-used papers have no sourceList hit. A ranking list is usually not recorded as a tool either (5 tools[] hits, one of them a column-spliced “Cloudflare's Radar API” for categories). Homographs the regex does not match — Tracker Radar, DappRadar, Weather Radar, Qrator.Radar — are a different problem; they are 0 overlap with this union.
The six papers this page cites for a Domain Rankings use:
| Paper | Role | What they took |
|---|---|---|
| Galloway et al., IEEE S&P 2024 [4Galloway, Tillson; Karakolios, Kleanthis; Ma, Zane; Perdisci, Roberto; Keromytis, Angelos D.; Antonakakis, Manos (2024): "Practical Attacks Against DNS Reputation Systems", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] | attack | VPN campaign into the top-100k bucket, then into Tranco |
| Beugin et al., PoPETs 2024 [1Beugin, Yohan; McDaniel, Patrick (2024): "Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving)", in: Proceedings on Privacy Enhancing Technologies. (DOI)] | sample | ordered top 100, used as a total order |
| Wickramasinghe et al., IEEE S&P 2025 [2Wickramasinghe, Nimesha; Shaghaghi, Arash; Tsudik, Gene; Jha, Sanjay K. (2025): "SoK: Decoding the Enigma of Encrypted Network Traffic Classifiers", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] | sample | top 2,000 bucket |
| Ahmad et al., PoPETs 2026 [6Ahmad, Sumeer; Polychronakis, Michalis; Benson, Theophilus A.; Hoang, Nguyen Phong (2026): "More Space, Less Privacy? Measuring the Effectiveness of IP-based Website Fingerprinting in IPv6", in: Proceedings on Privacy Enhancing Technologies. (DOI)] | sample | top 1M merged with Tranco list YXQ4G on 20 January 2024 |
| Misell et al., IMC 2025 [7Misell, Q.; Steurer, Florian; Zirngibl, Johannes; Feldmann, Anja; Fiebig, Tobias (2025): "Measuring the deployment of DNSSEC Bootstrapping Using Authenticated Signals", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] | sample | Radar as one of four top lists |
| Wu et al., TheWebConf 2026 [8Wu, Wenhao; Wang, Zhaohua; Li, Zihan; Li, Qinxin; Xia, Yiming; Gao, Chuan; Zhang, Guangxing; Li, Zhenyu (2026): "Tracking the Stray Sheep: Understanding DNS Response Manipulation in the Wild", in: Proceedings of the ACM Web Conference. (DOI)] | sample | “global popularity rankings” including Radar |
The other three ranking-used papers (not cited above): Internet Yellow Pages ingested radar/ranking/top and radar/datasets (IMC 2024); OpenINTEL added the Radar zone in October 2022 (IMC 2025 sibling-prefixes); a USENIX 2025 CAPTCHA paper looked up popularity alongside Tranco.
What to report
- Domain Rankings, not “Cloudflare Radar”. The same brand also publishes outage detectors and TLS pie charts.
- The date (and timezone) of the snapshot, the listing (ordered top 100 vs bucket size n), and the location if you used a country top 100.
- The SHA-256 of the saved CSV, or the file in the artefact. Hash the API response separately: it is not the same bytes. There is no permanent id to cite instead.
- That the tail is unordered, if you used a bucket.
- The licence: CC BY-NC 4.0 for the data.
- If Radar reached you through Tranco, cite the Tranco list id and say Radar was in that configuration. See Tranco.
Related pages
- Website selection — which ranking to pick; DNS-list caveats.
- Tranco — Radar as of 1 August 2023 is one of five default providers.
- CrUX — the page-load ranking. Not yet written.
- Sampling / Longitudinal — pinning and comparability.
- Corpus — seven-venue scope and the 2025–2026 edge.
Queries, the unedited report, the role table, quote checks, and every rejected source are on cloudflare_radar.
Methodology and limitations of these figures
Corpus figures come from scripts/report_radar.mjs against data/extract/run1 (5,859 papers). The page population is a hand map over a 32-paper union, not a sourceList regex. Live API facts were fetched 2026-08-27; the dashboard top 10 was read out of a Playwright render because radar.cloudflare.com returns 403 to curl. This sitting had no CLOUDFLARE_API_TOKEN, so the authenticated download path is specified and the missing-token path is the one that was executed. 2025–2026 rows are starred because those venue-years are incomplete by construction.
- [1]
- Beugin, Yohan; McDaniel, Patrick (2024): "Interest-disclosing Mechanisms for Advertising are Privacy-Exposing (not Preserving)", in: Proceedings on Privacy Enhancing Technologies. (DOI)
- [2]
- Wickramasinghe, Nimesha; Shaghaghi, Arash; Tsudik, Gene; Jha, Sanjay K. (2025): "SoK: Decoding the Enigma of Encrypted Network Traffic Classifiers", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [3]
- Martinho, Celso; Zejnilovic, Sabina (2022): "Goodbye, Alexa. Hello, Cloudflare Radar Domain Rankings". Cloudflare Blog. Published 2022-09-30 (Link)
- [4]
- Galloway, Tillson; Karakolios, Kleanthis; Ma, Zane; Perdisci, Roberto; Keromytis, Angelos D.; Antonakakis, Manos (2024): "Practical Attacks Against DNS Reputation Systems", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [5]
- Ruth, Kimberly; Kumar, Deepak; Wang, Brandon; Valenta, Luke; Durumeric, Zakir (2022): "Toppling Top Lists: Evaluating the Accuracy of Popular Website Lists", in: Proceedings of the 22nd ACM Internet Measurement Conference, pp. 374–387. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)
- [6]
- Ahmad, Sumeer; Polychronakis, Michalis; Benson, Theophilus A.; Hoang, Nguyen Phong (2026): "More Space, Less Privacy? Measuring the Effectiveness of IP-based Website Fingerprinting in IPv6", in: Proceedings on Privacy Enhancing Technologies. (DOI)
- [7]
- Misell, Q.; Steurer, Florian; Zirngibl, Johannes; Feldmann, Anja; Fiebig, Tobias (2025): "Measuring the deployment of DNSSEC Bootstrapping Using Authenticated Signals", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [8]
- Wu, Wenhao; Wang, Zhaohua; Li, Zihan; Li, Qinxin; Xia, Yiming; Gao, Chuan; Zhang, Guangxing; Li, Zhenyu (2026): "Tracking the Stray Sheep: Understanding DNS Response Manipulation in the Wild", in: Proceedings of the ACM Web Conference. (DOI)
