This is an old revision of the document!
When the Website Notices Your Crawler
A crawl that is blocked does not fail loudly. It returns a page, a status code and a
timestamp, and your pipeline records all three. What it does not record is that the
page you got is not the page a person gets — and every number you compute downstream
inherits that difference without carrying a flag for it.
This page is about that difference: what makes an automated client identifiable, what
happens when it is identified, and what a reviewer will expect you to have measured.
It is not an anti-detection cookbook. Evading a site's access controls is a
research-ethics decision before it is an engineering one, and it belongs on
Ethics. The advice here points the other way: measure the obstruction
and report it, because the obstruction is data about your sample, and the sample is
what your paper is actually about.
Three neighbours cover adjacent ground. Crawler compares the libraries
that drive a browser and how visible each is. Crawling location covers the
one detection input you choose before you write any code — where your packets come
from. LLM Agents covers a different surface entirely: an
LLM-driven agent is detected, and blocked, by mechanisms aimed at a category that did
not exist when most of this literature was written.
What a Blocked Crawl Does to Your Number
The reason to care is not that you lose sites. It is which sites you lose.
Bot management is not deployed at random. It is bought by sites with something to
protect and the budget to protect it: large e-commerce, banking, ticketing, travel,
social platforms, anything behind an enterprise CDN. Those are disproportionately the
high-ranked, high-traffic sites — the ones your top-N list oversamples on purpose,
and the ones whose behaviour your paper is most likely to be about. A 10% non-load rate
that falls entirely on the top 2,000 sites is not 10% noise; it is a systematic hole
exactly where your signal is.
That last step is an inference, not a measurement, and this page is careful about
saying so: no paper in this corpus reports a block rate broken down by popularity rank.
It follows from where the products are sold and it is consistent with the shape of the
losses individual papers report, and it is the first of the open questions below. What
is measured is everything after it.
Ahmad et al. [2Ahmad, Syed Suleman; Dar, Muhammad Daniyal; Zaffar, Muhammad Fareed; Vallina-Rodriguez, Narseo; Nithyanand, Rishab (2020): "Apophanies or Epiphanies? How Crawlers Impact Our Understanding of the Web", in: Proceedings of The Web Conference, pp. 271-280. (DOI)] make the general form of this argument: what a
crawler sees is a function of how the crawler is built, and conclusions drawn from
crawl data can be artefacts of the instrument. Jueckstock et al. [3Jueckstock, Jordan; Sarker, Shaown; Snyder, Peter; Beggs, Aidan; Papadopoulos, Panagiotis; Varvello, Matteo; Livshits, Benjamin; Kapravelos, Alexandros (2021): "Towards Realistic and Reproducible Web Crawl Measurements", in: Proceedings of the ACM Web Conference. (DOI)]
measured the specific version of it — crawl configuration and vantage point change what
the web shows you — and Zeber et al. [4Zeber, David; Bird, Sarah; Oliveira, Camila; Rudametkin, Walter; Segall, Ilana; Wolls´en, Fredrik; Lopatka, Martin (2020): "The Representativeness of Automated Web Crawls as a Surrogate for Human Browsing", in: Proceedings of The Web Conference 2020, pp. 167–178. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] measured how far
automated crawls diverge from real human browsing. Annamalai et al. [5Annamalai, Meenatchi Sundaram Muthu Selva; De Cristofaro, Emiliano; Bilogrevic, Igor (2025): "Beyond the Crawl: Unmasking Browser Fingerprinting in Real User Interactions", in: Proceedings of the ACM Web Conference. (DOI)]
ran the comparison again in 2025 with real users alongside a crawler and found the
crawler's failures concentrated in 4XX responses tied to bot detection.
Four shapes of obstruction, in increasing order of danger:
| Shape | What you get | Why it ranks here |
| Hard block | HTTP 403, 429, a connection reset, or an “Access Denied” page | Loud. Your pipeline sees a non-200 and you can count it. |
| Interactive challenge | A CAPTCHA, a JavaScript challenge, an interstitial | Loud if you look. A challenge page is HTTP 200 with a full DOM, so a crawler that only checks the status code records it as a successful visit. |
| Degraded response | The page loads, but third-party scripts, ads or personalisation do not | Quiet. You measure “this site has fewer trackers” and publish it. |
| Cloaking | A different, plausible page, served only to you | Silent and indistinguishable from a finding. This is the one that ends up in the abstract. |
Cloaking is not hypothetical and it is not confined to phishing. Wang et al.
[6Wang, David Y.; Savage, Stefan; Voelker, Geoffrey M. (2011): "Cloak and dagger: dynamics of web search cloaking", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] characterised search cloaking as far back as 2011; Invernizzi et al.
[7Invernizzi, Luca; Thomas, Kurt; Kapravelos, Alexandros; Comanescu, Oxana; Picod, Jean-Michel; Bursztein, Elie (2016): "Cloak of Visibility: Detecting When Machines Browse a Different Web", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] built the canonical measurement of it, showing systematic
serving of different content to machines; Zhang et al. [8Zhang, Penghui; Oest, Adam; Cho, Haehyun; Sun, Zhibo; Johnson, RC; Wardman, Brad; Sarker, Shaown; Kapravelos, Alexandros; Bao, Tiffany; Wang, Ruoyu; Shoshitaishvili, Yan; Doupé, Adam; Ahn, Gail-Joon (2021): "CrawlPhish: Large-scale Analysis of Client-side Cloaking Techniques in Phishing", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] measured
client-side cloaking specifically aimed at security crawlers; and Szurdi et al.
[9Szurdi, Janos; Luo, Meng; Kondracki, Brian; Nikiforakis, Nick; Christin, Nicolas (2021): "Where are you taking me?Understanding Abusive Traffic Distribution Systems", in: Proceedings of the ACM Web Conference. (DOI)] showed the quantitative form directly — driving the same traffic
distribution systems with a crawler persona and a human persona, the crawler was
explicitly blocked 5 percentage points more often, and covertly blocked — sent to
a parked or error page — at least 8 points more often. The covert number is larger
than the overt one. That is the whole problem in one measurement.
The practical consequence. A status-code check is not a load check. If your
pipeline's definition of “successfully crawled” is response.status == 200, you are
counting challenge pages, interstitials and cloaked pages as successes, and their
content is flowing into your denominators.
The Detection Surface, Layer by Layer
A bot-management product does not run one test. It scores a request against signals
from several layers at once, and the layers differ in how cheap they are to read and
how much you can do about them. Ordered from the network up:
| Layer | What it reads | How much it costs the site | What you can honestly do |
| Network | ASN and IP reputation, datacenter vs residential vs mobile address space, request rate per address | Nothing — it is a lookup | Choose the vantage point deliberately and report it. See Crawling location. |
| Transport | The TLS ClientHello fingerprint (JA3/JA4): cipher order, extension order, ALPN | Nothing — the handshake is already parsed | Nothing, if you use a normal browser. A raw HTTP client fingerprints as a raw HTTP client. |
| HTTP | Header set, header order, HTTP/2 SETTINGS and priority frames, User-Agent coherence | Nothing | Drive a real browser rather than an HTTP library. |
| Browser runtime | navigator.webdriver, missing or extra JS APIs, headless-specific values, CDP artefacts, fingerprint self-contradictions | One script execution | This is where a headless/headful choice and a driver choice actually land. |
| Behaviour | Mouse movement, scroll, timing between actions, dwell time, navigation graph | Telemetry over a session | Interact realistically if your research question needs interaction — see Interaction. |
| Challenge | Whatever the client does when handed a CAPTCHA, a proof-of-work puzzle or a JS challenge | User friction, so it is reserved for suspicious scores | Detect it and count it. |
The browser-runtime layer, dated
This is the layer the literature has actually studied, and the layer that has moved most.
a W3C Recommendation since 05 June 2018 and defines the property as returning
''true'' when the browser's //webdriver-active// flag is set; Level 2 is still a
Working Draft, dated 02 July 2026, and carries the same definition.(([[https://www.w3.org/TR/webdriver1/|www.w3.org/TR/webdriver1]] and [[https://www.w3.org/TR/webdriver2/|www.w3.org/TR/webdriver2]], both fetched 2026-08-29. Note that ''w3.org'' returns HTTP 403 to a browser User-Agent string and 200 to plain ''curl'' — a detection rule pointed the opposite way from the ones this page is about.)) Any
Selenium, Puppeteer or Playwright session sets it by default. It is the single
cheapest automation check in existence and the field barely discusses it: **11
papers in the whole corpus name it.**
* **Chrome still ships the automation switch.** ''--enable-automation'' and the
"controlled by automated test software" infobar are both present in the Chromium
tree today.((''content/public/common/content_switches.cc'' defines ''kEnableAutomation'' with the comment "Enable indication that browser is controlled by automation"; ''chrome/browser/ui/startup/automation_infobar_delegate.cc'' defines the infobar and its ''IDS_CONTROLLED_BY_AUTOMATION'' string. Both read from ''chromium.googlesource.com/chromium/src/+/HEAD'' on 2026-08-29.))
* **"Headless" no longer means one thing.** Since Chrome 132 the old headless
implementation is available only as a separate ''chrome-headless-shell'' binary;
plain ''--headless'' now selects a unified mode that shares its code with headful
Chrome.(([[https://developer.chrome.com/docs/chromium/headless|developer.chrome.com/docs/chromium/headless]], fetched 2026-08-29.)) Playwright still ships a regular Chromium for headed runs and a separate
headless shell for headless ones.(([[https://playwright.dev/docs/browsers|playwright.dev/docs/browsers]], fetched 2026-08-29.)) So **"we ran headless Chrome" is now an
ambiguous sentence**, and which binary you meant changes how detectable you were.
Only 12.5% of crawling papers say headless or headful at all.
* **Fingerprint //inconsistency// beat fingerprint //content//.** Vastel et al.
{[vastel2018_scanner]} established the method in 2018: an instrumented or spoofed
browser is identified not by any one attribute but by attributes that contradict
each other. Wu et al. {[wu2023_manyfaces]} characterised adversarial fingerprints at
billion-request scale on commercial sites, and Venugopalan et al.
{[venugopalan2025_inconsistent]} ran the current version of the measurement: a honey
site behind two commercial anti-bot services (DataDome and BotD), fed by 20
commercial bot services selling "undetectable" traffic, over half a million
requests. **This is the 2025 state of the art and it is an inconsistency detector.**
* **Framework-specific detection exists.** Krumnow et al. {[krumnow2022_gullible]}
studied how detectable OpenWPM specifically is, and how widely OpenWPM detection is
deployed. A crawler that many papers share is worth writing a signature for.
What is dated, and what is current
The corpus rewards methods that were written up, which biases any ranking toward
whatever was fashionable mid-window. Dating each strand explicitly:
| Strand | Peak in this corpus | Status now |
| Breaking text CAPTCHAs with a bespoke solver | 2010–2020 | Superseded as a research question. Shi et al. [14Shi, Chenghui; Ji, Shouling; Liu, Qianjun; Liu, Changchang; Chen, Yuefeng; He, Yuan; Liu, Zhe; Beyah, Raheem; Wang, Ting (2020): "Text Captcha Is Dead? A Large Scale Deployment and Empirical Study", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] asked whether text CAPTCHA was dead in 2020; the answer settled. |
| Cloaking measurement against security crawlers | 2011–2022 | Still current, still under-cited outside phishing research. [6Wang, David Y.; Savage, Stefan; Voelker, Geoffrey M. (2011): "Cloak and dagger: dynamics of web search cloaking", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] [7Invernizzi, Luca; Thomas, Kurt; Kapravelos, Alexandros; Comanescu, Oxana; Picod, Jean-Michel; Bursztein, Elie (2016): "Cloak of Visibility: Detecting When Machines Browse a Different Web", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] [8Zhang, Penghui; Oest, Adam; Cho, Haehyun; Sun, Zhibo; Johnson, RC; Wardman, Brad; Sarker, Shaown; Kapravelos, Alexandros; Bao, Tiffany; Wang, Ruoyu; Shoshitaishvili, Yan; Doupé, Adam; Ahn, Gail-Joon (2021): "CrawlPhish: Large-scale Analysis of Client-side Cloaking Techniques in Phishing", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] [15Zhang, Penghui; Sun, Zhibo; Kyung, Sukwha; Behrens, Hans Walter; Basque, Zion Leonahenahe; Cho, Haehyun; Oest, Adam; Wang, Ruoyu; Bao, Tiffany; Shoshitaishvili, Yan; Ahn, Gail-Joon; Doupé, Adam (2022): "I'm SPARTACUS, No, I'm SPARTACUS: Proactively Protecting Users from Phishing by Intentionally Triggering Cloaking Behavior", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] |
| Using a human-verification step as the cloak | 2020–2024 | Current, and the reason a CAPTCHA is not only your problem. Maroofi et al. [16Maroofi, Sourena; Korczynski, Maciej; Duda, Andrzej (2020): "Are You Human?: Resilience of Phishing Detection to Evasion Techniques Based on Human Verification", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] showed phishing pages putting a human-verification step in front of content specifically to defeat detection crawlers; Teoh et al. [17Teoh, Xiwen; Lin, Yun; Liu, Ruofan; Huang, Zhiyong; Dong, Jin Song (2024): "PhishDecloaker: Detecting CAPTCHA-cloaked Phishing Websites via Hybrid Vision-based Interactive Models", in: Proceedings of the USENIX Security Symposium. (Link)] built the counter-measurement. |
| Server-side bot classification from request logs | 2020–2022 | Current but industrial. [18Jan, Steve T. K.; Hao, Qingying; Hu, Tianrui; Pu, Jiameng; Oswal, Sonal; Wang, Gang; Viswanath, Bimal (2020): "Throwing Darts in the Dark? Detecting Bots with Limited Data using Neural Data Augmentation", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] [19Li, Xigao; Azad, Babak Amin; Rahmati, Amir; Nikiforakis, Nick (2021): "Good Bot, Bad Bot: Characterizing Automated Browsing Activity", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] [20Herley, Cormac (2022): "Automated Detection of Automated Traffic", in: Proceedings of the USENIX Security Symposium. (Link)] |
| Browser-fingerprint inconsistency detection | 2018–2025 | Current state of the art. [10Vastel, Antoine; Laperdrix, Pierre; Rudametkin, Walter; Rouvoy, Romain (2018): "Fp-Scanner: The Privacy Implications of Browser Fingerprint Inconsistencies", in: Proceedings of the USENIX Security Symposium. (Link)] [11Wu, Shujiang; Sun, Pengfei; Zhao, Yao; Cao, Yinzhi (2023): "Him of Many Faces: Characterizing Billion-scale Adversarial and Benign Browser Fingerprints on Commercial Websites", in: Proceedings of the Network and Distributed System Security Symposium. (Link)] [12Venugopalan, Hari; Munir, Shaoor; Ahmed, Shuaib; Wang, Tangbaihe; King, Samuel T.; Shafiq, Zubair (2025): "FP-Inconsistent: Measurement and Analysis of Fingerprint Inconsistencies in Evasive Bot Traffic", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] |
| CAPTCHA solved by a general-purpose model | 2023–2026 | The live front. [21Searles, Andrew; Nakatsuka, Yoshimichi; Ozturk, Ercan; Paverd, Andrew; Tsudik, Gene; Enkoji, Ai (2023): "An Empirical Study & Evaluation of Modern CAPTCHAs", in: Proceedings of the USENIX Security Symposium. (Link)] [22Teoh, Xiwen; Lin, Yun; Li, Siqi; Liu, Ruofan; Sollomoni, Avi; Harel, Yaniv; Dong, Jin Song (2025): "Are CAPTCHAs Still Bot-hard? Generalized Visual CAPTCHA Solving with Agentic Vision Language Model", in: Proceedings of the USENIX Security Symposium. (Link)] [23Qi, Minfeng; He, Dongyang; Wang, Qin; Zhang, Lefeng (2026): "VIPER Strike: Defeating Visual Reasoning CAPTCHAs via Structured Vision–Language Inference", in: Proceedings of the USENIX Security Symposium. (Link)] |
| Blocking crawlers because they are AI training crawlers | 2025–2026 | New, and orthogonal to everything above. [24Liu, Enze; Luo, Elisa; Shan, Shawn; Voelker, Geoffrey M.; Zhao, Ben Y.; Savage, Stefan (2025): "Somesite I Used To Crawl: Awareness, Agency and Efficacy in Protecting Content Creators From AI Crawlers", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] [25Cui, Jian; Zha, Mingming; Wang, XiaoFeng; Liao, Xiaojing (2025): "The Odyssey of robots.txt Governance: Measuring Convention Implications of Web Bots in Large Language Model Services", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] [26Kim, Taein; Bock, Karstan; Luo, Claire; Liswood, Amanda; Poroslay, Chloe; Wenger, Emily (2025): "Scrapers Selectively Respect robots.txt Directives: Evidence From a Large-Scale Empirical Study", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] |
The last two rows rest on the corpus's thinnest years — 2025 and 2026 are provisional
here (see Use in Publications below) — so treat them as a direction of travel rather
than as settled counts. But the direction is not ambiguous: Teoh et al.
[22Teoh, Xiwen; Lin, Yun; Li, Siqi; Liu, Ruofan; Sollomoni, Avi; Harel, Yaniv; Dong, Jin Song (2025): "Are CAPTCHAs Still Bot-hard? Generalized Visual CAPTCHA Solving with Agentic Vision Language Model", in: Proceedings of the USENIX Security Symposium. (Link)] solved visual CAPTCHAs with an agentic vision-language model, and
Qi et al. [23Qi, Minfeng; He, Dongyang; Wang, Qin; Zhang, Lefeng (2026): "VIPER Strike: Defeating Visual Reasoning CAPTCHAs via Structured Vision–Language Inference", in: Proceedings of the USENIX Security Symposium. (Link)] did the same for visual reasoning CAPTCHAs. Meanwhile
Searles et al. [21Searles, Andrew; Nakatsuka, Yoshimichi; Ozturk, Ercan; Paverd, Andrew; Tsudik, Gene; Enkoji, Ai (2023): "An Empirical Study & Evaluation of Modern CAPTCHAs", in: Proceedings of the USENIX Security Symposium. (Link)] measured what CAPTCHAs cost the humans —
1,400 participants solving 14,000 CAPTCHAs, with solving time and preference varying
sharply by type. Read together, those are the two halves of why a site reserves a
challenge for a suspicious score rather than showing it to everyone. Nguyen et al.
[27Nguyen, Hoang Dai; Subramani, Karthika; Acharya, Bhupendra; Perdisci, Roberto; Vadrevu, Phani (2024): "C-Frame: Characterizing and measuring in-the-wild CAPTCHA attacks", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] measured in-the-wild CAPTCHA abuse from the other direction.
Designing a study around “the CAPTCHA will stop the adversary” is dated; designing one
around “the CAPTCHA will stop us” is still true, and is the reason it costs you
sites.
What You Actually See, and How to Tell It Apart
Your crawler cannot ask why it failed. It can only classify what came back. These are
the discriminable cases:
| Symptom | Likely cause | How to tell |
| HTTP 403 with a short body | Edge block on IP or ASN reputation | Re-request the same URL from a second vantage point. If it succeeds, it is you, not the site. See Crawling location. |
| HTTP 429, or 403 after n requests | Rate limiting | Back off and retry with a longer interval. If it succeeds, it is rate, not identity. |
| HTTP 200, small DOM, a challenge phrase, a meta-refresh or a script that reloads | JavaScript or proof-of-work challenge | Match the body against a small set of challenge markers, and check whether the final URL equals the requested one. |
| HTTP 200, a visible CAPTCHA widget | Interactive challenge | Look for the widget's own script origin or iframe rather than for the word “CAPTCHA”, which appears on plenty of ordinary pages. |
| HTTP 200, plausible page, but no third-party requests at all | Degraded or cloaked response | Compare against a headful run, or a run from a different vantage point, on the same URL on the same day. |
| HTTP 200, plausible page, different from the human one | Cloaking | Only a differential comparison finds this. Nothing in the response says so. |
The general instrument for the bottom three rows is the same: the differential crawl.
Fetch the same URL under two configurations that differ in one deliberate respect —
headless vs headful, datacenter vs residential, your crawler's User-Agent vs a stock one
— and diff the results. A systematic difference is a measurement of the site's
discrimination on that axis; no difference is evidence, though not proof, that you were
not singled out on it. Say which axis you varied, because “we ran a control” without it
is unfalsifiable. Szurdi et al.
[9Szurdi, Janos; Luo, Meng; Kondracki, Brian; Nikiforakis, Nick; Christin, Nicolas (2021): "Where are you taking me?Understanding Abusive Traffic Distribution Systems", in: Proceedings of the ACM Web Conference. (DOI)] and Liu et al. [24Liu, Enze; Luo, Elisa; Shan, Shawn; Voelker, Geoffrey M.; Zhao, Ben Y.; Savage, Stefan (2025): "Somesite I Used To Crawl: Awareness, Agency and Efficacy in Protecting Content Creators From AI Crawlers", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] both use exactly this design,
and both use a control condition — sites that block everything — so that
“blocks our crawler” is separated from “blocks this particular identity”.
Measure It, Do Not Fight It
The engineering instinct is to become harder to detect. The research instinct should be
to make the obstruction a measured quantity. Four reasons the second is better:
The arms race is unwinnable and, worse, silent. You will not be told when a
patch stops working. A result that depends on evasion has no error bar and no way
to acquire one.
- **It is an ethics decision.** Deliberately overriding an operator's expressed access
preference needs a justification you are prepared to write in the paper. See
[[Practices:Ethics]].
- **The obstruction is itself publishable.** Every quantified figure in the table
below is a finding somebody got for free by counting what they lost.
- **It is the cheapest possible defence against the obvious objection.** This page's
own figures show the bar has been low — 96.2% of crawling papers report no
obstruction at all — but a reviewer who asks "how do you know the sites you lost were
lost at random?" is asking something you cannot answer after the crawl is over. The
breakdown costs one table and has to be collected while you crawl.
The minimum viable version costs almost nothing:
Classify every non-success into
network error,
DNS failure,
HTTP 4xx,
HTTP 5xx, timeout, challenge page, empty render. Publish the table.
Add a challenge-page detector to the success path, not just to the error path,
so HTTP 200 challenges stop counting as visits.
Run a control condition: a small sample crawled under a second configuration,
same day, same URLs. Report the delta.
Say in the paper whether you attempted evasion, and what you did. “We made no
attempt to evade bot detection” is a perfectly good sentence and it tells the reader
what the number means.
The corpus's own stealth-tool trail is short and recent: 11 papers name a stealth
patch, 9 of them ran a crawl, and none is earlier than 2021. Anyone following that
trail today should know the state of what it points at, because the names in those
papers have moved:
| Project | State on 2026-08-29 | What to know |
puppeteer-extra-plugin-stealth | newest npm release 2.11.2, published 2023-03-01; repo not archived, no code release since | The name most cited in the corpus, and the most stale. |
undetected-chromedriver | PyPI 3.5.5 (2024-02-17); repo last pushed 2025-07-05; publishes no GitHub Releases and no tags | Its own author has moved on — see the next row. |
nodriver | PyPI 0.50.3 (2026-05-13) | Its GitHub description reads “Successor of Undetected-Chromedriver” — the same author's own succession claim. AGPL-3.0. |
patchright | tag v1.62.0, repo pushed 2026-08-19 | A patched Playwright, drop-in. The actively maintained option at the time of writing. Apache-2.0. |
rebrowser-patches | tag 1.0.19 (2025-05-09), no commits since | Patches upstream Puppeteer and Playwright rather than forking them. |
selenium-stealth | PyPI 1.0.6 (2020-11-05); repo last pushed 2021-12-30 | Abandoned. No successor found. |
playwright-stealth | PyPI 2.0.3 (2026-04-04) | The package name stayed put and the code moved. The PyPI Homepage now points at Mattwmaster58/playwright_stealth; the original AtuboDad repo was last pushed 2024-07-29. |
| Camoufox | repo pushed 2026-08-26, MPL-2.0 | A patched Firefox rather than a patch on top of a driver. |
1)
Two things this table is here to teach, neither of them about stealth. First, a
package's last release date is not its currency, and it fails in two different
directions here: undetected-chromedriver looks alive on GitHub but its own author's
successor is a differently-named project, while playwright-stealth looks stale under
its original repository and is in fact maintained — the package name stayed put and the
code moved to a different owner. Checking the name you already had would have got both
wrong. Second, if you cite one of these in a paper, cite the version you ran, because
the detection landscape it was written against no longer exists.
Who Is On the Other Side
Useful mostly so you can recognise a challenge page and name the vendor in your
methodology section. The market has consolidated hard, and papers that cite a vendor by
its 2019 name are citing something that no longer exists under it:
| Product | Status on 2026-08-29 |
| Cloudflare Bot Management, Turnstile | Current. Turnstile went generally available 2023-09-29, with its “Managed” mode free for unlimited use; Cloudflare calls it a CAPTCHA alternative, not a CAPTCHA. |
| Akamai Bot Manager | Current. |
| DataDome, Kasada, Arkose Labs | Current and independent. |
| Imperva Advanced Bot Protection | Current — and this is where Distil Networks went: distilnetworks.com now redirects to Imperva's bot-management product page. Imperva itself has been part of Thales since 2023-12-04. |
| HUMAN Security | This is where PerimeterX went: perimeterx.com now redirects to humansecurity.com. |
| F5 Distributed Cloud Bot Defense | This is where Shape Security went; F5 announced completion of the acquisition in its own press release. |
| BotD (open source, MIT) | Current, from the Fingerprint team. The one you can actually read the source of, and the one Venugopalan et al. [12Venugopalan, Hari; Munir, Shaoor; Ahmed, Shuaib; Wang, Tangbaihe; King, Samuel T.; Shafiq, Zubair (2025): "FP-Inconsistent: Measurement and Analysis of Fingerprint Inconsistencies in Evasive Bot Traffic", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] used as one of their two detectors. |
| Anubis (open source, MIT) | A proof-of-work interstitial aimed specifically at AI scrapers; its own repository describes it as weighing “the soul of incoming HTTP requests to stop AI crawlers”. Newest tag v1.27.0. |
2)
The AI-Crawler Turn, 2025–2026
Everything above is about a site deciding whether a client is a human. Since 2025
there is a second question layered on top, with different economics: whether a client is
an AI training or inference crawler, and whether it has paid. This matters to an
academic crawler for a blunt reason — the defences aimed at AI crawlers do not
distinguish you from them.
pay for the content, and introduced a pay-per-crawl mechanism.3) If any of your
sample sits behind Cloudflare, that default is part of your methodology whether you
engaged with it or not.
* The corpus sees this arriving and only just: exactly **five papers** in 5,859
mention an AI crawler or name an AI crawler user-agent token, and **all five are
2025 or 2026**. Liu et al. {[liu2025_somesite]} measured how well content creators can
actually keep AI crawlers out; Cui et al. {[cui2025_odyssey]} measured what LLM
services do with ''robots.txt''; Kim et al. {[kim2025_scrapers]} measured whether
scrapers respect its directives at all.
* **And the defaults are still moving.** Cloudflare has since replaced the single
"Block AI bots" toggle with three behaviour categories — **Search**, **Agent** and
**Training** — and its own documentation states that from **2026-09-15** new domains
default to blocking Training //and Agent// on pages that display ads, while Search
stays allowed; the old "Block AI bots" option is marked deprecating on the same
date.((''developers.cloudflare.com/bots/llms-full.txt'', fetched 2026-08-29: "New defaults, in which Training and Agent are blocked on pages that display ads while Search remains allowed, take effect for new domains on September 15, 2026", and "Block AI bots [Deprecating on September 15, 2026]". Cloudflare's separate **Content Signals Policy**, announced 2025-09-24, adds ''search'' / ''ai-input'' / ''ai-train'' directives to ''robots.txt''.)) **This page was written 17 days before that
date.** If you are reading it later, check the current defaults yourself: an
academic crawler that a classifier puts in //Agent// is on the blocked side of the
new default, and nothing about being academic exempts it.
* ''robots.txt'' itself is **RFC 9309**, a Proposed Standard from September 2022, and
nothing obsoletes or updates it.((''datatracker.ietf.org/doc/rfc9309/'' and ''rfc-editor.org/info/rfc9309'', fetched 2026-08-29.)) It expresses a preference; it does not
enforce one, and it is not what blocks you.
* Two IETF working groups are now chartered in this space and are worth watching
rather than citing: **webbotauth**, on cryptographically authenticating automated
clients and identifying their operators, and **aipref**, on a vocabulary and
attachment mechanism for AI-usage preferences.((''datatracker.ietf.org/wg/webbotauth/about/'' and ''datatracker.ietf.org/wg/aipref/about/'', both fetched 2026-08-29. Be careful to distinguish an adopted working-group draft from an expired individual submission: ''draft-meunier-web-bot-auth-architecture'' is marked expired and archived, with no formal standing.)) If signed bot identity
lands, "declare yourself and be allowed in" becomes a real option for research
crawlers, and this page will need rewriting.
An LLM-driven agent browsing on a user's behalf is a third category again, detected by
different signals and blocked under different rules. That is
LLM Agents, not this page.
Use in Publications
The figures below come from a structured extraction over 5,859 full-text papers from
CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf and IEEE S&P, 2010–2026. Unless stated
otherwise the population is the 1,120 papers that ran a crawl. The 2025 and 2026
venue-years are provisional — CCS and IMC 2026 have not been held, and IEEE S&P and WWW
2026 abstracts are not yet in the selection source — so any per-year row reaching them is
under-represented by construction. Methodology and limitations are at the end of this
section.
This page's population is not a schema field. The extraction records what a paper
did, not what was done to it, so “our crawler was blocked” appears nowhere in it.
The population here is a full-text sweep over the papers' own sentences, and every one
of its 138 candidates was then read by hand, because the sweep on its own is only 31.2%
precise for the claim it is used to make.
Almost nobody reports being blocked
| Verdict | Papers | Share of the 138 candidates | Share of the 1,120 crawled papers |
| Reports its own crawl obstructed, with a number | 22 | 15.9% | 2.0% |
| Reports its own crawl obstructed, no number | 21 | 15.2% | 1.9% |
| Describes mitigations, never says whether it happened | 38 | 27.5% | 3.4% |
| Sweep false positive — not about the authors' own collection | 57 | 41.3% | — |
So 43 of 1,120 crawling papers (3.8%) say their own crawl was obstructed, and 22
(2.0%) put a number on it. Counting generously, 81 papers (7.2%) engage with the
question at all — the other 92.8% neither report obstruction nor say they took steps
against it.
Those are floors, not estimates, because a sweep can only find a paper that wrote the
sentence. To bound the gap, 24 crawling papers that the tight sweep did not flag but
a separate, much wider recall probe did were audited the same way: 6 of the 24 were misses
(3 of them quantified). Extrapolating over the 382 papers the recall probe hits gives
roughly 96 missed papers, with a Wilson 95% interval of 46–172. So the honest statement
is: at least 3.8% of crawling papers report obstruction, and the true share is plausibly
8–19%. Even the top of that range leaves four in five crawling papers silent, and even
19% is a floor — a crawl that was blocked and never wrote a sentence about it is
invisible to both sweeps.
The papers that put a number on it
Nineteen of the 22, plus two more (marked †) that the recall audit turned up outside
the 138 candidates and that are therefore not counted in the 22. Read the
denominators. These are not comparable with one another — they are answers to
different questions on different populations, and averaging them would be meaningless.
What they are useful for is calibration: the plausible range on a general web crawl is
roughly 1–15%, and the outliers are populations that are adversarial by construction.
| Paper | What was obstructed | Figure, with its denominator |
| Kaizer and Gupta, IMC 2016 [28Kaizer, Andrew J.; Gupta, Minaxi (2016): "Characterizing Website Behaviors Across Logged-in and Not-logged-in Users", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] | crawler blocked, or login required CAPTCHA | 75 of 420 selected sites (~17.9%) dropped |
| DeBlasio et al., IMC 2017 [1DeBlasio, Joe; Savage, Stefan; Voelker, Geoffrey M.; Snoeren, Alex C. (2017): "Tripwire: inferring internet site compromise", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] | registration forms behind a human check | 19% of sites with a registration form (37% within the top-100 subset) |
| Ardi and Calder, IMC 2023 [29Ardi, Calvin; Calder, Matt (2023): "The Prevalence of Single Sign-On on the Web: Towards the Next Generation of Web Content Measurement", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] | bot-detection service prevented page load | 8% of 994 responsive sites in a CrUX top-1K crawl |
| Liu et al., IMC 2025 [24Liu, Enze; Luo, Elisa; Shan, Shawn; Voelker, Geoffrey M.; Zhao, Ben Y.; Savage, Stefan (2025): "Somesite I Used To Crawl: Awareness, Agency and Efficacy in Protecting Content Creators From AI Crawlers", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] | site blocks the crawler regardless of user-agent | 1,487 of the top 10,000 sites (15%) |
| Annamalai et al., NDSS 2024 [30Annamalai, Meenatchi Sundaram Muthu Selva; Bilogrevic, Igor; Cristofaro, Emiliano De (2024): "FP-Fed: Privacy-Preserving Federated Detection of Browser Fingerprinting", in: Proceedings of the Network and Distributed System Security Symposium. (Link)] | crawl failed to collect traces | 1,700 of 20,000 sites (8.5%) failed; 64.3% of those were HTTP 403 |
| Senol et al., TheWebConf 2024 [31Senol, Asuman; Ukani, Alisha; Cutler, Dylan; Bilogrevic, Igor (2024): "The Double Edged Sword: Identifying Authentication Pages and their Fingerprinting Behavior", in: Proceedings of the ACM Web Conference 2024. (DOI)] | feature collection incomplete | 93 of 5,000 labelled pages (1.9%) |
| Annamalai et al., TheWebConf 2025 [5Annamalai, Meenatchi Sundaram Muthu Selva; De Cristofaro, Emiliano; Bilogrevic, Igor (2025): "Beyond the Crawl: Unmasking Browser Fingerprinting in Real User Interactions", in: Proceedings of the ACM Web Conference. (DOI)] | automated crawler failed to visit | 15 of ~3,000 sites (~1%); 86.7% of those returned 4XX tied to bot detection |
| Senol et al., USENIX Sec 2022 [32Senol, Asuman; Acar, Gunes; Humbert, Mathias; Zuiderveen Borgesius, Frederik (2022): "Leaky Forms: A Study of Email and Password Exfiltration Before Form Submission", in: 31st USENIX Security Symposium (USENIX Security 22). (Link)] | CAPTCHA page blocked the crawler | 3 pages in a 1,000-site pilot crawl |
| Aziz et al., PETS 2024 [33Aziz, Muhammad Abu Bakar; Wilson, Christo (2024): "Johnny Still Can't Opt-out: Assessing the IAB CCPA Compliance Framework", in: Proceedings on Privacy Enhancing Technologies. (DOI)] | CAPTCHA prevented normal load | 2 of 200 re-visited sites (1%); the paper estimates ~1% of the full sample |
| † Hausladen et al., USENIX Sec 2025 [34Hausladen, Katherine; Wang, Oliver; Eng, Sophie; Wang, Jocelyn; Wijaya, Francisca; May, Matthew; Zimmeck, Sebastian (2025): "Websites' Global Privacy Control Compliance at Scale and over Time", in: Proceedings of the USENIX Security Symposium. (Link)] | human-check page | 1.6–2.6% of the crawl set, across three crawls |
| † Bekos et al., TheWebConf 2023 [35Bekos, Paschalis; Papadopoulos, Panagiotis; Markatos, Evangelos P.; Kourtellis, Nicolas (2023): "The Hitchhiker's Guide to Facebook Web Tracking with Invisible Pixels and Click IDs", in: Proceedings of the ACM Web Conference. (DOI)] | access blocked after an event | 172 of 2,308 sites (7.5%) — but the paper's own sentence reads “blocked our access after a specific event, or stored duplicate results”, so blocking is not isolated |
| Kieserman et al., PETS 2025 [36Kieserman, Julia B.; Andreou, Athanasios; Geeng, Chris; Lauinger, Tobias; McCoy, Damon (2025): "Tracker Installations Are Not Created Equal: Understanding Tracker Configuration of Form Data Collection", in: Proceedings on Privacy Enhancing Technologies, pp. 679-695. (DOI)] | bot detection caused missed detections | 8.6% of the manually validated false-negative sample |
| Al Roomi and Li, USENIX Sec 2023 [37Al Roomi, Suood; Li, Frank (2023): "A Large-Scale Measurement of Website Login Policies", in: Proceedings of the USENIX Security Symposium. (Link)] | CAPTCHA-solving failures during login | 52% of domains where an account had been created could not be analysed |
| Gavazzi et al., USENIX Sec 2023 [38Gavazzi, Anthony; Williams, Ryan; Kirda, Engin; Lu, Long; King, Andre; Davis, Andy; Leek, Tim (2023): "A Study of Multi-Factor and Risk-Based Authentication Availability", in: Proceedings of the USENIX Security Symposium. (Link)] | login CAPTCHAs; web driver detected | 43 of 56 sites needed manual login; 3 of 56 blocked the driver |
| Campobasso and Allodi, CCS 2020 [39Campobasso, Michele; Allodi, Luca (2020): "Impersonation-as-a-Service: Characterizing the Emerging Criminal Infrastructure for User Impersonation at Scale", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)] | scraping accounts banned by the marketplace | 5 accounts; the paper does not state how many it held in total |
| Chehade et al., IEEE S&P 2025 [40Chehade, Saiid El Hajj; Hantke, Florian; Stock, Ben (2025): "403 Forbidden? Ethically Evaluating Broken Access Control in the Wild", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)] | accounts blocked, sessions invalidated | 3 of 110 sites with test accounts |
| McDonald et al., IMC 2018 [41McDonald, Allison; Bernhard, Matthew; Valenta, Luke; VanderSloot, Benjamin; Scott, Will; Sullivan, Nick; Halderman, J. Alex; Ensafi, Roya (2018): "403 Forbidden: A Global View of CDN Geoblocking", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] | crawler flagged as a bot, denied access | ~30% of Akamai 403s were false positives — the crawler was blocked where a browser was not |
| Szurdi et al., TheWebConf 2021 [9Szurdi, Janos; Luo, Meng; Kondracki, Brian; Nikiforakis, Nick; Christin, Nicolas (2021): "Where are you taking me?Understanding Abusive Traffic Distribution Systems", in: Proceedings of the ACM Web Conference. (DOI)] | crawler persona vs human persona | explicitly blocked +5 points, covertly blocked +8 points |
| Bijmans et al., USENIX Sec 2021 [42Bijmans, Hugo; Booij, Tim; Schwedersky, Anneke; Nedgabat, Aria; Wegberg, Rolf van (2021): "Catching Phishers By Their Bait: Investigating the Dutch Phishing Landscape through Phishing Kit Detection", in: Proceedings of the USENIX Security Symposium. (Link)] | phishing sites cloaked against the crawler | 946 of 1,363 detected phishing domains (69%) served a blank page |
| Oh et al., PETS 2017 [43Oh, Se Eun; Li, Shuai; Hopper, Nicholas (2017): "Fingerprinting Keywords in Search Queries over Tor", in: Proceedings on Privacy Enhancing Technologies. (DOI)] | Google CAPTCHA during Tor collection | 54% of fingerprintable keyword groups vs 35% of others |
| Singh et al., USENIX Sec 2017 [44Singh, Rachee; Nithyanand, Rishab; Afroz, Sadia; Pearce, Paul; Tschantz, Michael Carl; Gill, Phillipa; Paxson, Vern (2017): "Characterizing the Nature and Dynamics of Tor Exit Blocking", in: 26th USENIX Security Symposium (USENIX Security 17), pp. 325-341. USENIX Association. (Link)] | Tor exit relays discriminated against | 50% of the most aggressive site categories blocked over 60% of relays |
4)
Two entries in that table deserve to be read twice. Al Roomi and Li lost 52% of the
domains they had already created accounts on, mostly to CAPTCHA-solving failures, and
said so — which is why their prevalence figure comes with the honest caveat that the
true value may be higher. Bijmans et al.'s 69% is what a fully adversarial population
looks like: on phishing infrastructure, cloaking against the crawler is the default, not
the exception.
Over time: not much of a trend
| Period | Crawling papers | Report obstruction | Share |
| 2010–2019 | 427 | 14 | 3.3% |
| 2020–2024 | 495 | 19 | 3.8% |
| 2025–2026 (provisional) | 198 | 10 | 5.1% |
Resist reading that as a rise. Per year the series is noisy on small bases: 2015 is
the corpus's highest at 9.8% (4 of 41 crawling papers), 2017 and 2025 tie at 7.8%, and
2010–2013 are flat zero. The 2025–2026 row is also the provisional one, and 2025 is the
year the sweep flags the most candidates (29 of 129) — which is as consistent with the
field discussing this more as with anyone being blocked more. The corpus cannot
separate those two explanations and this page does not claim to. What the series does
show, unambiguously, is that no year in seventeen exceeded one paper in ten.
The choices that decide detectability are the least-reported ones
Population: the 1,120 crawling papers. not-stated is counted as what it is.
| Choice | Field | Papers stating it | Share |
| Headless or headed | crawlConfig.headless | 140 | 12.5% |
| Stateful or stateless | crawlConfig.statefulness | 219 | 19.6% |
| What it did with the consent banner | crawlConfig.consentAction | 349 | 31.2% |
| Which browser | crawlConfig.browsers | 529 | 47.2% |
| How authentication was handled | crawlConfig.authentication | 779 | 69.6% |
| How deep it went | crawlConfig.interactionDepth | 841 | 75.1% |
Headless versus headful is the most detectability-relevant single bit in the whole
table and the least often reported. Of the 1,080 crawling papers that have a crawl
configuration recorded at all, 940 do not say; 93 say headless, 35 headful, 12 both.
The literature on each signal is thinner than you would guess
A full-text sweep over all 5,859 papers for the signal's name. These are mention
counts, not usage counts — a paper naming navigator.webdriver may be describing it,
defending against it or checking for it — and unlike the table above they are not
hand-audited. They are here to show where there is a literature and where there is not.
| Signal named anywhere in the paper | Papers | Of which ran a crawl |
| a CAPTCHA or challenge product by name | 118 | 41 |
| a bot-management vendor by name | 106 | 38 |
| TLS fingerprinting (JA3/JA4) | 37 | 11 |
| fingerprint inconsistency | 24 | 10 |
| headless detection | 20 | 19 |
| a stealth patch | 15 | 13 |
navigator.webdriver | 11 | 11 |
| an AI or LLM crawler | 5 | 3 |
| CDP or DevTools artefacts | 4 | 1 |
| HTTP header-order fingerprinting | 3 | 2 |
Read the bottom half of that table as a map of what nobody has written. Four papers in
5,859 mention CDP artefacts as a detection surface, and three mention header-order
fingerprinting — both of which are ordinary, documented techniques on the commercial
side. All five AI-crawler papers are 2025 or later.
population is a full-text sweep over paper.cols.txt with whitespace collapsed —
a PDF line break inside a phrase defeats every multi-word pattern otherwise. Ten
ordered patterns, each either anchored on an obstruction noun or requiring a
first-person subject in the same sentence. Take the same ten patterns with every
first-person requirement removed and the sweep returns **406** papers instead of 138;
the extra 268 were not hand-audited, but a read of a sample of them found adversaries
evading detection, Cloudflare and Akamai appearing as CDNs, and ad-blockers blocking
requests, which is what the anchors are there to exclude.
* **A sweep hit is a candidate, not a claim.** All 138 candidates carry a hand verdict
with its deciding sentence; the report script fails loudly if any candidate is
uncovered. The precision that hand audit measured — 31.2% for "reports obstruction",
58.7% for "on topic at all" — is published above rather than hidden, and it is the
reason no figure on this page is taken from the sweep alone.
* **Recall is estimated, not measured.** The **recall probe** is a third pattern,
separate from both sets above and much wider than either: any first-person sentence
with an obstruction token within 240 characters. Run over the 982 crawling papers the
tight sweep did not flag, it hits 382, and the 24-paper sample is a reproducible
every-15th selection from those. One of its three quantified misses is borderline and flagged in the hand
map: the CAPTCHAs that stopped it were inside ''bWAPP'', a deliberately vulnerable
local benchmark app, not on the open web. Dropping it moves the point estimate from
96 missed papers to 80.
* **Quotes were checked.** All 161 deciding quotes were verified against the rendering
the auditors read: 111 match exactly, 37 match on at least 60% of their five-word
windows, and 13 fall below that. **Below threshold is not "unsupported"** — every one
was read by hand, all 13 are present in the paper, and the mismatch is always a
two-column reading order splicing another column through the sentence. Three quotes
were rewritten after that reading and the rewrite is recorded.
* **Papers are counted, never tuples**, and a paper counts once.
* **Silence is not absence.** "Does not report obstruction" means the paper did not
say. These are reporting figures throughout, and the whole point of the page is that
the reporting rate is low.
* **Venue coverage.** Seven venues only. Several relevant papers were published outside
them — Krumnow et al. at CoNEXT, for one — so any count here is a lower bound on the
field.
* **Every query, the report script's unedited output, the full candidate list with its
verdicts, the residue and the external-source checks are on
[[provenance:programming:crawler_detection]].** Corpus-level caveats are on
[[literature:corpus]].
What to Report
Your non-load rate, broken down by cause. One table. Network error,
DNS, 4xx,
5xx, timeout, challenge page, empty render. This is the single highest-value thing on
the list, and the closest measurable proxy for how rare it is — the share of crawling
papers that report obstruction at all — is 3.8%.
- **Whether you counted challenge pages as successes.** If your success test is the
HTTP status code, say so, because it means you did.
- **Headless or headful, and which binary.** Since Chrome 132 that is two questions,
not one. 12.5% of papers answer even the first.
- **Your vantage point and its address space** — cloud, university, residential, Tor.
See [[Design:Crawling location]].
- **Whether you attempted evasion.** Either answer is fine; the absence of an answer is
not. If you did, name the tool //and its version//, and justify it against
[[Practices:Ethics]].
- **Any control condition you ran** — a second configuration, a second vantage point, a
manual sample — and what the delta was. A null delta is a result worth a sentence.
- **The date.** Bot-management deployment moved materially in 2025 (see above). A block
rate without a date is not comparable with anything.
Papers to Read First
If you have an afternoon, in this order:
Ahmad et al., TheWebConf 2020 [
2Ahmad, Syed Suleman; Dar, Muhammad Daniyal; Zaffar, Muhammad Fareed; Vallina-Rodriguez, Narseo; Nithyanand, Rishab (2020): "Apophanies or Epiphanies? How Crawlers Impact Our Understanding of the Web", in: Proceedings of The Web Conference, pp. 271-280. (DOI)] — why crawler design is a
threat to validity and not an implementation detail. Read this one first even if you
read nothing else.
- **Jueckstock et al., TheWebConf 2021** {[jueckstock2021_realistic]} — the same
argument made quantitatively, over crawl configuration and vantage point together.
- **Invernizzi et al., IEEE S&P 2016** {[invernizzi2016_cloak]} — the canonical
measurement of sites serving machines a different web.
- **Vastel et al., USENIX Sec 2018** {[vastel2018_scanner]} — how automation is
actually detected in the browser, and why inconsistency beats any single attribute.
- **Venugopalan et al., IMC 2025** {[venugopalan2025_inconsistent]} — the current
state of that method, measured against two commercial detectors.
- **Liu et al., IMC 2025** {[liu2025_somesite]} — the AI-crawler turn, and a clean
example of the control-condition design this page recommends.
- **Krumnow et al., CoNEXT 2022** {[krumnow2022_gullible]} — what it looks like when
somebody writes a detector for the tool //you// are using.
Open Questions
high-ranked sites — is inferred from where the products are sold and from the shape
of individual papers' losses. A crawl that reports its block rate //by rank decile//
would settle it, and would cost one extra column.
* **The published figures are not comparable and nobody has made them so.**
Twenty-two quantified figures, twenty-two denominators, no two of them the same
population. A single study crawling one sample under several configurations and
reporting one block rate per configuration would give the field a reference point it
does not have.
* **How much of a "difference between crawls" result is bot management** rather than
the thing being studied. Demir et al. {[demir2022_reproducibility]} {[demir2023_similarity]}
measured that repeated and differently configured crawls disagree; how much of that
disagreement is the site discriminating, rather than the web changing, is unmeasured.
* **The AI-crawler defences are a natural experiment nobody has run.** Cloudflare
changed a default on a known date in July 2025. Whether academic crawlers' block
rates moved across that date is answerable from any longitudinal crawl that spans it.
* **Signed bot identity.** If the IETF webbotauth work lands, a research crawler could
declare itself and be admitted on those terms. Whether operators would admit
academic crawlers, and on what conditions, is a question for a survey of operators,
not for this corpus.
Related Pages
Crawler — which library drives the browser, and how visible each one is.
OpenWPM — the specific tool with a specific published detector.
LLM Agents — a different detection surface, different rules.
-
Interaction — behavioural signals, from the other direction.
-
Ethics — where the evasion decision belongs.
-
Fingerprinting — the same techniques, pointed at users instead of crawlers.
-
References
- [1]
- DeBlasio, Joe; Savage, Stefan; Voelker, Geoffrey M.; Snoeren, Alex C. (2017): "Tripwire: inferring internet site compromise", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [2]
- Ahmad, Syed Suleman; Dar, Muhammad Daniyal; Zaffar, Muhammad Fareed; Vallina-Rodriguez, Narseo; Nithyanand, Rishab (2020): "Apophanies or Epiphanies? How Crawlers Impact Our Understanding of the Web", in: Proceedings of The Web Conference, pp. 271-280. (DOI)
- [3]
- Jueckstock, Jordan; Sarker, Shaown; Snyder, Peter; Beggs, Aidan; Papadopoulos, Panagiotis; Varvello, Matteo; Livshits, Benjamin; Kapravelos, Alexandros (2021): "Towards Realistic and Reproducible Web Crawl Measurements", in: Proceedings of the ACM Web Conference. (DOI)
- [4]
- Zeber, David; Bird, Sarah; Oliveira, Camila; Rudametkin, Walter; Segall, Ilana; Wolls´en, Fredrik; Lopatka, Martin (2020): "The Representativeness of Automated Web Crawls as a Surrogate for Human Browsing", in: Proceedings of The Web Conference 2020, pp. 167–178. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)
- [5]
- Annamalai, Meenatchi Sundaram Muthu Selva; De Cristofaro, Emiliano; Bilogrevic, Igor (2025): "Beyond the Crawl: Unmasking Browser Fingerprinting in Real User Interactions", in: Proceedings of the ACM Web Conference. (DOI)
- [6]
- Wang, David Y.; Savage, Stefan; Voelker, Geoffrey M. (2011): "Cloak and dagger: dynamics of web search cloaking", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
- [7]
- Invernizzi, Luca; Thomas, Kurt; Kapravelos, Alexandros; Comanescu, Oxana; Picod, Jean-Michel; Bursztein, Elie (2016): "Cloak of Visibility: Detecting When Machines Browse a Different Web", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [8]
- Zhang, Penghui; Oest, Adam; Cho, Haehyun; Sun, Zhibo; Johnson, RC; Wardman, Brad; Sarker, Shaown; Kapravelos, Alexandros; Bao, Tiffany; Wang, Ruoyu; Shoshitaishvili, Yan; Doupé, Adam; Ahn, Gail-Joon (2021): "CrawlPhish: Large-scale Analysis of Client-side Cloaking Techniques in Phishing", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [9]
- Szurdi, Janos; Luo, Meng; Kondracki, Brian; Nikiforakis, Nick; Christin, Nicolas (2021): "Where are you taking me?Understanding Abusive Traffic Distribution Systems", in: Proceedings of the ACM Web Conference. (DOI)
- [10]
- Vastel, Antoine; Laperdrix, Pierre; Rudametkin, Walter; Rouvoy, Romain (2018): "Fp-Scanner: The Privacy Implications of Browser Fingerprint Inconsistencies", in: Proceedings of the USENIX Security Symposium. (Link)
- [11]
- Wu, Shujiang; Sun, Pengfei; Zhao, Yao; Cao, Yinzhi (2023): "Him of Many Faces: Characterizing Billion-scale Adversarial and Benign Browser Fingerprints on Commercial Websites", in: Proceedings of the Network and Distributed System Security Symposium. (Link)
- [12]
- Venugopalan, Hari; Munir, Shaoor; Ahmed, Shuaib; Wang, Tangbaihe; King, Samuel T.; Shafiq, Zubair (2025): "FP-Inconsistent: Measurement and Analysis of Fingerprint Inconsistencies in Evasive Bot Traffic", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [13]
- Krumnow, Benjamin; Jonker, Hugo; Karsch, Stefan (2022): "How gullible are web measurement tools?", in: Proceedings of the 18th International Conference on Emerging Networking EXperiments and Technologies, pp. 171-186. (DOI)
- [14]
- Shi, Chenghui; Ji, Shouling; Liu, Qianjun; Liu, Changchang; Chen, Yuefeng; He, Yuan; Liu, Zhe; Beyah, Raheem; Wang, Ting (2020): "Text Captcha Is Dead? A Large Scale Deployment and Empirical Study", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
- [15]
- Zhang, Penghui; Sun, Zhibo; Kyung, Sukwha; Behrens, Hans Walter; Basque, Zion Leonahenahe; Cho, Haehyun; Oest, Adam; Wang, Ruoyu; Bao, Tiffany; Shoshitaishvili, Yan; Ahn, Gail-Joon; Doupé, Adam (2022): "I'm SPARTACUS, No, I'm SPARTACUS: Proactively Protecting Users from Phishing by Intentionally Triggering Cloaking Behavior", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
- [16]
- Maroofi, Sourena; Korczynski, Maciej; Duda, Andrzej (2020): "Are You Human?: Resilience of Phishing Detection to Evasion Techniques Based on Human Verification", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [17]
- Teoh, Xiwen; Lin, Yun; Liu, Ruofan; Huang, Zhiyong; Dong, Jin Song (2024): "PhishDecloaker: Detecting CAPTCHA-cloaked Phishing Websites via Hybrid Vision-based Interactive Models", in: Proceedings of the USENIX Security Symposium. (Link)
- [18]
- Jan, Steve T. K.; Hao, Qingying; Hu, Tianrui; Pu, Jiameng; Oswal, Sonal; Wang, Gang; Viswanath, Bimal (2020): "Throwing Darts in the Dark? Detecting Bots with Limited Data using Neural Data Augmentation", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [19]
- Li, Xigao; Azad, Babak Amin; Rahmati, Amir; Nikiforakis, Nick (2021): "Good Bot, Bad Bot: Characterizing Automated Browsing Activity", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [20]
- Herley, Cormac (2022): "Automated Detection of Automated Traffic", in: Proceedings of the USENIX Security Symposium. (Link)
- [21]
- Searles, Andrew; Nakatsuka, Yoshimichi; Ozturk, Ercan; Paverd, Andrew; Tsudik, Gene; Enkoji, Ai (2023): "An Empirical Study & Evaluation of Modern CAPTCHAs", in: Proceedings of the USENIX Security Symposium. (Link)
- [22]
- Teoh, Xiwen; Lin, Yun; Li, Siqi; Liu, Ruofan; Sollomoni, Avi; Harel, Yaniv; Dong, Jin Song (2025): "Are CAPTCHAs Still Bot-hard? Generalized Visual CAPTCHA Solving with Agentic Vision Language Model", in: Proceedings of the USENIX Security Symposium. (Link)
- [23]
- Qi, Minfeng; He, Dongyang; Wang, Qin; Zhang, Lefeng (2026): "VIPER Strike: Defeating Visual Reasoning CAPTCHAs via Structured Vision–Language Inference", in: Proceedings of the USENIX Security Symposium. (Link)
- [24]
- Liu, Enze; Luo, Elisa; Shan, Shawn; Voelker, Geoffrey M.; Zhao, Ben Y.; Savage, Stefan (2025): "Somesite I Used To Crawl: Awareness, Agency and Efficacy in Protecting Content Creators From AI Crawlers", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [25]
- Cui, Jian; Zha, Mingming; Wang, XiaoFeng; Liao, Xiaojing (2025): "The Odyssey of robots.txt Governance: Measuring Convention Implications of Web Bots in Large Language Model Services", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
- [26]
- Kim, Taein; Bock, Karstan; Luo, Claire; Liswood, Amanda; Poroslay, Chloe; Wenger, Emily (2025): "Scrapers Selectively Respect robots.txt Directives: Evidence From a Large-Scale Empirical Study", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [27]
- Nguyen, Hoang Dai; Subramani, Karthika; Acharya, Bhupendra; Perdisci, Roberto; Vadrevu, Phani (2024): "C-Frame: Characterizing and measuring in-the-wild CAPTCHA attacks", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [28]
- Kaizer, Andrew J.; Gupta, Minaxi (2016): "Characterizing Website Behaviors Across Logged-in and Not-logged-in Users", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [29]
- Ardi, Calvin; Calder, Matt (2023): "The Prevalence of Single Sign-On on the Web: Towards the Next Generation of Web Content Measurement", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [30]
- Annamalai, Meenatchi Sundaram Muthu Selva; Bilogrevic, Igor; Cristofaro, Emiliano De (2024): "FP-Fed: Privacy-Preserving Federated Detection of Browser Fingerprinting", in: Proceedings of the Network and Distributed System Security Symposium. (Link)
- [31]
- Senol, Asuman; Ukani, Alisha; Cutler, Dylan; Bilogrevic, Igor (2024): "The Double Edged Sword: Identifying Authentication Pages and their Fingerprinting Behavior", in: Proceedings of the ACM Web Conference 2024. (DOI)
- [32]
- Senol, Asuman; Acar, Gunes; Humbert, Mathias; Zuiderveen Borgesius, Frederik (2022): "Leaky Forms: A Study of Email and Password Exfiltration Before Form Submission", in: 31st USENIX Security Symposium (USENIX Security 22). (Link)
- [33]
- Aziz, Muhammad Abu Bakar; Wilson, Christo (2024): "Johnny Still Can't Opt-out: Assessing the IAB CCPA Compliance Framework", in: Proceedings on Privacy Enhancing Technologies. (DOI)
- [34]
- Hausladen, Katherine; Wang, Oliver; Eng, Sophie; Wang, Jocelyn; Wijaya, Francisca; May, Matthew; Zimmeck, Sebastian (2025): "Websites' Global Privacy Control Compliance at Scale and over Time", in: Proceedings of the USENIX Security Symposium. (Link)
- [35]
- Bekos, Paschalis; Papadopoulos, Panagiotis; Markatos, Evangelos P.; Kourtellis, Nicolas (2023): "The Hitchhiker's Guide to Facebook Web Tracking with Invisible Pixels and Click IDs", in: Proceedings of the ACM Web Conference. (DOI)
- [36]
- Kieserman, Julia B.; Andreou, Athanasios; Geeng, Chris; Lauinger, Tobias; McCoy, Damon (2025): "Tracker Installations Are Not Created Equal: Understanding Tracker Configuration of Form Data Collection", in: Proceedings on Privacy Enhancing Technologies, pp. 679-695. (DOI)
- [37]
- Al Roomi, Suood; Li, Frank (2023): "A Large-Scale Measurement of Website Login Policies", in: Proceedings of the USENIX Security Symposium. (Link)
- [38]
- Gavazzi, Anthony; Williams, Ryan; Kirda, Engin; Lu, Long; King, Andre; Davis, Andy; Leek, Tim (2023): "A Study of Multi-Factor and Risk-Based Authentication Availability", in: Proceedings of the USENIX Security Symposium. (Link)
- [39]
- Campobasso, Michele; Allodi, Luca (2020): "Impersonation-as-a-Service: Characterizing the Emerging Criminal Infrastructure for User Impersonation at Scale", in: Proceedings of the ACM SIGSAC Conference on Computer and Communications Security. (DOI)
- [40]
- Chehade, Saiid El Hajj; Hantke, Florian; Stock, Ben (2025): "403 Forbidden? Ethically Evaluating Broken Access Control in the Wild", in: Proceedings of the IEEE Symposium on Security and Privacy. (DOI)
- [41]
- McDonald, Allison; Bernhard, Matthew; Valenta, Luke; VanderSloot, Benjamin; Scott, Will; Sullivan, Nick; Halderman, J. Alex; Ensafi, Roya (2018): "403 Forbidden: A Global View of CDN Geoblocking", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [42]
- Bijmans, Hugo; Booij, Tim; Schwedersky, Anneke; Nedgabat, Aria; Wegberg, Rolf van (2021): "Catching Phishers By Their Bait: Investigating the Dutch Phishing Landscape through Phishing Kit Detection", in: Proceedings of the USENIX Security Symposium. (Link)
- [43]
- Oh, Se Eun; Li, Shuai; Hopper, Nicholas (2017): "Fingerprinting Keywords in Search Queries over Tor", in: Proceedings on Privacy Enhancing Technologies. (DOI)
- [44]
- Singh, Rachee; Nithyanand, Rishab; Afroz, Sadia; Pearce, Paul; Tschantz, Michael Carl; Gill, Phillipa; Paxson, Vern (2017): "Characterizing the Nature and Dynamics of Tor Exit Blocking", in: 26th USENIX Security Symposium (USENIX Security 17), pp. 325-341. USENIX Association. (Link)
- [45]
- Demir, Nurullah; Große-Kampmann, Matteo; Urban, Tobias; Wressnegger, Christian; Holz, Thorsten; Pohlmann, Norbert (2022): "Reproducibility and Replicability of Web Measurement Studies", in: Proceedings of the ACM Web Conference. (DOI)
- [46]
- Demir, Nurullah; Hörnemann, Jan; Große-Kampmann, Matteo; Urban, Tobias; Pohlmann, Norbert; Holz, Thorsten; Wressnegger, Christian (2023): "On the Similarity of Web Measurements Under Different Experimental Setups", in: Proceedings of the ACM Internet Measurement Conference, pp. 356-369. ACM DOI 10.1145/3618257.3624795 is listed by DBLP but was not registered with the DOI resolver as of 2026-08-12; the DOI above resolves to the authors' institutional record of the same paper (DOI)