This is an old revision of the document!
Table of Contents
Provenance: When the Website Notices Your Crawler
Working notes behind Crawler Detection. Every figure on that page has its query here, with the population it was counted over. Corpus-level caveats — the venue scope, the selection funnel, what each stage costs — are on corpus and are not restated. This page adds no bibliography entries of its own; it cites the same keys as the content page, from the same shared bibliography.
This is a log, not prose. It is for somebody checking a number.
The run
| Date | 2026-08-29 |
| Corpus at the time | 5,859 extracted papers, 7 venues (CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf, IEEE S&P), 2010–2026 |
| Extraction run | data/extract/run1/extractions.jsonl |
| Full text read from | data/fulltext/<year>/<venue>/<slug>/paper.cols.txt — the repaired column-order rendering, never paper.norm.txt |
| Page created | new; nothing existed at this id |
| Orchestrating model | Claude Opus 5 |
| Hand-audit sub-agents | 13 × Claude Sonnet (12 verdict batches + 1 recall batch). “Hand-audited” on the content page means this, not a human: each candidate was opened, its full text grepped around the match, and a verdict with a deciding sentence returned. |
| External-currency sub-agent | 1 × Claude Sonnet, instructed to fetch rather than recall |
| Review layer | see Review log at the foot |
Scripts committed for this page:
| Script | What it does |
|---|---|
scripts/botdet_fold.mjs | All three patterns, kept apart on purpose. SELF_REPORT_PATTERNS — 10 ordered, first-person-anchored patterns that define the page's population. LOOSE_SELF_REPORT_PATTERNS — the same ten with every anchor removed, hand-written, used only to report what the anchors buy. RECALL_WIDE_PATTERN — a third, much wider pattern used only to build the recall sample. Plus SIGNAL_PATTERNS (10 detection-signal names over the whole corpus) and the whitespace-collapsing full-text reader every other script here uses. |
scripts/report_crawler_detection.mjs | Every figure on the page, with its denominator. Sections A–H plus a Y block of arithmetic derived on the page and a Z block of every non-corpus number. Exits non-zero if any sweep candidate lacks a hand verdict. |
scripts/verify_crawler_detection_figures.mjs | Checks the 22 literal per-paper figures on the page against paper.cols.txt — not against the hand audit's own record, because the audit is what is being checked. 22 checked, 0 not found. Three needles had to be shortened to their longest contiguous fragment because a figure axis, a running header and a column break are spliced through the sentences; the reason is inline beside each. |
scripts/cd_quotecheck.mjs | Verifies all 161 hand-audit deciding quotes against the rendering the auditors read, with whitespace normalised. Three verdicts; below-threshold is a stop-and-read, not a verdict of “unsupported”. |
scripts/external_checks_crawler_detection.sh | Re-checks every external fact on the page against its primary source. Prints FAILED per check rather than dying. |
scripts/crawler_detection_external.json | The Z block: every non-corpus number with its claim, source and check date. |
scripts/_cd_mkbatches.mjs | Splits the 138 sweep candidates into the 12 batch files the hand auditors were given, and writes out/cd_audit/candidates.json. |
scripts/_cd_recall.mjs | Builds the recall sample: runs RECALL_WIDE_PATTERN over the non-candidate crawling papers and takes the reproducible every-15th selection into out/cd_audit/recall_sample.txt and recall_sample_keys.json. |
scripts/_cd_probe1.mjs … _cd_probe6.mjs, _cd_mech.mjs, _cd_mech2.mjs | The exploration trail, kept rather than deleted: the successive sweep drafts (398 papers → 382 → 259 → 164 → 138), the schema-side probes that were rejected, and the signal sweeps. Underscore-prefixed by this repository's convention for scratch. They are not run by anything and no figure comes from them; they are here so the narrowing is inspectable. |
scripts/build_provenance_crawler_detection.py + scripts/provenance_crawler_detection_prose.txt | Assemble this page from prose plus {{MARKER}} slots filled from the files the tools wrote. Refuses to run if a marker is empty, so this page cannot drift from the run. |
Why this page, and not a section on a neighbour
The item asked for a new page and the check confirmed it was the right call, but the reasoning is worth recording because it is a judgement call:
programming:crawlerhad an eleven-line Being Detected section. It is the
right place for “which library is more visible”, which is a property of the
libraries that page compares. It is the wrong place for the measurement-validity argument, the symptom taxonomy, the corpus reporting-rate finding and the AI-crawler turn — four sections that would have doubled a page already at 52 KB and about something else. * ''design:crawling_location'' covers IP and ASN reputation, and covers it well. That is one row of this page's detection-surface table. Broadening it to cover browser fingerprint inconsistency and challenge pages would have made a page about //where you measure from// into a page about //everything//. * The two are cross-linked from here rather than absorbed. After this page was published the ''Being Detected'' section on ''programming:crawler'' was **shrunk to a pointer**, so there is one copy, not two.
What was deliberately not written. No evasion instructions. The tooling table dates the stealth projects and says which are abandoned; it does not say how to use any of them, and the page says twice that evasion is an ethics decision that belongs on Ethics. A reviewer who thinks that table still reads as a cookbook should say so — it was the closest call on the page.
The population problem, and how it was solved
The schema has no field for this. extractions.jsonl records what a paper did
— its tools, its crawl configuration, its detections, its statistics. Nothing records
what was done to it. There is no crawlConfig.wasBlocked, and detection[]
carries the paper's own measured phenomena, not its incidents. Every schema-side query
tried in the first hour returned the wrong thing:
| Query tried | What it returned | Why it was rejected |
|---|---|---|
detection[].phenomenon matching bot/CAPTCHA/cloaking terms | 161 papers, 155 after dropping botnet titles | These are papers that study bot detection, not papers that were blocked. A different and also useful population — it became the Papers to Read First list and the dated-strands table — but it cannot answer “how often does this happen to a crawl”. |
classification[].target | no relevant enum value exists | target has 19 values; none is bot-or-human. |
tools[] folded to the Anti-detection patches family | 11 papers | Measures who reached for a stealth patch, not who was blocked. Kept, as section H. The fold had to be fixed first: a bare /stealth/ matched Stealth Audio Player (an earpiece-audio app in a mmWave-radar side-channel paper) and Razer Blade Stealth laptop. Both were counted as anti-detection patches until a review on 2026-08-29. See A shared fold this page had to fix below. |
So the page population is a full-text sweep, hand-audited. That is the central methodological decision on this page and everything below is a consequence of it.
Sweep design
Text is read from paper.cols.txt with whitespace collapsed to single spaces
before any pattern runs. Without that, a PDF line break inside a phrase silently defeats
every multi-word pattern; this has bitten this wiki before.
Ten ordered patterns, in scripts/botdet_fold.mjs. Each sentence is tested against
them in order and attributed to the first that matches, so the per-pattern counts in
section A of the report sum to more than 138 only because a paper can contain several
matching sentences.
The patterns are in the script rather than reproduced here, because a DokuWiki table
cell cannot hold a literal | and these are regular expressions full of them. The
design rule behind all ten is short enough to state:
- a pattern either anchors on an obstruction noun applied to a first-person object
(our crawler was blocked, blocked us), or it requires we/our/us
within 160 characters in the same sentence (…we…encountered a CAPTCHA).
- Sentences shorter than 25 or longer than 500 characters are skipped; both extremes
are almost always column-splice artefacts rather than sentences.
What the anchors buy. botdet_fold.mjs also carries LOOSE_SELF_REPORT_PATTERNS:
the same ten patterns with every first-person requirement removed, written out by hand.
They return 406 crawling papers instead of 138. The extra 268 were not hand-audited —
a read of a sample found adversaries evading detection, Cloudflare and Akamai appearing as
CDNs, and ad-blockers blocking requests.
The hand-written loose set exists because of a review finding. The first implementation
derived the loose patterns by string-editing the regex sources of the tight ones, and
that only stripped the anchor from four of the ten — the other six spell their
person-requirement differently (our alone, an embedded our|us alternation, we
alone). It reported 249 and the page said 249; the true figure is 406, so the page had
been understating what the anchors buy by more than half. Earlier, looser drafts of the
sweep were worse still: a first draft that only required an obstruction verb and a
crawl-ish noun in the same sentence returned 382 papers with a precision low enough
that reading twelve of them found one true positive. (That 382 and the recall probe's 382
are an unrelated coincidence — different patterns over different populations. Do not read
the 1-in-12 anecdote as bearing on the recall audit's 6-in-24.)
Verdict vocabulary
Each of the 138 candidates got exactly one verdict, the strongest that applies:
| Verdict | Means |
|---|---|
obstructed-quantified | The paper says its own collection was obstructed and gives a number, with a denominator. |
obstructed-narrative | Says it happened to their own collection; no number. |
mitigated-only | Describes measures taken to avoid blocking/detection, or names it as a limitation, without claiming it occurred. |
offtopic | The matched sentence is not about the authors' own collection being obstructed. |
The instruction to every auditor was explicit that a false obstructed-quantified is
the expensive error, and that a paper whose research subject is bot detection is
offtopic unless it separately reports its own crawl being obstructed. That rule
decided several borderline cases in both directions and each is recorded in the note
column of the full table below.
How the audit was run
The 138 candidates were split into 12 batches of 12 (the last has 6) and handed to 12
independent Sonnet sub-agents. Each got: the paper key, the title, the absolute path
to the paper's own paper.cols.txt, and the matched sentences. Each was instructed
to open the full text and grep around the match before deciding, because the matched
sentence alone is frequently misleading — and it was: several verdicts were decided by a
sentence elsewhere in the paper that the sweep never saw. Two examples, both upgrades:
IMC/2015/who-is-com-learning-to-parse-whois-recordsmatched on a self-throttling
sentence; the ~7.5% query-failure rate attributed to per-IP rate limiting is
elsewhere in the paper. * ''WWW/2024/the-double-edged-sword-…'' matched on a sentence about the paper's research focus; the 93 (1.9%) of 5,000 pages lost to bot detection is elsewhere.
And one downgrade worth recording: WWW/2022/reproducibility-and-replicability-of-web-measurement-studies
matched a string the auditor could not locate in any rendering of the paper, and the
paper contains no block/CAPTCHA/bot/403/429/rate-limit mentions at all. It is recorded as
a sweep false positive with no quote — the only candidate of 138 in that state.
Every figure, with its query
The report script prints all of them. Its real, unedited output follows; the page carries no number that is not in it, which the number guard asserts.
node scripts/report_crawler_detection.mjs node scripts/check_page_numbers.mjs pages/crawler_detection.txt out/report_crawler_detection-output.txt node scripts/check_page_numbers.mjs pages/crawler_detection.txt out/report_crawler_detection-output.txt --code
The guard was run both windowed and whole-page, because figures outside an audited window have survived a refresh on this wiki before. Both pass.
- report_crawler_detection-output.txt
============================================================================== A. POPULATIONS ============================================================================== corpus 5859 crawled (crawlConfig != null OR studyTypes has automated-web-crawl) 1120 web-crawled (crawled AND platforms has web) 857 This page has no schema field. The extraction schema records what a paper DID, not what was done TO it, so "our crawler was blocked" appears nowhere in extractions.jsonl. The page population is therefore a full-text sweep over paper.cols.txt with whitespace collapsed, hand-audited paper by paper. self-report sweep candidates 138 (12.3% of crawled) crawled papers with no full text on disk 0 same ten patterns with every first-person requirement removed 406 (36.3% of crawled) -> the anchors remove 268 papers. Not hand-audited; a read of a sample of them found adversaries evading detection, CDN mentions and ad-blocker filtering, which is why the anchors are there. Which pattern fired (a paper may fire several): pattern papers ------------------ ------ active 37 avoid_detect 34 captcha_served 23 excluded_blocked 17 antibot_stopped 15 bot_challenge_page 15 blockrate 13 passive 11 identified_as_bot 8 weblocked 3 ============================================================================== B. HAND VERDICTS, AND WHAT THE SWEEP IS WORTH ============================================================================== verdict papers share of 138 candidates share of 1,120 crawled --------------------- ------ ----------------------- ---------------------- obstructed-quantified 22 15.9% 2.0% obstructed-narrative 21 15.2% 1.9% mitigated-only 38 27.5% 3.4% offtopic 57 41.3% 5.1% reports its OWN crawl obstructed (quantified + narrative) 43 = 3.8% of the 1,120 crawled papers puts a NUMBER on it 22 = 2.0% of the 1,120 crawled papers describes mitigations but never says whether it happened 38 = 3.4% of the 1,120 crawled papers sweep precision for "reports obstruction" 43/138 = 31.2% sweep precision for "on topic at all" 81/138 = 58.7% Every count above is a LOWER BOUND on the field: the sweep can only find a paper that WROTE the sentence. Section C estimates how many it missed. ============================================================================== C. RECALL ESTIMATE ============================================================================== recall probe: any first-person sentence with an obstruction token within 240 characters (RECALL_WIDE_PATTERN in botdet_fold.mjs). A third pattern, separate from the tight sweep and from the loose set in section A. non-candidate crawled papers 982 of those, hit by the recall probe 382 hand-audited sample (every 15th) 24 verdict papers in sample --------------------- ---------------- obstructed-quantified 3 obstructed-narrative 3 mitigated-only 3 offtopic 15 self-reports the tight sweep MISSED, in the sample 6 of 24 extrapolated over the 382 recall-probe hits ~96 papers so the true count of self-reporting papers is roughly 43-139 i.e. between 3.8% and 12.4% of the 1,120 crawled papers. Wilson 95% interval on 6/24 = [12.0%, 44.9%] -> 46-172 missed papers -> 89-215 papers total = 7.9%-19.2% of the 1,120 crawled papers This is an estimate from a 24-paper sample, not a measurement. And even the upper end is a lower bound, because the WIDE pattern has unknown recall too: a paper that was blocked and never wrote a sentence about it is invisible to both. Publish the 43 as the measured floor and this range as its shape. One of the 3 quantified misses is borderline and is flagged in the hand map: IEEE-SP/2025 predator hit CAPTCHAs in bWAPP, a deliberately vulnerable local benchmark app, not on the open web. Dropping it moves the point estimate from 96 to 80 missed papers. ============================================================================== D. THE QUANTIFIED FIGURES, EACH WITH ITS DENOMINATOR ============================================================================== 22 of the 1,120 crawled papers put a number on their own obstruction. Read the denominators: they are not comparable with one another. A "1%" measured on 3,000 popular sites and a "69%" measured on detected phishing domains are answers to different questions. * CCS/2020/impersonation-as-a-service-characterizing-the-emerging-criminal-infrastructure-f figure: 5 accounts the authors held on ImpaaS.ru were banned or blacklisted; the paper does not state the total number of accounts obtained quote : "In the process, an additional three accounts were banned, for a total of five banned accounts." * IEEE-SP/2025/403-forbidden-ethically-evaluating-broken-access-control-in-the-wild figure: 3 of 110 websites with two accounts (3 of the 10 failed visits) lost sessions to blocking/bot detection quote : "Further investigation shows our accounts were either blocked and required an account recovery process or bot detection invalidated our sessions." * IMC/2015/who-is-com-learning-to-parse-whois-records figure: ~7.5% of domains queried failed after 3 attempts, out of 102M WHOIS records (~90% of .com); attributed to per-IP rate limiting quote : "Roughly 7.5% of domains we queries resulted in a failure after all 3 attempts." * IMC/2016/characterizing-website-behaviors-across-logged-in-and-not-logged-in-users figure: 345 of 420 selected sites retained; 75 (~17.9%) dropped, attributed to blocking or CAPTCHA quote : "Note that the total number of websites per each category is less than 30 as several websites in each category were excluded due to technical problems during one of the crawls: the website blocked the crawler or the login process started to require human verification via captcha." * IMC/2017/tripwire-inferring-internet-site-compromise figure: 19% of sites with registration forms (37% of the top-100 subset) presented a human-verification/CAPTCHA challenge quote : "In our manual study above, 19% of sites (37% of the top-100) with registration forms used some kind of test to ensure the registration form was being filled out by a human actor." * IMC/2018/403-forbidden-a-global-view-of-cdn-geoblocking figure: ~30% of Akamai 403 responses were false positives from the crawler being flagged as a bot; 286 of 1,068 (27%) automated block-page detections across the full scan were false positives, all Akamai quote : "We found that on the order of 30% of the Akamai 403s appeared to be false positives: the crawler request was flagged as a bot or otherwise was denied access while a real web browser request was able to load the page." * IMC/2023/the-prevalence-of-single-sign-on-on-the-web-towards-the-next-generation-of-web-c figure: 8% of 994 responsive sites (Top 1K CrUX U.S. crawl, Table 2 'Blocked' row) blocked by a bot-detection service quote : "8% of sites which are labeled blocked used some kind of bot-detection service preventing our Crawler from loading the page." * IMC/2025/somesite-i-used-to-crawl-awareness-agency-and-efficacy-in-protecting-content-cre figure: 1,487 (15%) of the top 10,000 popular sites (October 2024) inherently blocked the authors' crawler quote : "Among the top 10k popular sites in October 2024, 1,487 (15%) of them inherently block our crawler." * NDSS/2024/fp-fed-privacy-preserving-federated-detection-of-browser-fingerprinting figure: 1,700 of 20,000 websites (8.5%) failed; 64.3% of those failures were HTTP 403, attributed to login walls or bot detection quote : "our crawl fails to collect traces from 1,700 websites, with the overwhelming majority (64.3%) of them due to HTTP 403 Forbidden errors." * PETS/2017/fingerprinting-keywords-in-search-queries-over-tor figure: 54% of fingerprintable keyword trace groups hit a Google CAPTCHA during collection vs 35% of non-FP groups quote : "In addition, 54% of FP keywords received a CAPTCHA during collection and the Tor process had been restarted 60 times on average (35% and 23 times for Non-FP keywords)." * PETS/2024/automatic-generation-of-web-censorship-probe-lists figure: 3 of 50 (6%) ground-truth URLs returned 403 from curl due to server-side anti-bot blocking, across all vantage points quote : "At least 3 of the 50 "ground truth" URLs implement some server-side blocking against automated headless browsers like curl, resulting in Error 403 in all vantage points." * PETS/2024/johnny-still-cant-opt-out-assessing-the-iab-ccpa-compliance-framework figure: 2 of 200 (1%) manually re-visited websites received CAPTCHA challenges preventing normal load; the paper estimates ~1% of the crawled sample was impacted by anti-crawler countermeasures quote : "We received CAPTCHA challenges on two of the websites that prevented them from loading normally." * PETS/2025/tracker-installations-are-not-created-equal-understanding-tracker-configuration figure: 8.6% of false negatives attributed to bot detection (denominator: the manually validated false-negative sample, ~52 cases) quote : "We generally found that a subset of the false negatives could be attributed to cookie consent or other dialog boxes that blocked page load (17.3%), bot detection (8.6%), and websites we had not successfully visited (4.9%)." * USENIX/2017/characterizing-the-nature-and-dynamics-of-tor-exit-blocking figure: 50% of the most aggressive site categories (social networking, online shopping) blocked the authors' crawl over more than 60% of their Tor exit relays quote : "Websites in these categories are also observed to be the most aggressive-with 50% of them blocking over 60% of the chosen relays." * USENIX/2021/catching-phishers-by-their-bait-investigating-the-dutch-phishing-landscape-throu figure: 946 (69%) of the paper's 1,363 verified Dutch phishing domains served a blank screen to the authors' crawler via cloaking quote : "In fact, 946 (69%) of the detected phishing domains returned a blank screen - and no favicon - to our crawler when we visited the domain, meaning that the phishing website detected us and deployed cloaking techniques." * USENIX/2022/leaky-forms-a-study-of-email-and-password-exfiltration-before-form-submission figure: 3 CloudFlare CAPTCHA pages blocked the crawler, out of a 1,000-website pilot crawl quote : "identified only three CloudFlare CAPTCHA pages that" * USENIX/2023/a-large-scale-measurement-of-website-login-policies figure: 52% of domains on which a test account was created could not be analysed, primarily due to CAPTCHA-solving failures (18.0K of 37.3K fully evaluated) quote : "However, given that we failed to analyze 52% of domains on which we created an account, the true prevalence may be higher." * USENIX/2023/a-study-of-multi-factor-and-risk-based-authentication-availability figure: 43 of 56 'manual' sites (of 208 audited) needed manual login due to login CAPTCHAs; 3 of 56 detected and blocked the web driver quote : "Of these manual sites, 43 could not be scripted because they used CAPTCHAs at the login page, 10 required MFA on every login, and 3 detected and blocked our web driver." * USENIX/2025/beyond-exploit-scanning-a-functional-change-driven-approach-to-remote-software-v figure: 17 of 98 Joomla servers and 18 of ~100 phpMyAdmin servers blocked version-disclosure paths quote : "For instance, 17 websites blocked access to version-revealing paths like "language/en-GB/en-GB.xml", causing Metasploit-Joomla to fail in version identification." * WWW/2021/where-are-you-taking-me-understanding-abusive-traffic-distribution-systems figure: the automated-crawler persona was explicitly blocked 5 percentage points more often and covertly blocked at least 8 points more often than the human persona quote : "We observe that automated crawlers are explicitly blocked 5% more often than other users and covertly blocked (by sending users to parked or other error pages) at least 8% more frequently." * WWW/2024/the-double-edged-sword-identifying-authentication-pages-and-their-fingerprinting figure: 93 (1.9%) of 5,000 labelled pages could not have all 88 features collected due to bot detection quote : "we were unable to collect all 88 features for our model for 93 (1.9%) pages due to bot detection mechanisms" * WWW/2025/beyond-the-crawl-unmasking-browser-fingerprinting-in-real-user-interactions figure: 15 of ~3,000 websites (~1%) failed, of which 86.7% returned 4XX errors associated with bot detection quote : "First, we find that the automated crawler failed to visit 15 out of the 3K websites (≈ 1%)." ============================================================================== D2. QUANTIFIED FIGURES FOUND BY THE RECALL AUDIT ============================================================================== These are NOT part of the 22 above (they come from the 24-paper recall sample, not from the 138 candidates) but they are real published figures and the page uses them, so they are printed here with their denominators. * WWW/2023/the-hitchhikers-guide-to-facebook-web-tracking-with-invisible-pixels-and-click-i figure: 172 of ~2,308 websites (7.5%) quote : "Interestingly, there are 172 (7.5%) websites that blocked our access after a specifc event, or stored duplicate results for an event." * IEEE-SP/2025/predator-directed-web-application-fuzzing-for-efficient-vulnerability-validation figure: 3 of 6 undetected SQLi vulnerabilities in bWAPP quote : "The remaining 3 vulnerabilities could not be triggered by our current prototype due to the presence of CAPTCHAs and the requirement of specific User Agent (UA) header values." * USENIX/2025/websites-global-privacy-control-compliance-at-scale-and-over-time figure: 1.6-2.6% of crawl-set sites (307, 307 and 186 sites across three crawls) quote : "We identified that 1.6-2.6% of sites in our crawl set had a human check." ============================================================================== E. OBSTRUCTION REPORTING OVER TIME ============================================================================== Year Crawled papers Sweep candidates Reports obstruction Quantifies it Share of crawled ------ -------------- ---------------- ------------------- ------------- ---------------- 2010 25 2 0 0 0.0% 2011 22 3 0 0 0.0% 2012 29 3 0 0 0.0% 2013 26 1 0 0 0.0% 2014 35 5 1 0 2.9% 2015 41 7 4 1 9.8% 2016 40 5 2 1 5.0% 2017 51 8 4 3 7.8% 2018 61 6 2 1 3.3% 2019 97 9 1 0 1.0% 2020 75 7 2 1 2.7% 2021 75 8 2 2 2.7% 2022 110 16 4 1 3.6% 2023 125 12 5 3 4.0% 2024 110 15 6 4 5.5% 2025 * 129 29 10 5 7.8% 2026 * 69 2 0 0 0.0% * 2025 and 2026 are provisional: CCS 2026 and IMC 2026 have not been held, and IEEE S&P 2026 and WWW 2026 abstracts are not in the selection source, so those venue-years are under-represented by construction. 2010-2019: 14 of 427 crawled papers report obstruction (3.3%) 2020-2024: 19 of 495 crawled papers report obstruction (3.8%) 2025-2026: 10 of 198 crawled papers report obstruction (5.1%) [PROVISIONAL venue-years] ============================================================================== F. THE CONFIGURATION CHOICES THAT DECIDE DETECTABILITY, AND HOW OFTEN THEY ARE STATED ============================================================================== Population: the 1,120 crawled papers. Sentinels are counted as sentinels. Choice Field Papers stating it Share of 1,120 --------------------- ---------------------------- ----------------- -------------- Headless or headed crawlConfig.headless 140 12.5% Stateful or stateless crawlConfig.statefulness 219 19.6% Consent action crawlConfig.consentAction 349 31.2% Interaction depth crawlConfig.interactionDepth 841 75.1% Authentication crawlConfig.authentication 779 69.6% Which browser crawlConfig.browsers 529 47.2% Headless is the single most detectable configuration a crawl can choose, and it is the least reported of these. crawlConfig.headless values, over the 1080 crawled papers that have a crawlConfig object: value papers ---------- ------ not-stated 940 headless 93 headful 35 both 12 ============================================================================== G. OBSERVABLE DETECTION SIGNALS — FULL-TEXT SWEEP OVER THE WHOLE CORPUS ============================================================================== Population: all 5859 papers with full text on disk. These are MENTION counts, not usage counts: a paper that names navigator.webdriver may be describing it, defending against it, or checking for it. They are here to show how thin the literature on each signal is, and are not hand-audited. Signal named anywhere in the paper Papers (of 5859) Of which crawled (of 1,120) ---------------------------------- ---------------- --------------------------- CAPTCHA / challenge product 118 41 named bot-management vendor 106 38 TLS fingerprint (JA3/JA4) 37 11 fingerprint inconsistency 24 10 headless detection 20 19 stealth patches 15 13 navigator.webdriver 11 11 AI / LLM crawler 5 3 CDP / DevTools artefacts 4 1 HTTP header-order fingerprint 3 2 ============================================================================== H. ANTI-DETECTION TOOLING IN tools[] ============================================================================== papers naming a stealth patch in tools[]: 11 (of 5859 in the corpus) of which ran a crawl: 9 (of 1120 crawled) years: 2021-2026 Year Papers ---- ------ 2021 1 2022 1 2023 2 2024 2 2025 4 2026 1 ============================================================================== Y. ARITHMETIC DERIVED ON THIS PAGE ============================================================================== obstructed = quantified + narrative = 22 + 21 = 43 share of crawled = 43/1120 = 3.8% quantified share = 22/1120 = 2.0% candidates share = 138/1120 = 12.3% mitigated-only + obstructed = 38 + 43 = 81 papers engage with the problem at all = 7.2% of crawled papers that do NOT report obstruction = 1120 - 43 = 1077 = 96.2% of crawled papers that do NOT engage at all = 1120 - 81 = 1039 = 92.8% of crawled ============================================================================== Y2. QUOTE VERIFICATION ============================================================================== scripts/cd_quotecheck.mjs, last line of its output: 161 quotes: 111 exact, 37 partial, 13 below threshold Below-threshold is NOT "unsupported": every one was read by hand and all are present in the paper, spliced by the two-column reading order. ============================================================================== Z. EVERY NON-CORPUS NUMBER ON THE PAGE ============================================================================== 2.11.2 / 2023-03-01 puppeteer-extra-plugin-stealth's newest npm release and its publish date; the repo is not archived but has had no code release since source: registry.npmjs.org/puppeteer-extra-plugin-stealth; api.github.com/repos/berstend/puppeteer-extra (checked 2026-08-29) 3.5.5 / 2024-02-17 / 2025-07-05 undetected-chromedriver's newest PyPI release, its upload date, and the repo's last push; the repo publishes no GitHub Releases and no tags source: pypi.org/pypi/undetected-chromedriver/json; api.github.com/repos/ultrafunkamsterdam/undetected-chromedriver (checked 2026-08-29) 0.50.3 / 2026-05-13 nodriver's newest PyPI release and upload date. Its GitHub description reads 'Successor of Undetected-Chromedriver' — the same author's own succession claim source: pypi.org/pypi/nodriver/json; api.github.com/repos/ultrafunkamsterdam/nodriver (checked 2026-08-29) v1.62.0 / 2026-08-19 patchright-python's newest tag and the repo's last push source: api.github.com/repos/Kaliiiiiiiiii-Vinyzu/patchright-python (checked 2026-08-29) 1.0.19 / 2025-05-09 rebrowser-patches' newest tag and last push source: api.github.com/repos/rebrowser/rebrowser-patches (checked 2026-08-29) 1.0.6 / 2020-11-05 / 2021-12-30 selenium-stealth's newest PyPI release, its upload date and the repo's last push source: pypi.org/pypi/selenium-stealth/json; api.github.com/repos/diprajpatra/selenium-stealth (checked 2026-08-29) 2.0.3 / 2026-04-04 / 2024-07-29 the playwright-stealth PyPI package's newest release and upload date, whose Homepage now points at Mattwmaster58/playwright_stealth; the original AtuboDad/playwright_stealth repo was last pushed 2024-07-29 source: pypi.org/pypi/playwright-stealth/json; api.github.com/repos/{AtuboDad,Mattwmaster58}/playwright_stealth (checked 2026-08-29) MPL-2.0 / 2026-08-26 Camoufox's licence and last push source: api.github.com/repos/daijro/camoufox (checked 2026-08-29) MIT / v2.0.0 / 2026-08-11 BotD's licence, newest tag and last push source: api.github.com/repos/fingerprintjs/BotD (checked 2026-08-29) MIT / v1.27.0 / 2026-08-29 Anubis's licence, newest tag and last push. Its GitHub description reads 'Weighs the soul of incoming HTTP requests to stop AI crawlers' source: api.github.com/repos/TecharoHQ/anubis (checked 2026-08-29) 403 the HTTP status Akamai's own Bot Manager product page returned to curl with a browser User-Agent, and to a headless Playwright Chromium, from this datacentre host. Cause not established: it may be bot management, geography or ASN reputation source: curl and Playwright Chromium against https://www.akamai.com/products/bot-manager from a European datacentre host (checked 2026-08-29) 2023-09-29 the date Cloudflare announced Turnstile general availability, with Managed mode free for unlimited use. Cloudflare calls it a 'CAPTCHA alternative', not a CAPTCHA source: blog.cloudflare.com/turnstile-ga/ (checked 2026-08-29) 2025-07-01 the date Cloudflare changed its default to blocking AI crawlers unless they pay, and introduced pay-per-crawl source: blog.cloudflare.com/content-independence-day-no-ai-crawl-without-compensation/ (checked 2026-08-29) 05 June 2018 the date WebDriver Level 1, the W3C Recommendation that defines navigator.webdriver as returning true when the webdriver-active flag is set, was published. Level 2 is still a Working Draft, dated 02 July 2026 source: w3.org/TR/webdriver1/; w3.org/TR/webdriver2/ (checked 2026-08-29) RFC 9309 / September 2022 the Robots Exclusion Protocol RFC and its date. Proposed Standard; nothing obsoletes or updates it source: datatracker.ietf.org/doc/rfc9309/; rfc-editor.org/info/rfc9309 (checked 2026-08-29) 132 the Chrome version from which the old headless mode is available only as a separate chrome-headless-shell binary; --headless now selects the unified mode that shares code with headful Chrome source: developer.chrome.com/docs/chromium/headless (checked 2026-08-29) perimeterx.com -> humansecurity.com PerimeterX now redirects to HUMAN Security; distilnetworks.com redirects to imperva.com/products/bot-management; F5 completed its acquisition of Shape Security source: curl redirect chains; f5.com/company/news/press-releases/f5-completes-acquisition-of-shape-security (checked 2026-08-29) 2026-09-15 the date Cloudflare's new AI-bot defaults take effect for new domains: Training and Agent blocked on pages that display ads, Search still allowed; the legacy 'Block AI bots' option is marked deprecating on the same date source: developers.cloudflare.com/bots/llms-full.txt (checked 2026-08-29) 2025-09-24 the date Cloudflare announced its Content Signals Policy, adding search / ai-input / ai-train directives to robots.txt source: blog.cloudflare.com/content-signals-policy/ (checked 2026-08-29) 2023-12-04 the date Thales completed its acquisition of Imperva, per Imperva's own press release. Read first with a headless Playwright Chromium because curl was being served a 920-byte Incapsula challenge with HTTP 200; ~40 minutes later curl got the full 180 KB article three times in a row. The challenge was transient, and the page says so. source: imperva.com/company/press_releases/thales-completes-acquisition-of-imperva/ (checked 2026-08-29)
The headline numbers, restated with their denominators
| Figure | Numerator | Denominator | Where |
|---|---|---|---|
| Papers that ran a crawl | 1,120 | 5,859 papers in the corpus | POPULATIONS.crawled in scripts/lib.mjs |
| Sweep candidates | 138 | 1,120 crawling papers | report §A |
| Reports its own crawl obstructed | 43 | 1,120 crawling papers | report §B, hand verdicts |
| Puts a number on it | 22 | 1,120 crawling papers | report §B |
| Describes mitigations only | 38 | 1,120 crawling papers | report §B |
| Engages with the question at all | 81 | 1,120 crawling papers | report §Y |
| Sweep precision, “reports obstruction” | 43 | 138 candidates | report §B |
| Sweep precision, “on topic at all” | 81 | 138 candidates | report §B |
| States headless or headful | 140 | 1,120 crawling papers | report §F, crawlConfig.headless |
Names navigator.webdriver | 11 | 5,859 papers | report §G |
| Mentions an AI crawler | 5 | 5,859 papers | report §G |
Names a stealth patch in tools[] | 11 | 5,859 papers | report §H |
Populations that are NOT this page's. site_queries.mjs –page crawlers reports a
crawl-config table over 1,080 papers — the papers that have a crawlConfig object —
which is not the same as the 1,120 crawled papers used throughout this page. The
distinction is visible in report §F: the crawlConfig.headless value breakdown sums to
1,080, while every share on the page is out of 1,120. Do not mix them.
A shared fold this page had to fix
scripts/tool_fold.mjs is shared with Crawler. Its
Anti-detection patches family was /stealth|undetected-chromedriver/i, which is a
bare substring test on a free-text tool name, and it matched two things that are not
browser-automation patches at all:
| String | Where | What it actually is |
|---|---|---|
Stealth Audio Player | IEEE-SP/2022/mmspy-spying-phone-calls-using-mmwave-radars, tools[], category mobile-instrumentation | A smartphone earpiece-audio app in a mmWave-radar side-channel paper. |
Razer Blade Stealth laptop | NDSS/2022/auto-draft-217, otherToolsMentioned | A laptop. |
The family now requires either an automation library within 20 characters of the word or
an explicit patch noun, and also covers the successors named on the content page
(nodriver, patchright, rebrowser-patches). The 20-character window is what
keeps Puppeteer/Playwright stealth mode in while keeping the laptop out; both
transitions were checked one by one against the previous regex, and those two strings are
the only two that moved.
This changed a figure on a page that is not this one. report_crawler.mjs now
prints 11 / 1 where it printed 12 / 2 for the anti-detection row, so
Crawler's Which specialised crawlers actually get used table was
corrected in the same sitting. Its 9 | 0.8% row is unaffected, because neither false
positive is a crawling paper. The number guard was run over that page before and after
the edit and the set of unaccounted figures is identical, so nothing else moved.
The recall estimate
The sweep can only find a paper that wrote the sentence, so 43 is a floor. To bound the gap:
- Take the 982 crawling papers the tight sweep did not flag.
- Run the recall probe over them —
RECALL_WIDE_PATTERNinbotdet_fold.mjs,
a third pattern, separate from the tight sweep and from
''LOOSE_SELF_REPORT_PATTERNS'': any first-person sentence with an obstruction token within 240 characters. It hits **382**. It lived in a scratch file until a late review; ''report_crawler_detection.mjs'' §C now **recomputes** both numbers from the committed pattern and exits non-zero if they disagree with the stored metadata. - Take a **reproducible** every-15th sample of those, giving 24 papers, and hand-audit them with the same vocabulary and the same instructions.
Result: 6 of 24 were true misses (3 of them quantified). Extrapolated over 382, that is ~96 missed papers, Wilson 95% interval 46–172, so 89–215 papers total, or 7.9%–19.2% of the 1,120. The page publishes “at least 3.8%, plausibly 8–19%” and says explicitly that even 19% is a floor, because the wide pattern has unknown recall too.
A borderline that is flagged rather than buried.
IEEE-SP/2025/predator-directed-web-application-fuzzing-… is one of the three quantified
misses, and its CAPTCHAs were inside bWAPP, a deliberately vulnerable local benchmark
app, not on the open web. Dropping it moves the point estimate from 96 to 80 missed
papers. The report prints both. It is kept in because the auditor's reasoning — a
CAPTCHA stopped an automated tool from completing its measurement — is the same reasoning
applied elsewhere, and excluding it after seeing the number would be the wrong order of
operations.
Two figures on the content page come from this recall sample, not from the 138. They are Hausladen et al.'s 1.6–2.6% human-check rate and Bekos et al.'s 172 of ~2,308. Section D2 of the report prints them separately for exactly that reason; they are not counted in the 22.
The full recall sample with verdicts:
| Verdict | Paper | Deciding quote | Note |
|---|---|---|---|
| mitigated-only | CCS/2022/cart-ology-intercepting-targeted-advertising-via-ad-network-identity-entanglemen | merchants may not utilize Criteo at all times, on all pages, or may employ cloaking that simple crawling does not evade. | Speculative limitation producing a lower-bound caveat. |
| mitigated-only | USENIX/2024/does-online-anonymous-market-vendor-reputation-matter | OAMs and criminal forums increasingly adopt adversarial anti-scraping mechanisms. | Anti-scraping cited as motivation for stealthy scraping; no confirmed occurrence. |
| mitigated-only | WWW/2022/measuring-the-privacy-vs-compatibility-trade-off-in-preventing-third-party-state | All our crawlers were stateful and non-headless, giving them a fair chance at evading the most trivial forms of bot detection | Anti-detection measures plus a hedged, unconfirmed possible impact. |
| obstructed-narrative | USENIX/2026/network-level-prompt-and-trait-leakage-in-local-research-agents | By default, it issues Google queries via search_web, which frequently triggers reCAPTCHA; we therefore configure it to use Bing with automatic fallback. | Own research agent's Google search frequently blocked by reCAPTCHA; no count. |
| obstructed-narrative | WWW/2013/two-years-of-short-urls-internet-measurement-security-threats-and-countermeasure | We tested goo.gl in late 2010, whereas the results for the remainder shorteners are up to date (late 2011), when Google introduced a CAPTCHA that prevented automated submissions. | Own automated URL submissions prevented by a CAPTCHA Google introduced; no count. |
| obstructed-narrative | WWW/2018/exposing-search-and-advertisement-abuse-tactics-and-infrastructure-of-technical | some of the search engines we considered did not have well documented APIs and vanilla crawlers are either blocked or not shown content such as ADs. | Own basic crawler blocked by search engines, prompting a PhantomJS workaround; no count. |
| obstructed-quantified | IEEE-SP/2025/predator-directed-web-application-fuzzing-for-efficient-vulnerability-validation | The remaining 3 vulnerabilities could not be triggered by our current prototype due to the presence of CAPTCHAs and the requirement of specific User Agent (UA) header values. | BORDERLINE: bWAPP is a deliberately vulnerable local benchmark app, not a live site, so this is not a crawl of the open web. Counted in the estimate and flagged. |
| obstructed-quantified | USENIX/2025/websites-global-privacy-control-compliance-at-scale-and-over-time | We identified that 1.6-2.6% of sites in our crawl set had a human check. | Own Selenium crawler repeatedly hit human-check pages; quantified per crawl. |
| obstructed-quantified | WWW/2023/the-hitchhikers-guide-to-facebook-web-tracking-with-invisible-pixels-and-click-i | Interestingly, there are 172 (7.5%) websites that blocked our access after a specifc event, or stored duplicate results for an event. | Own crawler's access blocked; the paper attributes it to possible bot-detection flagging. |
| offtopic | CCS/2010/attacks-and-design-of-image-recognition-captchas | We first review and examine all IRCs schemes known to us and evaluate each scheme against the practical requirements in CAPTCHA applications, particularly in large-scale real-life applications such as Gmail and Hotmail. | CAPTCHA is the research subject; their 30,000-image crawl is not reported as obstructed. |
| offtopic | CCS/2017/rewriting-history-changing-the-archived-web-from-the-present | After we disclosed the results of this paper to Internet Archive, they modified the Wayback Machine to deploy CSP headers, which we confirmed blocked archive-escape requests such as the one which allowed our attack in Figure 1. | A defence deployed after disclosure blocking their attack technique. |
| offtopic | CCS/2018/on-the-accuracy-of-password-strength-meters | When analyzing the Apple hybrid PSM, we found server-side blacklisting of the entire 14 million RockYou passwords in combination with a basic LUDS approach that checks for symbols and length. | Password blacklists inside strength meters. |
| offtopic | CCS/2021/sugarcoat-programmatically-generating-privacy-preserving-web-compatible-resource | We designed SugarCoat to generate resource replacements compatible with existing content blocking tools, including uBlock Origin and the Brave Browser. | Content blocking is the studied artefact. |
| offtopic | IEEE-SP/2018/the-spyware-used-in-intimate-partner-violence | We therefore filter the queries using regular expression blacklists (built via manual inspection). | Blacklists filtering Google-suggestion results. |
| offtopic | IMC/2016/a-multi-perspective-analysis-of-carrier-grade-nat-deployment | Lastly, our findings document further erosion of the meaningfulness of IP address reputation, addressbased blacklisting, IP-to-user attribution, and geolocating end-users. | 'Block' means IP address blocks. |
| offtopic | IMC/2019/ddos-hide-seek-on-the-effectiveness-of-a-booter-services-takedown | We select 4 popular booters (see Table 1) from the booter blacklist based on their Alexa website rank (booter names anonymized). | Booter-service lists and NTP reflector blocking. |
| offtopic | NDSS/2012/warningbird-detecting-suspicious-urls-in-twitter-stream | Unfortunately, we cannot find suitable blacklists for labeling our datasets | Blacklists as a ground-truth labelling resource. |
| offtopic | NDSS/2015/parking-sensors-analyzing-and-detecting-parked-domains | For each investigated service, we tested whether the domains parked with them tried to detect or bypass the workings of ad-blocking extensions. | Ad-blocker detection is the studied phenomenon. |
| offtopic | NDSS/2023/doitrust-dissecting-on-chain-compromised-internet-domains-via-graph-learning | Surprisingly, we find malicious nodes in blocking access to such sites as and when they are found. | The paper's own allow-list/deny-list labels. |
| offtopic | PETS/2020/a-comparative-measurement-study-of-web-tracking-on-mobile-and-desktop-environmen | We identified that five organizations, which are Adobe, Optimzely, CloudFlare, Amazon, and Kameleoon, provide their content delivery network (CDN) services to various trackers. | Cloudflare as a CDN host for trackers. |
| offtopic | PETS/2022/fingerprintv-fingerprinting-smart-tv-apps | Network-level blockers, such as Pi-hole, that block traffic to select domains can prevent identification of an app via its DBF. | Network blockers as a defence against the paper's technique. |
| offtopic | USENIX/2021/fingerprinting-in-style-detecting-browser-extensions-via-injected-style-sheets | Adblocker Detection: We have observed a few cases from our sample where the script is detecting whether the user has installed an adblocking extension. | EasyList and adblocker detection are the studied phenomena. |
| offtopic | USENIX/2024/understanding-help-seeking-and-help-giving-on-social-media-for-image-based-sexua | victim-survivors often mentioned technical protections they had already taken, such as blocking the perpetrator, reporting the perpetrator to the platform. | Victims blocking perpetrators. |
| offtopic | WWW/2019/evaluating-anti-fingerprinting-privacy-enhancing-technologies | Many prior studies have focused on BLPETs, which use blacklists to block known tracking domains and scripts. | Blocking is the studied PET mechanism. |
Quote verification
Every deciding quote in both audits was checked against the rendering the auditors read, with whitespace, quote marks and dashes normalised. Three verdicts, and below-threshold is not “unsupported”: it means read it by hand.
node scripts/cd_quotecheck.mjs
- cd_quotecheck-output.txt
### verdicts_all.json partial CCS/2010/spam-the-underground-on-140-characters-or-less 93% of 15 windows MISSING CCS/2011/text-based-captcha-strengths-and-weaknesses 45% of 22 windows "Many websites use CAPTCHAs, or Completely Automated Public Turing tests to tell Computers and Humans Apart, in an attempt to block automated" partial CCS/2016/protecting-insecure-communications-with-topology-aware-network-tunnels 76% of 17 windows MISSING CCS/2018/yet-another-text-captcha-solver-a-generative-adversarial-network-based-approach 56% of 9 windows "The real captchas are automatically collected using a web crawler written in Python." partial CCS/2022/im-spartacus-no-im-spartacus-proactively-protecting-users-from-phishing-by-inten 61% of 28 windows partial IEEE-SP/2014/hunting-the-red-fox-online-understanding-and-detection-of-mass-redirect-script-i 67% of 9 windows MISSING IEEE-SP/2019/measuring-and-analyzing-search-engine-poisoning-of-linguistic-collisions 55% of 11 windows "To ensure that the search engine servers would not be overloaded, we rate-limited our crawlers." partial IMC/2015/who-is-com-learning-to-parse-whois-records 80% of 10 windows partial IMC/2018/how-tracking-companies-circumvented-ad-blockers-using-websockets 92% of 49 windows partial IMC/2019/what-you-see-is-not-what-you-get-discovering-and-tracking-social-engineering-att 97% of 37 windows partial IMC/2022/measuring-uid-smuggling-in-the-wild 90% of 50 windows partial IMC/2022/phishinpatterns-measuring-elicited-user-interactions-at-scale-on-phishing-websit 69% of 13 windows partial IMC/2023/ecn-with-quic-challenges-in-the-wild 63% of 32 windows partial IMC/2025/canvassing-the-fingerprinters-characterizing-canvas-fingerprinting-use-across-th 86% of 29 windows MISSING NDSS/2019/how-bad-can-it-git-characterizing-secret-leakage-in-public-github-repositories 46% of 13 windows "we can run all queries every thirty minutes within the rate limits using a single API key." MISSING NDSS/2020/deceptive-previews-a-study-of-the-link-preview-trustworthiness-in-social-platforms 50% of 2 windows "posting prevented due to bot detection" MISSING NDSS/2025/scammagnifier-piercing-the-veil-of-fraudulent-shopping-website-campaigns 35% of 26 windows "During the development of our framework, SCAMMAGNIFIER, we faced several challenges including dealing with diverse fraudulent shopping websi" MISSING PETS/2017/topics-of-controversy-an-empirical-analysis-of-web-censorship-lists 56% of 9 windows "For instance, LinkedIn blocked us from accessing user profile pages and job listings." partial PETS/2020/missed-by-filter-lists-detecting-unknown-third-party-trackers-with-invisible-pix 95% of 19 windows MISSING PETS/2022/a-global-survey-of-android-dual-use-applications-used-in-intimate-partner-survei 38% of 16 windows "Google Play blocks some IPS-specific queries, such as "track your husband", probably to prevent potential abusers from finding dual-use apps" partial PETS/2022/setting-the-bar-low-are-websites-complying-with-the-minimum-requirements-of-the 86% of 28 windows partial PETS/2024/automatic-generation-of-web-censorship-probe-lists 74% of 23 windows partial USENIX/2015/measuring-the-longitudinal-evolution-of-the-online-anonymous-marketplace-ecosyst 87% of 30 windows MISSING USENIX/2017/characterizing-the-nature-and-dynamics-of-tor-exit-blocking 56% of 18 windows "Websites in these categories are also observed to be the most aggressive-with 50% of them blocking over 60% of the chosen relays." MISSING USENIX/2022/measurement-by-proxy-on-the-accuracy-of-online-marketplace-measurements 46% of 13 windows "On session start, we provided the scraper with a session cookie manually obtained after solving a CAPTCHA." partial USENIX/2022/the-security-lottery-measuring-client-side-web-security-inconsistencies 72% of 18 windows partial USENIX/2023/a-study-of-multi-factor-and-risk-based-authentication-availability 70% of 27 windows partial USENIX/2023/trident-towards-detecting-and-mitigating-web-based-social-engineering-attacks 81% of 27 windows partial USENIX/2024/fv8-a-forced-execution-javascript-engine-for-detecting-evasive-techniques 63% of 19 windows partial USENIX/2025/are-captchas-still-bot-hard-generalized-visual-captcha-solving-with-agentic-visi 93% of 15 windows partial USENIX/2025/beyond-exploit-scanning-a-functional-change-driven-approach-to-remote-software-v 86% of 14 windows MISSING USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale 56% of 18 windows "except in 2024, when we found a new server that provided over a million SM2 certificates until they blocked our IP address." partial USENIX/2025/the-ransomware-decade-the-creation-of-a-fine-grained-dataset-and-a-longitudinal 73% of 15 windows partial WWW/2018/crimebb-enabling-cybercrime-research-on-underground-forums-at-scale 93% of 15 windows no-quote WWW/2022/reproducibility-and-replicability-of-web-measurement-studies (offtopic) partial WWW/2023/online-advertising-in-ukraine-and-russia-during-the-2022-russian-invasion 79% of 19 windows MISSING WWW/2024/navigating-the-post-api-dilemma 58% of 24 windows "Moreover, given the severity and the impact of the topic surrounding COVID19, search engines may have placed stricter moderation policies on" partial WWW/2025/welcome-to-the-dark-side-analyzing-the-revenue-flows-of-fraud-in-the-online-ad-e 63% of 16 windows MISSING WWW/2025/whats-in-phishers-a-longitudinal-study-of-security-configurations-in-phishing-we 52% of 25 windows "This approach provides a comprehensive view of the phishing webpages by fully rendering all client-side resources and helps evade anti-bot t" ### recall_verdicts.json partial IMC/2016/a-multi-perspective-analysis-of-carrier-grade-nat-deployment 94% of 16 windows partial IMC/2019/ddos-hide-seek-on-the-effectiveness-of-a-booter-services-takedown 76% of 17 windows partial PETS/2020/a-comparative-measurement-study-of-web-tracking-on-mobile-and-desktop-environmen 95% of 19 windows partial CCS/2021/sugarcoat-programmatically-generating-privacy-preserving-web-compatible-resource 100% of 16 windows partial USENIX/2021/fingerprinting-in-style-detecting-browser-extensions-via-injected-style-sheets 90% of 20 windows partial PETS/2022/fingerprintv-fingerprinting-smart-tv-apps 94% of 16 windows partial NDSS/2023/doitrust-dissecting-on-chain-compromised-internet-domains-via-graph-learning 92% of 13 windows partial WWW/2023/the-hitchhikers-guide-to-facebook-web-tracking-with-invisible-pixels-and-click-i 71% of 17 windows partial USENIX/2024/does-online-anonymous-market-vendor-reputation-matter 80% of 5 windows partial USENIX/2024/understanding-help-seeking-and-help-giving-on-social-media-for-image-based-sexua 94% of 16 windows partial USENIX/2025/websites-global-privacy-control-compliance-at-scale-and-over-time 80% of 10 windows partial USENIX/2026/network-level-prompt-and-trait-leakage-in-local-research-agents 72% of 18 windows 161 quotes: 111 exact, 37 partial, 13 below threshold
All 13 below-threshold quotes were read by hand against paper.cols.txt. All 13 are
present in the paper. The mismatch is always the two-column reading order splicing
another column through the sentence. Three were rewritten after that reading, and the
rewrite is recorded in the verdict file's note field:
| Paper | What was wrong | What it says |
|---|---|---|
USENIX/2017/characterizing-the-nature-and-dynamics-of-tor-exit-blocking | The stored quote was truncated at “Websites in these categories are also observed”, because a figure legend (“Our crawl / Khattak et al”) is spliced through the sentence. | “…to be the most aggressive-with 50% of them blocking over 60% of the chosen relays.” |
CCS/2020/impersonation-as-a-service-… | The stored quote supported “two accounts blacklisted” while the figure said five. | “In the process, an additional three accounts were banned, for a total of five banned accounts.” The denominator was also corrected: the auditor reported “5 of 11 accounts”; the paper does not state a total, so the figure now reads “5 accounts…; the paper does not state the total number of accounts obtained”. |
USENIX/2022/leaky-forms-… | The acknowledgements column is spliced through the sentence, so no long span is contiguous. | Full sentence: “During a 1K website pilot crawl, we identified only three CloudFlare CAPTCHA pages that blocked our crawler.” Only the fragment “identified only three CloudFlare CAPTCHA pages that” is contiguous, and that is what is stored so the checker stays meaningful. |
A second, independent check on the same figures. cd_quotecheck.mjs verifies the
auditors' quotes; verify_crawler_detection_figures.mjs verifies the page's
figures, against the papers, without consulting the audit at all. It found and fixed two
things the quote check could not:
- Bekos et al.'s denominator. The page had
~2,308; the paper states 2,308
exactly (“2,308 (2.3K FBP) of the top 10K websites”), so the tilde came from
back-calculating 172 ÷ 0.075. Worse, reading the whole sentence showed the figure is **conflated**: "blocked our access after a specific event, //or// stored duplicate results for an event". The row now says so. * **Bijmans et al.'s denominator**, already covered above — the same failure mode, found first by a reviewer.
Both are the same defect: a number that looks like it came from the paper and came from arithmetic on the page instead. Two of 22 rows had it.
- verify_crawler_detection_figures-output.txt
ok IMC/2016/characterizing-website-behaviors-across-logged-in-and-not-logged-in-users -- 75 of 420 selected sites (~17.9%) dropped ok IMC/2017/tripwire-inferring-internet-site-compromise -- 19% of sites with a registration form (37% within the top-100 subset) ok IMC/2023/the-prevalence-of-single-sign-on-on-the-web-towards-the-next-generation-of-web-c -- 8% of 994 responsive sites ok IMC/2025/somesite-i-used-to-crawl-awareness-agency-and-efficacy-in-protecting-content-cre -- 1,487 of the top 10,000 sites (15%) ok NDSS/2024/fp-fed-privacy-preserving-federated-detection-of-browser-fingerprinting -- 1,700 of 20,000 sites (8.5%); 64.3% of those HTTP 403 ok WWW/2024/the-double-edged-sword-identifying-authentication-pages-and-their-fingerprinting -- 93 of 5,000 labelled pages (1.9%) ok WWW/2025/beyond-the-crawl-unmasking-browser-fingerprinting-in-real-user-interactions -- 15 of ~3,000 sites (~1%); 86.7% returned 4XX ok USENIX/2022/leaky-forms-a-study-of-email-and-password-exfiltration-before-form-submission -- 3 pages in a 1,000-site pilot crawl ok PETS/2024/johnny-still-cant-opt-out-assessing-the-iab-ccpa-compliance-framework -- 2 of 200 re-visited sites (1%) ok USENIX/2025/websites-global-privacy-control-compliance-at-scale-and-over-time -- 1.6-2.6% of the crawl set ok WWW/2023/the-hitchhikers-guide-to-facebook-web-tracking-with-invisible-pixels-and-click-i -- 172 of 2,308 sites (7.5%) ok PETS/2025/tracker-installations-are-not-created-equal-understanding-tracker-configuration -- 8.6% of the manually validated false-negative sample ok USENIX/2023/a-large-scale-measurement-of-website-login-policies -- 52% of domains where an account had been created ok USENIX/2023/a-study-of-multi-factor-and-risk-based-authentication-availability -- 43 of 56 needed manual login; 3 of 56 blocked the driver ok IEEE-SP/2025/403-forbidden-ethically-evaluating-broken-access-control-in-the-wild -- 3 of 110 sites with test accounts ok IMC/2018/403-forbidden-a-global-view-of-cdn-geoblocking -- ~30% of Akamai 403s were false positives ok WWW/2021/where-are-you-taking-me-understanding-abusive-traffic-distribution-systems -- explicitly blocked +5 points, covertly blocked +8 points ok USENIX/2021/catching-phishers-by-their-bait-investigating-the-dutch-phishing-landscape-throu -- 946 of 1,363 detected phishing domains (69%) ok PETS/2017/fingerprinting-keywords-in-search-queries-over-tor -- 54% of FP keyword groups vs 35% of others ok USENIX/2017/characterizing-the-nature-and-dynamics-of-tor-exit-blocking -- 50% of the most aggressive categories blocked over 60% of relays ok CCS/2020/impersonation-as-a-service-characterizing-the-emerging-criminal-infrastructure-f -- 5 accounts banned; total not stated ok USENIX/2023/an-empirical-study-evaluation-of-modern-captchas -- 1,400 participants solving 14,000 CAPTCHAs 22 figures checked, 0 not found in the cited paper.
One further figure was checked by hand because the page leans on it: Searles et al.'s 1,400 participants — verified verbatim in the paper's own abstract (“user studies in which 1,400 participants collectively solved 14,000 CAPTCHAs”). A draft of the page had misdescribed that paper as showing CAPTCHAs are no obstacle to a solver; it is a usability study of what CAPTCHAs cost humans, and the sentence was rewritten before publication.
The full hand audit
All 138 candidates, with the verdict, the deciding sentence and the reasoning.
This is the residue as well as the result: the 57 offtopic rows are the sweep's false
positives, printed in full rather than discarded, so the next run can see what the
patterns catch that they should not.
| Verdict | Paper | Deciding quote | Note |
|---|---|---|---|
| mitigated-only | CCS/2016/protecting-insecure-communications-with-topology-aware-network-tunnels | Instead of blocking our network measurements an adversary could tamper with the data we receive by spoofing responses from upstream routers. | Hypothetical adversary capability as a threat to validity; no occurrence reported. |
| mitigated-only | CCS/2023/measuring-website-password-creation-policies-at-scale | Furthermore, our evaluation may fail on sites that can detect our measurements (e.g., sites deploying anti-bot defenses) or where our machine learning models misclassify. | Anti-bot detection named only as a possible limitation; no count of sites that actually blocked them. |
| mitigated-only | CCS/2025/exploiting-the-shared-storage-api | If is possible that if a real user were to interact with the same sites that were a part of our measurement they could cause additional code to run that could trigger calls to the Shared Storage API or avoid some level of bot detection. | Bot detection raised only as a limitation; no report of the crawler being blocked. |
| mitigated-only | IEEE-SP/2011/design-and-evaluation-of-a-real-time-url-spam-filtering-service | Attackers can tune features to fall below the spam classification threshold, modify content after classification, and block our crawler. | Listed as a potential future adversarial attack in Discussion; no occurrence reported. |
| mitigated-only | IEEE-SP/2012/evilseed-a-guided-approach-to-finding-malicious-web-pages | Cybercriminals could try to detect our visits. | Describes anti-detection measures (fresh browser state, dynamic IP pool) taken to avoid being spotted by malicious sites; no report of actual obstruction occurring. |
| mitigated-only | IEEE-SP/2019/measuring-and-analyzing-search-engine-poisoning-of-linguistic-collisions | To ensure that the search engine servers would not be overloaded, we rate-limited our crawlers. | Self-imposed throttling to avoid overloading/triggering the target's defenses; no report of actual blocking occurring. |
| mitigated-only | IMC/2014/search-seizure-the-effectiveness-of-interventions-on-seo-campaigns | Operationally, for both manual and automated orders, we visit each store using via TOR and create orders at weekly intervals, and we limit orders to three per day per campaign to reduce the chance of being detected by the store or payment processor. | Preventive measures only; no report that detection occurred. |
| mitigated-only | IMC/2015/location-location-location-the-impact-of-geolocation-on-web-search-personalizati | We distributed our query load over 44 machines in a single /24 subnet to avoid being rate-limited by Google. | Purely preventive; no statement that rate-limiting occurred. |
| mitigated-only | IMC/2017/measuring-and-mitigating-oauth-access-token-abuse-by-collusion-networks | To fully automate our honeypots, we use a CAPTCHA solving service [4] for automatically solving CAPTCHAs and Selenium [19] for submitting requests to collusion networks. | CAPTCHA-solving as mitigation for their honeypots; no report of being detected. |
| mitigated-only | IMC/2019/what-you-see-is-not-what-you-get-discovering-and-tracking-social-engineering-att | All interactions with this headless browser are commandeered with the help of a custom Chrome DevTools API client that we developed to avoid anti-bot checks implemented by some of the ad networks to detect existing automation tools, such as Selenium WebDriver. | Tooling built to avoid anti-bot detection; no report of obstruction occurring. |
| mitigated-only | IMC/2023/ecn-with-quic-challenges-in-the-wild | Those providers that block our measurement subnet without an explicit blocklist opt out (we provide detailed subnet information, such that blocking is possible) are not contacted from our distributed vantage points leaving these operator measures intact. | Ethics-driven accommodation for pre-existing opt-outs, unquantified. |
| mitigated-only | IMC/2023/on-the-similarity-of-web-measurements-under-different-experimental-setups | Such mimicked user interaction also interferes with bot detection mechanisms so that such methods do not detect our crawler. | Mitigation; the '291 websites block crawlers' figure is a citation to Vastel et al., not this paper's finding. |
| mitigated-only | IMC/2025/where-in-the-world-are-my-trackers-mapping-web-tracking-flow-across-diverse-geog | Moreover, we did not employ any techniques to evade Selenium-based bot detection by websites, and each website was visited once; prior work has | Named as a limitation (no evasion attempted); no claim obstruction occurred. |
| mitigated-only | NDSS/2017/fake-co-visitation-injection-attacks-to-recommender-systems | Our system frequently switches between these servers to visit the websites, in order to avoid an IP address being blocked due to abnormal activities. | Proxy rotation; no report of whether blocking occurred. |
| mitigated-only | NDSS/2019/how-bad-can-it-git-characterizing-secret-leakage-in-public-github-repositories | we can run all queries every thirty minutes within the rate limits using a single API key. | Query schedule designed around published API rate limits; a mitigation. |
| mitigated-only | NDSS/2024/understanding-and-analyzing-appraisal-systems-in-the-underground-marketplaces | While we acknowledge the ethical implications of using cookies, which enables us to bypass the CAPTCHA and may not follow the policy set by site administrators, the benefit of ensuring data integrity and completeness weighed in favor of this design choice. | Mitigation (login cookie + proxies); never states obstruction occurred. |
| mitigated-only | NDSS/2025/scammagnifier-piercing-the-veil-of-fraudulent-shopping-website-campaigns | During the development of our framework, SCAMMAGNIFIER, we faced several challenges including dealing with diverse fraudulent shopping websites templates, evading bot detection techniques, dynamic content loading, and handling session timeouts. | Named as a design challenge tackled by mimicking human interaction; no occurrence figure. |
| mitigated-only | NDSS/2026/characterizing-the-implementation-of-censorship-policies-in-chinese-llm-services | Our scrapers also account for potential rate limiting by queuing a retest after certain failure conditions are met. | Self-imposed rate-limit mitigation; the paper's blocking findings are content censorship, the research subject. |
| mitigated-only | NDSS/2026/one-email-many-faces-a-deep-dive-into-identity-confusion-in-email-aliases | Our implementation builds on DrissionPage [35], a browser automation tool that helps bypass bot detection. | Mitigation tool for registration probing; platform blocking of aliases is the research subject. |
| mitigated-only | PETS/2015/automated-experiments-on-ad-privacy-settings | We cannot generalize our results if for example, instead of turning off some usage upon detecting our experiments, Google turns it on. | Hypothetical threat to validity, not a reported occurrence. |
| mitigated-only | PETS/2022/setting-the-bar-low-are-websites-complying-with-the-minimum-requirements-of-the | As with any study that relies on automated web crawlers, it is possible that websites detected our crawler and changed their behavior in response, e.g., by adding or removing a DNSMPI link. | Threat to validity with mitigations; the 27% crawl-failure figure is attributed to DNS/connection/TLS/4xx-5xx generally. |
| mitigated-only | PETS/2025/empirically-measuring-data-localization-in-the-eu | Our aim is to avoid triggering anti-bot/anticrawl measures that (likely most) popular sites implement. | Precautions (headless Selenium + residential proxies); no report of whether obstruction occurred. |
| mitigated-only | PETS/2025/more-and-scammier-ads-the-perils-of-youtubes-ad-privacy-settings | We waited at least 12 hours to avoid bot detection and for the activity deletion to take effect before repeating the process for the next video list | A footnote speculates some accounts 'might have been detected as inauthentic', unconfirmed. |
| mitigated-only | PETS/2025/onion-location-measurements-and-fingerprinting | We tried five times throughout the day for each onion and associated clearnet URL (after onion success, re-trying up to five times if we hit a Cloudflare CAPTCHA). | A retry protocol for Cloudflare CAPTCHAs, but never says how often they were hit. |
| mitigated-only | USENIX/2015/measuring-the-longitudinal-evolution-of-the-online-anonymous-marketplace-ecosyst | We also provide as input to the scraper a session cookie that we obtain by manually log- ging into the marketplace and solving a CAPTCHA; and parameters such as the maximum desired scraping rate. | Mitigation with no report of actual obstruction. |
| mitigated-only | USENIX/2020/cached-and-confused-web-cache-deception-in-the-wild | We avoided generating excessive amounts of traffic and limited our crawls as described above in order to avoid triggering rate-limiting alerts, in addition to ethical motivations. | Precautions described; no claim their crawl was blocked. |
| mitigated-only | USENIX/2022/automating-cookie-consent-and-gdpr-violation-detection | However, if the websites can detect our crawler as a bot, they can serve different data to the crawler than to a real user. | Hypothetical threat to validity only. |
| mitigated-only | USENIX/2022/measurement-by-proxy-on-the-accuracy-of-online-marketplace-measurements | On session start, we provided the scraper with a session cookie manually obtained after solving a CAPTCHA. | Bootstrap mitigation; no quantified own-crawl outcome. |
| mitigated-only | USENIX/2024/arcanum-detecting-and-evaluating-the-privacy-risks-of-browser-extensions-on-web | We downloaded extensions from the Chrome Web Store serially to rate-limit our requests. | Pure mitigation; no statement the store blocked them. |
| mitigated-only | USENIX/2024/fv8-a-forced-execution-javascript-engine-for-detecting-evasive-techniques | Finally, due to the high volume of requests and jobs, we take precautions to avoid rate limiting and ensure consistency between job runs. | Mitigation (Web Page Replay); no report obstruction occurred. |
| mitigated-only | USENIX/2025/evaluating-privacy-policies-under-modern-privacy-laws-at-scale-an-llm-based-auto | To ensure that our crawling has minimal impact on websites, we rate-limited our crawl of sites, such that we do not crawl a site faster than one page every 30 seconds (in most cases, much slower). | 2,578 'Access Failure' domains are never attributed to anti-bot defences. |
| mitigated-only | WWW/2013/traveling-the-silk-road-a-measurement-analysis-of-a-large-anonymous-online-marke | Provided we can manually refresh the authentication cookie at least once per week, this allows us to bypass the CAPTCHA mechanism and automate our crawls. | Workaround; no reported instance of the crawl being blocked. |
| mitigated-only | WWW/2019/doppelgangers-on-the-dark-web-a-large-scale-assessment-on-phishing-hidden-web-se | To bypass anti-crawler/bot mechanisms that dark websites may employ, we used the latest Tor browser user agent for the crawler and distributed HTTP(S) requests towards the same domain via different Tor circuits to avoid being blacklisted due to sending numerous requests. | Preventive measures; no statement that obstruction occurred. |
| mitigated-only | WWW/2020/beyond-the-front-page-measuring-third-party-dynamics-in-the-field | While a website might detect our crawler, it is not detected by current mechanisms seen in the wild, as presented by Jonker et al. | Bot-mitigation techniques used; explicitly states current mechanisms did not catch their crawler. |
| mitigated-only | WWW/2024/phishing-vs-legit-comparative-analysis-of-client-side-resources-of-phishing-and | the other is that our crawler may have been blocked by the attackers using a cloaking technique. | Hypothesised, unconfirmed explanation mixed with a non-blocking alternative. |
| mitigated-only | WWW/2025/7-days-later-analyzing-phishing-site-lifespan-after-detected | Then, we implement a custom web crawler using Puppeteer [25] and Chromium, augmented with stealth plugins [13] to bypass potential anti-bot measures employed in sophisticated phishing websites. | The paper's 42% failure rate is attributed to DNS/page-not-found/timeout, not bot-blocking. |
| mitigated-only | WWW/2025/welcome-to-the-dark-side-analyzing-the-revenue-flows-of-fraud-in-the-online-ad-e | We keep the implementation as is and only change the user-agent header so that we are not blocked by websites. | Pure mitigation; no statement that blocking occurred. |
| mitigated-only | WWW/2025/whats-in-phishers-a-longitudinal-study-of-security-configurations-in-phishing-we | This approach provides a comprehensive view of the phishing webpages by fully rendering all client-side resources and helps evade anti-bot techniques that might otherwise block our crawler [26, 40]. | 'might otherwise block'; the 53.4% inaccessible-URL figure is network errors/offline servers. |
| obstructed-narrative | CCS/2025/piixel-leaks-passive-identification-of-personally-identifiable-information-leaka | We do not keep track of websites that do not send the full URL to Meta, or websites that employ bot detection mechanisms (e.g., CAPTCHA) that block our crawler. | Confirms sites blocked their dynamic crawler, no count; a nearby 6.05% is hedged as 'likely blocked… or a network issue'. |
| obstructed-narrative | IEEE-SP/2014/hunting-the-red-fox-online-understanding-and-detection-of-mass-redirect-script-i | This clearly indicates that the network blacklisted our crawler and attempted to cloak. | Authors' own crawler was blacklisted by the malicious redirect network under study; reported as occurring but no count given. |
| obstructed-narrative | IEEE-SP/2016/cloak-of-visibility-detecting-when-machines-browse-a-different-web | Along this vein, we also find instances where CloudFlare DDoS protection automatically blocks a fraction of our crawls, instead displaying an interstitial “checking your browser” which we mistake for a malicious interstitial. | Own crawls were actually blocked by CloudFlare bot/DDoS protection, but only described as “a fraction” with no exact count or denominator. |
| obstructed-narrative | IMC/2015/from-academy-to-zone-an-analysis-of-the-new-tld-land-rush | Some registrars made us solve a single captcha after five to ten requests. | Own collection obstructed (also: CZDS blocked obvious scripting attempts); no count. |
| obstructed-narrative | IMC/2015/measurement-and-analysis-of-traffic-exchange-services | eBesucher temporarily blocked our accounts. | Own accounts blocked/penalised; no fraction reported. |
| obstructed-narrative | IMC/2022/phishinpatterns-measuring-elicited-user-interactions-at-scale-on-phishing-websit | Obviously, our intelligent crawler is also hindered by some of these user verification patterns, such as CAPTCHAs. | Own crawler hindered by CAPTCHAs; the 2,608/51,859 figures measure CAPTCHA prevalence, not crawler failure. |
| obstructed-narrative | IMC/2025/exploration-of-the-dynamics-of-buy-and-sale-of-social-media-accounts | All inspected markets required user registration and implemented complex, site-specific, non-standard CAPTCHAs. | CAPTCHAs blocked automated collection on all inspected markets, forcing manual collection; no count. |
| obstructed-narrative | NDSS/2015/seven-months-worth-of-mistakes-a-longitudinal-study-of-typosquatting-abuse | By manual analysis, we discovered that some of the domains showing blank and black pages did show content when visited through a foreign proxy server, indicating that some typosquatters were using IP blacklists or geolocation information to block our crawlers. | Confirmed occurrence; the paper has a 'Crawl error' category for explicit IP blocking but never reports its count. |
| obstructed-narrative | NDSS/2019/we-value-your-privacy-now-take-some-cookies-measuring-the-gdprs-impact-on-web-privacy | We observed that several websites using Cloudflare's services blocked direct requests and asked to resolve a CAPTCHA before redirecting to the actual site. | Actual occurrence in Limitations, but only 'several websites'. |
| obstructed-narrative | NDSS/2020/deceptive-previews-a-study-of-the-link-preview-trustworthiness-in-social-platforms | posting prevented due to bot detection | One of the exclusion reasons among 37 platforms removed from 47 candidates; no per-reason count. |
| obstructed-narrative | PETS/2017/topics-of-controversy-an-empirical-analysis-of-web-censorship-lists | For instance, LinkedIn blocked us from accessing user profile pages and job listings. | Own PhantomJS collector blocked by a named site; no count. |
| obstructed-narrative | PETS/2022/who-knows-i-like-jelly-beans-an-investigation-into-search-privacy | However, we made few efforts to circumvent IP-blocking or solve CAPTCHAs during our crawl. | IP-blocking and CAPTCHAs occurred among the causes of their 15.7% failed visits, but that figure mixes DNS failures, 4xx/5xx and timeouts. |
| obstructed-narrative | PETS/2025/understanding-privacy-norms-through-web-forms | These also include domains that completely block our script (e.g., whatsapp.com). | 2,099 sites failed partly due to 'errors caused by crawler protection'; no count isolates blocking. |
| obstructed-narrative | USENIX/2022/the-security-lottery-measuring-client-side-web-security-inconsistencies | In particular, for sites hosted by CDNs, depending on our vantage point or frequency of requests, we received block or CAPTCHA pages. | Own crawl received block/CAPTCHA pages; no clean numerator/denominator for obstruction. |
| obstructed-narrative | USENIX/2023/knowledge-expansion-and-counterfactual-interaction-for-reference-based-phishing | The webpages adopting client-side cloaking can use a CAPTCHA to block the automation of DynaPhish, preventing phishing detectors (e.g., PhishIntention) from recognizing its credential-taking input. | Their own automated tool blocked by CAPTCHAs, causing false negatives; no count. |
| obstructed-narrative | USENIX/2024/phishdecloaker-detecting-captcha-cloaked-phishing-websites-via-hybrid-vision-bas | It may include mouse behavior analysis and browser fingerprinting, which will block our visits despite solving the challenge. | Own decloaking crawler blocked by reCAPTCHA v2 behavioural checks even after solving; no count. |
| obstructed-narrative | USENIX/2024/smudged-fingerprints-characterizing-and-improving-the-performance-of-web-applica | We find that both Wappalyzer and WhatWeb are still flagged by Cloudflare bot detection on a handful of sites, with this affecting Wappalyzer more often due to the larger number of requests it transmits to each site. | Own fingerprinting tools flagged by Cloudflare, but only 'a handful of sites'. |
| obstructed-narrative | USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale | except in 2024, when we found a new server that provided over a million SM2 certificates until they blocked our IP address. | A single narrative instance; no aggregate count. |
| obstructed-narrative | USENIX/2025/the-ransomware-decade-the-creation-of-a-fine-grained-dataset-and-a-longitudinal | Failures in this step are either due to the page having been taken down or our crawl being blocked. | 856 of 7,787 URLs failed, but 'taken down' and 'crawl blocked' are conflated. |
| obstructed-narrative | WWW/2018/crimebb-enabling-cybercrime-research-on-underground-forums-at-scale | Still, there are some blocked nodes that are not filtered since the blocking message appears after solving the CAPTCHA. | Forums block/CAPTCHA-gate Tor exit relays used by their crawler; no count. |
| obstructed-narrative | WWW/2023/online-advertising-in-ukraine-and-russia-during-the-2022-russian-invasion | One possible explanation could be that these platforms detected our automated crawler as a bot and decided not to resolve our ad requests. | Speculative attribution; the accompanying failure percentages are attributed to 403/451 and suspensions instead. |
| obstructed-quantified | CCS/2020/impersonation-as-a-service-characterizing-the-emerging-criminal-infrastructure-f | In the process, an additional three accounts were banned, for a total of five banned accounts. | Authors' own scraping accounts were detected and blacklisted by the platform operators. [quote reconstructed: the .cols rendering splices another column through this sentence; verified by hand 2026-08-29] |
| obstructed-quantified | IEEE-SP/2025/403-forbidden-ethically-evaluating-broken-access-control-in-the-wild | Further investigation shows our accounts were either blocked and required an account recovery process or bot detection invalidated our sessions. | Own research accounts on 3 of 110 target websites were blocked or had sessions invalidated by bot detection. |
| obstructed-quantified | IMC/2015/who-is-com-learning-to-parse-whois-records | Roughly 7.5% of domains we queries resulted in a failure after all 3 attempts. | Also lost Network Solutions thick records entirely to a rate limit. |
| obstructed-quantified | IMC/2016/characterizing-website-behaviors-across-logged-in-and-not-logged-in-users | Note that the total number of websites per each category is less than 30 as several websites in each category were excluded due to technical problems during one of the crawls: the website blocked the crawler or the login process started to require human verification via captcha. | Denominator reconstructed from per-category counts (30 x 14 = 420 vs 345 retained). |
| obstructed-quantified | IMC/2017/tripwire-inferring-internet-site-compromise | In our manual study above, 19% of sites (37% of the top-100) with registration forms used some kind of test to ensure the registration form was being filled out by a human actor. | Crawler must defer to third-party CAPTCHA solvers with non-trivial error rates; cannot handle modern reCAPTCHA. |
| obstructed-quantified | IMC/2018/403-forbidden-a-global-view-of-cdn-geoblocking | We found that on the order of 30% of the Akamai 403s appeared to be false positives: the crawler request was flagged as a bot or otherwise was denied access while a real web browser request was able to load the page. | Topical overlap with bot detection, but explicitly reports its own ZGrab crawler misidentified as a bot. |
| obstructed-quantified | IMC/2023/the-prevalence-of-single-sign-on-on-the-web-towards-the-next-generation-of-web-c | 8% of sites which are labeled blocked used some kind of bot-detection service preventing our Crawler from loading the page. | Direct quantified statement with a clear denominator. |
| obstructed-quantified | IMC/2025/somesite-i-used-to-crawl-awareness-agency-and-efficacy-in-protecting-content-cre | Among the top 10k popular sites in October 2024, 1,487 (15%) of them inherently block our crawler. | Direct numbered report, independent of user agent. |
| obstructed-quantified | NDSS/2024/fp-fed-privacy-preserving-federated-detection-of-browser-fingerprinting | our crawl fails to collect traces from 1,700 websites, with the overwhelming majority (64.3%) of them due to HTTP 403 Forbidden errors. | Explicit counted failure of the authors' own crawl. |
| obstructed-quantified | PETS/2017/fingerprinting-keywords-in-search-queries-over-tor | In addition, 54% of FP keywords received a CAPTCHA during collection and the Tor process had been restarted 60 times on average (35% and 23 times for Non-FP keywords). | Own Tor Browser crawler repeatedly CAPTCHA'd by Google, with counts. |
| obstructed-quantified | PETS/2024/automatic-generation-of-web-censorship-probe-lists | At least 3 of the 50 “ground truth” URLs implement some server-side blocking against automated headless browsers like curl, resulting in Error 403 in all vantage points. | Explicitly separated from censorship: their own curl-based measurement was blocked. |
| obstructed-quantified | PETS/2024/johnny-still-cant-opt-out-assessing-the-iab-ccpa-compliance-framework | We received CAPTCHA challenges on two of the websites that prevented them from loading normally. | An explicit assessment of anti-crawler impact with a denominator — rare in the corpus. |
| obstructed-quantified | PETS/2025/tracker-installations-are-not-created-equal-understanding-tracker-configuration | We generally found that a subset of the false negatives could be attributed to cookie consent or other dialog boxes that blocked page load (17.3%), bot detection (8.6%), and websites we had not successfully visited (4.9%). | A share of false negatives, not of the full site sample. |
| obstructed-quantified | USENIX/2017/characterizing-the-nature-and-dynamics-of-tor-exit-blocking | Websites in these categories are also observed to be the most aggressive-with 50% of them blocking over 60% of the chosen relays. | Research subject is Tor blocking, but the paper quantifies its own crawl being blocked. [quote reconstructed: the .cols rendering splices another column through this sentence; verified by hand 2026-08-29] |
| obstructed-quantified | USENIX/2021/catching-phishers-by-their-bait-investigating-the-dutch-phishing-landscape-throu | In fact, 946 (69%) of the detected phishing domains returned a blank screen - and no favicon - to our crawler when we visited the domain, meaning that the phishing website detected us and deployed cloaking techniques. | Own crawler detected and denied real content, with an explicit count. Denominator read from the paper (“Our final dataset contained 1,363 verified phishing fully qualified domain names”); an earlier draft back-calculated ~1,371 from 946/0.69 and was wrong. |
| obstructed-quantified | USENIX/2022/leaky-forms-a-study-of-email-and-password-exfiltration-before-form-submission | identified only three CloudFlare CAPTCHA pages that | Own crawler blocked by CAPTCHA pages during a 1K pilot crawl. The full sentence reads 'During a 1K website pilot crawl, we identified only three CloudFlare CAPTCHA pages that blocked our crawler'; the .cols rendering splices the acknowledgements column through it, so only this fragment is contiguous. Verified by hand 2026-08-29. |
| obstructed-quantified | USENIX/2023/a-large-scale-measurement-of-website-login-policies | However, given that we failed to analyze 52% of domains on which we created an account, the true prevalence may be higher. | Own automated login/CAPTCHA pipeline failed on target sites, with a denominator. |
| obstructed-quantified | USENIX/2023/a-study-of-multi-factor-and-risk-based-authentication-availability | Of these manual sites, 43 could not be scripted because they used CAPTCHAs at the login page, 10 required MFA on every login, and 3 detected and blocked our web driver. | Explicit counts and denominator. |
| obstructed-quantified | USENIX/2025/beyond-exploit-scanning-a-functional-change-driven-approach-to-remote-software-v | For instance, 17 websites blocked access to version-revealing paths like “language/en-GB/en-GB.xml”, causing Metasploit-Joomla to fail in version identification. | Server-side blocking broke tools inside the authors' own measurement pipeline. |
| obstructed-quantified | WWW/2021/where-are-you-taking-me-understanding-abusive-traffic-distribution-systems | We observe that automated crawlers are explicitly blocked 5% more often than other users and covertly blocked (by sending users to parked or other error pages) at least 8% more frequently. | Own ODIN crawler measurably blocked more than human personas. |
| obstructed-quantified | WWW/2024/the-double-edged-sword-identifying-authentication-pages-and-their-fingerprinting | we were unable to collect all 88 features for our model for 93 (1.9%) pages due to bot detection mechanisms | Explicit count and percentage; the matched sentence itself was unrelated. |
| obstructed-quantified | WWW/2025/beyond-the-crawl-unmasking-browser-fingerprinting-in-real-user-interactions | First, we find that the automated crawler failed to visit 15 out of the 3K websites (≈ 1%). | Their automated-crawler baseline obstructed by bot detectors before page load. |
| offtopic | CCS/2010/spam-the-underground-on-140-characters-or-less | Twitter currently lacks a filtering mechanism to prevent spam, with the exception of malware, blocked using Google's Safebrowsing API. | Twitter's own filtering biases dataset composition; it does not obstruct the authors' crawl. |
| offtopic | CCS/2011/text-based-captcha-strengths-and-weaknesses | Many websites use CAPTCHAs, or Completely Automated Public Turing tests to tell Computers and Humans Apart, in an attempt to block automated interactions with their sites. | Research subject is breaking CAPTCHAs; no report that the authors' own collection was blocked. |
| offtopic | CCS/2016/practical-censorship-evasion-leveraging-content-delivery-networks | Unlike Akamai and all the other CDN systems we evaluated, CloudFlare edge servers enforce a strict access control based on the SNI entry. | A technical finding about the circumvention system under study, not obstruction of the authors' collection. |
| offtopic | CCS/2018/yet-another-text-captcha-solver-a-generative-adversarial-network-based-approach | The real captchas are automatically collected using a web crawler written in Python. | Subject is a CAPTCHA-solving system; no mention of their captcha-collecting crawler being blocked. |
| offtopic | CCS/2019/un-informed-consent-studying-gdpr-consent-notices-in-the-field | Site blocked The content of the website cannot be accessed at all. | A coding category from a user-study questionnaire, unrelated to the authors' crawl. |
| offtopic | CCS/2022/im-spartacus-no-im-spartacus-proactively-protecting-users-from-phishing-by-inten | Based on this analysis, we can use the frequently blocked words and turn them into trigger words that will cause an HTTP request to evade the phishing content by triggering cloaking behavior. | 'Blocked words' are phishers' cloaking rules, the research subject, exploited by design. |
| offtopic | IEEE-SP/2012/rozzle-de-cloaking-internet-malware | As with any detection tool, we need to consider ways that a determined attacker can avoid being detected by systems using Rozzle. | Limitation about attackers evading Rozzle's malware-detection capability, not about the authors' own crawl being blocked. |
| offtopic | IEEE-SP/2021/detecting-filter-list-evasion-with-event-loop-turn-granularity-javascript-signat | Using this approach, we have generated 586 new filter list URLs, compatible with existing popular content blocked tools like AdBlock Plus and uBlock Origin. | Describes the paper's own contribution (new blocklist rules); not about data collection being obstructed. |
| offtopic | IEEE-SP/2021/fingerprinting-the-fingerprinters-learning-to-detect-browser-fingerprinting-beha | Our results also corroborate that bot detection services rely on fingerprinting [41], and indicate that prevalent fingerprinting vendors provide anti-ad fraud services. | A research finding about bot-detection vendors' techniques, not a report of the authors' own crawl being obstructed. |
| offtopic | IEEE-SP/2022/robbery-on-devops-understanding-and-mitigating-illicit-cryptomining-on-continuou | We found that Cijacking miners responded to such protection with evasive tricks to avoid being blocked. | Cryptomining adversaries evading CI platforms' anti-abuse blocking; not the authors' own data collection. |
| offtopic | IEEE-SP/2024/targeted-and-troublesome-tracking-and-advertising-on-childrens-websites | We dismissed these dialogs to prevent them from blocking our crawler's interactions with the webpage. | Cookie/consent popup dialogs obstructing crawler interaction, not anti-bot/CAPTCHA/rate-limit defences. |
| offtopic | IEEE-SP/2024/to-auth-or-not-to-auth-a-comparative-analysis-of-the-pre-and-post-login-security | However, we modified the definition of equivalence relation for CSP TLS to ignore 'block-all-mixed-content' as modern browsers ignore it, and mixed content is blocked by default. | Content-Security-Policy mixed-content blocking semantics, unrelated to anti-bot obstruction. |
| offtopic | IEEE-SP/2025/analyzing-ad-prevalence-characteristics-and-compliance-in-alexa-skills | One potential approach is to incorporate a confidence score and define a threshold above which the model's predictions would not require human verification. | The authors' own LLM ad-detection classifier's confidence threshold, not a bot challenge. |
| offtopic | IMC/2010/detecting-algorithmically-generated-malicious-domain-names | Finally, we apply our methodology to one day of network traffic from one of the largest Tier-1 ISPs in Asia and South America and show how we can detect Conficker as well as a botnet hitherto unknown, which we call Mjuyh (details in Section 5). | Detecting botnets in network traffic; no mention of the authors' collection being blocked. |
| offtopic | IMC/2018/how-tracking-companies-circumvented-ad-blockers-using-websockets | We identify five companies that appear to have been using the WRB to circumvent blocking extensions: 33across was harvesting large amounts of browser state that could be used for fingerprinting; Lockerdome was downloading URLs to ads (see 4.3 and Figure 4); and Hotjar, LuckyOrange, and TruConversion were downloading the entire DOM from webpages. | Trackers evading users' ad blockers, not the target obstructing the authors' crawl. |
| offtopic | IMC/2018/needle-in-a-haystack-tracking-down-elite-phishing-domains-in-the-wild | Through empirical measurements, we seek to understand how attackers perform impersonation to deceive users and how they perform evasion to avoid being detected. | Evasion is by phishers; the Safe Browsing rate limits hit a post-hoc reporting workflow, not the crawl. |
| offtopic | IMC/2019/errors-misunderstandings-and-attacks-analyzing-the-crowdsourcing-process-of-ad-b | In total, we found 644 websites changed their the ad URL's paths to circumvent blocking. | Ad networks evading ad blockers, not the authors' crawl. |
| offtopic | IMC/2020/hiding-in-plain-site-detecting-javascript-obfuscation-through-concealed-browser | Furthermore, to the best of our knowledge, there does not exist a tool that can give us full stack trace of execution for the JS API triggered, which denies us context information that limits our static analysis. | Static-analysis tooling limitation; Cloudflare appears only as a CDN. |
| offtopic | IMC/2021/knock-and-talk-investigating-local-network-communications-on-websites | We identify that this activity is initiated by BIG-IP ASM Bot Defense, a bot detection service developed by F5 Inc. | Bot-detection scripts are the research subject; no claim the crawl was obstructed. |
| offtopic | IMC/2022/measuring-uid-smuggling-in-the-wild | If we assume that all of these ads were placed on a top-tier network (e.g., Google Display Ads, with average CPC of $0.67 and average CPM of $3.12), and that none of our clicks were identified as bots, the total cost would be somewhere between $152 (all CPM ads) and $33,000 (all CPC ads). | Hypothetical ad-cost estimate; a separate 3.3% connection-failure figure is generic. |
| offtopic | IMC/2023/does-it-spin-on-the-adoption-and-use-of-quics-spin-bit | The website explains our research and how measurement targets can opt out of our study: via a single email or by blocking our measurement subnet. | An ethics opt-out mechanism, not obstruction. |
| offtopic | IMC/2023/ptperf-on-the-performance-evaluation-of-tor-pluggable-transports | Thus, we categorize PTs based on the underlying technology they use to evade blocking. | Tor pluggable transports evading censorship, not anti-bot obstruction. |
| offtopic | IMC/2025/canvassing-the-fingerprinters-characterizing-canvas-fingerprinting-use-across-th | The test canvas we observe is associated with Akamai's bot detection service, giving Akamai potential user visibility across sites spanning a wide range of sites and markets (from shopping to news, banking, etc.). | Akamai's bot-detection script is one of the fingerprinting vendors under study. |
| offtopic | IMC/2025/fp-inconsistent-measurement-and-analysis-of-fingerprint-inconsistencies-in-evasi | We integrated two popular commercial anti-bot services on our honey site: DataDome [12] and BotD [20]. | Anti-bot services are the study's instrument on the authors' own honeypot, not an obstacle. |
| offtopic | NDSS/2014/amplification-hell-revisiting-network-protocols-for-ddos-abuse | We shows that carefully-crafted DRDoS attacks may evade poorly-designed rate limiting solutions. | Rate limiting is a victim-server DDoS defence evaded by attackers in the threat model. |
| offtopic | NDSS/2014/scambaiter-understanding-targeted-nigerian-scams-on-craigslist | In some cases, scammers detected us and sent this kind of curses in second responses. | Human scammers noticing automated replies is not bot-management infrastructure. |
| offtopic | NDSS/2017/dial-one-for-scam-a-large-scale-analysis-of-technical-support-scams | We also mapped the IP addresses to AS names and found that 18% of the scam hosts are using Cloudflare to hide their hosting server. | Cloudflare used by scammers as concealment, not as a defence against the authors. |
| offtopic | NDSS/2025/do-not-follow-the-white-rabbit-challenging-the-myth-of-harmless-open-redirection | We found that about 1% of the sites display a captcha page before redirection, including popular sites like Amazon. | CAPTCHA is a studied redirect-notice behaviour of target sites. |
| offtopic | NDSS/2025/hades-attack-understanding-and-evaluating-manipulation-risks-of-email-blocklists | As we can see in Table I, our outgoing IP address is blocklisted by six DNSBL providers, and the domain is blocklisted by one. | Email DNSBL blocklisting as part of studying blocklist manipulation; not web-crawl anti-bot obstruction. |
| offtopic | PETS/2020/missed-by-filter-lists-detecting-unknown-third-party-trackers-with-invisible-pix | We apply filter lists on requests to detect which requests are blocked by the lists, as it has been done in previous works. | Filter-list blocking, the object of study. |
| offtopic | PETS/2021/deja-vu-abusing-browser-cache-headers-to-identify-and-track-online-users | It is important to note that Nginx and Apache are what we would normally consider a server, while Cloudflare provides various CDN services that automatically optimize the resources for quality and performance. | Cloudflare cited only as a server-header value. |
| offtopic | PETS/2021/the-cname-of-the-game-large-scale-analysis-of-dns-based-tracking-evasion | we determined whether tracking requests would be blocked by three relevant anti-tracking solutions: uBlock Origin (version 1.26) on both Firefox and Chrome, and the NextDNS CNAME blocklist | Ad-blocker/anti-tracking extensions blocking trackers; unrelated to the authors' crawl. |
| offtopic | PETS/2022/a-global-survey-of-android-dual-use-applications-used-in-intimate-partner-survei | Google Play blocks some IPS-specific queries, such as “track your husband”, probably to prevent potential abusers from finding dual-use apps. | Content moderation of search suggestions, not anti-bot detection of the scraper. |
| offtopic | PETS/2022/from-onion-not-found-to-guard-discovery | The main challenge we have to overcome in this version of the attack is to prevent the page being blocked from loading, which would cause the loading indicator to spin for a long time-potentially raising suspicion. | An adversary evading detection by a victim in a guard-discovery attack. |
| offtopic | PETS/2024/a-black-box-privacy-analysis-of-messaging-service-providers-chat-message-process | Meetup and Pinterest blocked us from sending our links. | Whether messengers apply anti-spam blocking to shared links is the research subject. |
| offtopic | PETS/2024/fp-tracer-fine-grained-browser-fingerprinting-detection-via-taint-tracking-and-e | We also discovered a number of techniques that attempt to obfuscate fingerprinting activities, mainly in use by bot protection services. | Bot-protection scripts observed as part of the fingerprinting analysis. |
| offtopic | PETS/2025/understanding-regional-filter-lists-efficacy-and-impact | Overall, 71.28% of the requests that would have been blocked by the standard EasyList would have also been blocked by at least one localized list, meaning that different rules lead to blocking a URL. | Filter-list blocking is the research subject. |
| offtopic | USENIX/2011/dirty-jobs-the-role-of-freelance-labor-in-web-service-abuse | In a previous study [12], we described a robust retail CAPTCHA-solving industry capable of solving a million CAPTCHAs a day at $1 per 1,000 solved. | CAPTCHA-solving is the research subject. |
| offtopic | USENIX/2014/precise-client-side-protection-against-dom-based-cross-site-scripting | Noteworthy in this instance is however the fact that out of the 183 domains on which our filter blocked a single functionality, 90 contained actual verified vulnerabilities in just that functionality. | 'Our filter' is the paper's own XSS-blocking tool. |
| offtopic | USENIX/2018/who-left-open-the-cookie-jar-a-comprehensive-evaluation-of-third-party-cookie-po | for the HTML category, 46 out of 51 requests were blocked), for each applicable category there was at least one technique that could circumvent the tracking protection [bug5]. | Blocking by browser anti-tracking under evaluation. |
| offtopic | USENIX/2021/phishprint-evading-phishing-detection-crawlers-by-prior-profiling | Since we avoid using phishing content in the token sites, these sites and their associated TLD+1 domains do not get blocked. | Research subject is evading third-party security crawlers; their own test infrastructure was not obstructed. |
| offtopic | USENIX/2022/skilldetective-automated-policy-violation-detection-of-voice-assistant-applicati | We identified 4 skills containing toxic content for kids by using the Perspective tool [8] and human verification. | 'Human verification' means human review of labels. |
| offtopic | USENIX/2022/watching-the-watchers-bias-and-vulnerability-in-remote-proctoring-software | ILG Exam360 offers facial recognition, but also employs a remote human verification method before exam initiation. | A proctoring product feature, the research subject. |
| offtopic | USENIX/2023/trident-towards-detecting-and-mitigating-web-based-social-engineering-attacks | Furthermore, to further improve TRIDENT by reducing the FPR, we can use a whitelist-based approach to avoid incorrectly blocking trusted ad networks, e.g., AddThis, to reduce the first type of FP. | TRIDENT is the authors' own detection system blocking ad networks. |
| offtopic | USENIX/2025/are-captchas-still-bot-hard-generalized-visual-captcha-solving-with-agentic-visi | Fortunately, the account was not banned, indicating that Halligan's activity did not arouse suspicion from 2Captcha or its customers. | CAPTCHA-solving is the research subject; their account was explicitly NOT banned. |
| offtopic | USENIX/2025/assessing-the-aftermath-the-effects-of-a-global-takedown-against-ddos-for-hire-s | Seized domains were redirected to a landing page hosted by us with Cloudflare serverless, displaying messages about the takedown and legal status of booting. | Cloudflare is the authors' own hosting. |
| offtopic | USENIX/2025/demystifying-the-in-security-of-qr-code-based-login-in-real-world-deployments | The detection pipeline reports flaws when polling request responses indicate a successful login, but manual verification reveals that the login is blocked later due to extra protection checks. | Login-security logic blocking an exploit attempt, not anti-bot obstruction of the crawl. |
| offtopic | WWW/2012/learning-causality-for-news-events-prediction | We filtered the raters using a captcha contact(end(E), Agent, Patient) and filtered out outliers. | CAPTCHA used to screen crowdworkers. |
| offtopic | WWW/2016/tell-me-about-yourself-the-malicious-captcha-attack | In our experiments, we instructed participants to ignore cut letters using a message placed below the CAPTCHA. | CAPTCHA is the attack vector in a user study. |
| offtopic | WWW/2017/j-force-forced-execution-on-javascript | Indeed, we observed many malicious payloads only get triggered by a series carefully organized user or timer events to escape from being detected by honey-client systems or other automatic detection tools. | Malware evading third-party honey-clients. |
| offtopic | WWW/2019/outguard-detecting-in-browser-covert-cryptocurrency-mining-in-the-wild | 3,600 of the detected sites in our two experiments were newly detected websites not observed in the training dataset. | The paper's own classifier finding new sites. |
| offtopic | WWW/2019/who-watches-the-watchmen-exploring-complaints-on-the-web | We conjecture that this may be an evasion tactic to avoid DNS-based blocking schemes. | Studied domains evading DNS blocklists. |
| offtopic | WWW/2020/autonav-evaluation-and-automatization-of-web-navigation-policies | Instead, we suggest that cookies attained during the check are temporarily sandboxed and then removed if the navigation is blocked. | The paper's own proposed CSP policy blocking navigations. |
| offtopic | WWW/2022/investigating-advertisers-domain-changing-behaviors-and-their-impacts-on-ad-bloc | We also excluded domains that were blocked at the time of their first encounter because they would not have been seen by ad-blocker users and have no impact on ad-blocker users' browsing experience and privacy. | Ad-blocker filter lists blocking ad domains, the research subject. |
| offtopic | WWW/2022/reproducibility-and-replicability-of-web-measurement-studies | — | The matched string could not be located in any rendering of the paper; the paper contains no block/CAPTCHA/bot/403/429/rate-limit mentions. Treated as a sweep false positive. |
| offtopic | WWW/2023/who-funds-misinformation-a-systematic-analysis-of-the-ad-related-profit-routines | www.adserver/fetch?q=1 request URL blocked? | Part of the paper's own ad-detection methodology diagram. |
| offtopic | WWW/2024/navigating-the-post-api-dilemma | Moreover, given the severity and the impact of the topic surrounding COVID19, search engines may have placed stricter moderation policies on this topic, thereby challenging our study's findings. | Content-moderation speculation; no block/CAPTCHA/rate-limit terms in the paper. |
External sources
Training data is stale by construction on this topic, so every external fact was fetched, not recalled, on 2026-08-29, and every one is re-checkable:
bash scripts/external_checks_crawler_detection.sh
- external_checks_crawler_detection-output.txt
== Anti-detection tooling: is it maintained, and what replaced it == berstend/puppeteer-extra archived=False pushed_at=2024-07-18T12:28:02Z license=MIT desc: 💯 Teach puppeteer new tricks through plugins. newest tag puppeteer-extra-plugin-user-preferences@2.4.1 (no GitHub Release objects) ultrafunkamsterdam/undetected-chromedriver archived=False pushed_at=2025-07-05T10:42:02Z license=GPL-3.0 desc: Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM) no releases and no tags ultrafunkamsterdam/nodriver archived=False pushed_at=2026-05-13T13:58:15Z license=AGPL-3.0 desc: Successor of Undetected-Chromedriver. Providing a blazing fast framework for web automation, webscraping, bots and any other creative ideas which are no releases and no tags Kaliiiiiiiiii-Vinyzu/patchright-python archived=False pushed_at=2026-08-19T17:20:12Z license=Apache-2.0 desc: Undetected Python version of the Playwright testing and automation library. newest tag v1.62.0 (no GitHub Release objects) rebrowser/rebrowser-patches archived=False pushed_at=2025-05-09T05:24:53Z license=none desc: Collection of patches for puppeteer and playwright to avoid automation detection and leaks. Helps to avoid Cloudflare and DataDome CAPTCHA pages. Easy newest tag 1.0.19 (no GitHub Release objects) diprajpatra/selenium-stealth archived=False pushed_at=2021-12-30T14:57:26Z license=MIT desc: Trying to make python selenium more stealthy. newest tag v1.0.6 (no GitHub Release objects) AtuboDad/playwright_stealth archived=False pushed_at=2024-07-29T17:34:50Z license=MIT desc: playwright stealth no releases and no tags Mattwmaster58/playwright_stealth archived=False pushed_at=2026-04-04T03:02:13Z license=MIT desc: playwright stealth newest tag rc4 (no GitHub Release objects) daijro/camoufox archived=False pushed_at=2026-08-26T01:40:45Z license=MPL-2.0 desc: 🦊 Anti-detect browser newest tag v152.0.4-beta.29 (no GitHub Release objects) npm puppeteer-extra-plugin-stealth 2.11.2 published 2023-03-01T12:07:26.660Z pypi undetected-chromedriver 3.5.5 uploaded 2024-02-17T17:18:36.855607Z project_urls: {'Homepage': 'https://github.com/ultrafunkamsterdam/undetected-chromedriver'} pypi nodriver 0.50.3 uploaded 2026-05-13T13:57:51.877457Z project_urls: {'Bug Reports': 'https://github.com/UltrafunkAmsterdam/nodriver/issues', 'Homepage': 'https://github.com/UltrafunkAmsterdam/nodriver', 'Source': 'https://github.com/UltrafunkAmsterdam/nodriver'} pypi playwright-stealth 2.0.3 uploaded 2026-04-04T02:50:35.246953Z project_urls: {'Homepage': 'https://github.com/Mattwmaster58/playwright_stealth', 'changelog': 'https://github.com/Mattwmaster58/playwright_stealth/raw/main/CHANGELOG.md'} pypi selenium-stealth 1.0.6 uploaded 2020-11-05T15:26:05.240256Z project_urls: {'Homepage': 'https://github.com/diprajpatra/selenium-stealth'} == Bot-management vendors: who absorbed whom == perimeterx.com -> https://www.humansecurity.com/ distilnetworks.com -> https://www.imperva.com/products/bot-management/?redirect=Distil& OK F5 completed the Shape Security acquisition OK akamai.com/products/bot-manager still 403s a datacentre client (got 403) OK Cloudflare bot products fingerprintjs/BotD archived=False pushed_at=2026-08-11T06:30:36Z license=MIT desc: Free bot detection library that runs in the browser. Detects automation tools and frameworks. No server required, runs 100% on the client. MIT license newest tag v2.0.0 (no GitHub Release objects) == Challenge products == OK Turnstile GA post (2023-09-29) OK Cloudflare default-block AI crawlers (2025-07-01) OK reCAPTCHA v2 and v3 still documented TecharoHQ/anubis archived=False pushed_at=2026-08-29T00:29:37Z license=MIT desc: Weighs the soul of incoming HTTP requests to stop AI crawlers newest tag v1.27.0 (no GitHub Release objects) OK Cloudflare new AI-bot defaults, 2026-09-15 OK legacy Block AI bots option deprecating OK Cloudflare Content Signals Policy (2025-09-24) OK imperva.com press release readable by curl (HTTP 200); Thales acquisition claim stands == Standards == OK WebDriver Level 1 is a W3C Recommendation OK WebDriver Level 1 REC date is 05 June 2018 OK navigator.webdriver defined there OK WebDriver Level 2 is still a Working Draft OK RFC 9309 exists OK RFC 9309 is a Proposed Standard OK IETF webbotauth WG is chartered OK IETF aipref WG is chartered == Browser facts that decide detectability == OK Chrome unified headless / chrome-headless-shell OK Playwright still ships a separate headless shell OK chromium HEAD: content/public/common/content_switches.cc OK chromium HEAD: chrome/browser/ui/startup/automation_infobar_delegate.cc
The Z block — every non-corpus number on the content page, with its claim, its
primary source and the date it was checked:
| Value | Claim | Primary source | Checked |
|---|---|---|---|
| 2.11.2 / 2023-03-01 | puppeteer-extra-plugin-stealth's newest npm release and its publish date; the repo is not archived but has had no code release since | registry.npmjs.org/puppeteer-extra-plugin-stealth; api.github.com/repos/berstend/puppeteer-extra | 2026-08-29 |
| 3.5.5 / 2024-02-17 / 2025-07-05 | undetected-chromedriver's newest PyPI release, its upload date, and the repo's last push; the repo publishes no GitHub Releases and no tags | pypi.org/pypi/undetected-chromedriver/json; api.github.com/repos/ultrafunkamsterdam/undetected-chromedriver | 2026-08-29 |
| 0.50.3 / 2026-05-13 | nodriver's newest PyPI release and upload date. Its GitHub description reads 'Successor of Undetected-Chromedriver' — the same author's own succession claim | pypi.org/pypi/nodriver/json; api.github.com/repos/ultrafunkamsterdam/nodriver | 2026-08-29 |
| v1.62.0 / 2026-08-19 | patchright-python's newest tag and the repo's last push | api.github.com/repos/Kaliiiiiiiiii-Vinyzu/patchright-python | 2026-08-29 |
| 1.0.19 / 2025-05-09 | rebrowser-patches' newest tag and last push | api.github.com/repos/rebrowser/rebrowser-patches | 2026-08-29 |
| 1.0.6 / 2020-11-05 / 2021-12-30 | selenium-stealth's newest PyPI release, its upload date and the repo's last push | pypi.org/pypi/selenium-stealth/json; api.github.com/repos/diprajpatra/selenium-stealth | 2026-08-29 |
| 2.0.3 / 2026-04-04 / 2024-07-29 | the playwright-stealth PyPI package's newest release and upload date, whose Homepage now points at Mattwmaster58/playwright_stealth; the original AtuboDad/playwright_stealth repo was last pushed 2024-07-29 | pypi.org/pypi/playwright-stealth/json; api.github.com/repos/{AtuboDad,Mattwmaster58}/playwright_stealth | 2026-08-29 |
| MPL-2.0 / 2026-08-26 | Camoufox's licence and last push | api.github.com/repos/daijro/camoufox | 2026-08-29 |
| MIT / v2.0.0 / 2026-08-11 | BotD's licence, newest tag and last push | api.github.com/repos/fingerprintjs/BotD | 2026-08-29 |
| MIT / v1.27.0 / 2026-08-29 | Anubis's licence, newest tag and last push. Its GitHub description reads 'Weighs the soul of incoming HTTP requests to stop AI crawlers' | api.github.com/repos/TecharoHQ/anubis | 2026-08-29 |
| 403 | the HTTP status Akamai's own Bot Manager product page returned to curl with a browser User-Agent, and to a headless Playwright Chromium, from this datacentre host. Cause not established: it may be bot management, geography or ASN reputation | curl and Playwright Chromium against https://www.akamai.com/products/bot-manager from a European datacentre host | 2026-08-29 |
| 2023-09-29 | the date Cloudflare announced Turnstile general availability, with Managed mode free for unlimited use. Cloudflare calls it a 'CAPTCHA alternative', not a CAPTCHA | blog.cloudflare.com/turnstile-ga/ | 2026-08-29 |
| 2025-07-01 | the date Cloudflare changed its default to blocking AI crawlers unless they pay, and introduced pay-per-crawl | blog.cloudflare.com/content-independence-day-no-ai-crawl-without-compensation/ | 2026-08-29 |
| 05 June 2018 | the date WebDriver Level 1, the W3C Recommendation that defines navigator.webdriver as returning true when the webdriver-active flag is set, was published. Level 2 is still a Working Draft, dated 02 July 2026 | w3.org/TR/webdriver1/; w3.org/TR/webdriver2/ | 2026-08-29 |
| RFC 9309 / September 2022 | the Robots Exclusion Protocol RFC and its date. Proposed Standard; nothing obsoletes or updates it | datatracker.ietf.org/doc/rfc9309/; rfc-editor.org/info/rfc9309 | 2026-08-29 |
| 132 | the Chrome version from which the old headless mode is available only as a separate chrome-headless-shell binary; –headless now selects the unified mode that shares code with headful Chrome | developer.chrome.com/docs/chromium/headless | 2026-08-29 |
| perimeterx.com → humansecurity.com | PerimeterX now redirects to HUMAN Security; distilnetworks.com redirects to imperva.com/products/bot-management; F5 completed its acquisition of Shape Security | curl redirect chains; f5.com/company/news/press-releases/f5-completes-acquisition-of-shape-security | 2026-08-29 |
| 2026-09-15 | the date Cloudflare's new AI-bot defaults take effect for new domains: Training and Agent blocked on pages that display ads, Search still allowed; the legacy 'Block AI bots' option is marked deprecating on the same date | developers.cloudflare.com/bots/llms-full.txt | 2026-08-29 |
| 2025-09-24 | the date Cloudflare announced its Content Signals Policy, adding search / ai-input / ai-train directives to robots.txt | blog.cloudflare.com/content-signals-policy/ | 2026-08-29 |
| 2023-12-04 | the date Thales completed its acquisition of Imperva, per Imperva's own press release. Read first with a headless Playwright Chromium because curl was being served a 920-byte Incapsula challenge with HTTP 200; ~40 minutes later curl got the full 180 KB article three times in a row. The challenge was transient, and the page says so. | imperva.com/company/press_releases/thales-completes-acquisition-of-imperva/ | 2026-08-29 |
Traps hit while checking, and how
/releases/latest404s on tag-only repositories. Five of the eight
anti-detection projects publish tags but no GitHub Release objects, and two publish
neither. A currency check that only reads ''/releases/latest'' reads all of them as abandoned. The script falls back to ''/tags'' and says explicitly "no GitHub Release objects" when that is what it found. * **A package's last release date is not its currency.** Three of the eight have a maintained successor under a different name, and ''playwright-stealth'' kept the **same package name** while the code moved to a different owner's repository — the PyPI ''project_urls.Homepage'' is what gives it away. ''nodriver'''s own GitHub description states its succession from ''undetected-chromedriver''; that is the author's claim, cited as such, not an inference. * **''w3.org'' returns HTTP 403 to a browser User-Agent** and 200 to plain ''curl''. The check script takes a ''noua'' flag for exactly this. It is a detection rule pointing the opposite way from the page's subject and it is noted on the page. * **Akamai's own Bot Manager product page could not be fetched at all** — HTTP 403 "Access Denied" to ''curl'' with a browser User-Agent and to a headless Playwright Chromium from this datacenter host. The check now **asserts the 403** rather than the product name, and the page reports it as an observation with the cause explicitly **not** established: it may be bot management, geography or ASN reputation, and we did not try to find out by trying harder. ''techdocs.akamai.com'' returns 200 but serves a 325-byte JavaScript shell with no product name in it. * **''perimeterx.com'' redirects to ''humansecurity.com''** and ''distilnetworks.com'' to Imperva's bot-management page. Both were followed with ''curl -L'' rather than taken from a comparison article.
Sources rejected
Recorded so the next run does not re-add them:
| Rejected | Why |
|---|---|
| “Top N anti-detect browsers”, “best scraping proxies” listicles (Scrappey, ZenRows, Bright Data and similar) | Vendor marketing comparing competitors. These dominate the search results for every term on this page and none is a primary source. |
| PitchBook, Tracxn, ZoomInfo, Crunchbase, LeadIQ company profiles | Third-party aggregators. Used at most to find the right search term; never cited. Acquisitions were confirmed from redirect chains and the acquirer's own press release instead. |
| Agency and competitor blog posts on “reCAPTCHA changes 2025/2026” (friendlycaptcha.com, wpforms.com and similar) | Content marketing for a competing product. |
| Derivative blog aggregation about Anubis (cybersecurefox, theoutpost.ai, grokipedia and similar) | Superseded by the repository and the creator's own writing. |
| A claim that F5 acquired Arkose Labs | Actively checked and could not be substantiated from any press release. Recorded here because it is exactly the kind of plausible-sounding consolidation claim this page would otherwise have repeated. |
What could not be established
| Question | Status |
|---|---|
| Whether Akamai's 403 to our host is bot management, geography or ASN reputation | Unresolved and left unresolved. Establishing it would mean probing from several vantage points and user-agents against a vendor that has expressed an access preference. The page reports the observation and the uncertainty. |
| DataDome's independence | Their own site returned a Cloudflare 403 to our fetcher. Independence is inferred from the absence of an acquisition announcement, which is weaker than the other rows in the vendor table. The page says “current and independent” for DataDome, Kasada and Arkose together; if a reviewer wants that hedged, hedge it. |
| Whether the 2025 uptick in obstruction reporting is more blocking or more discussion | The corpus cannot separate these. 2025 has the highest raw count (10 papers) and the most sweep candidates (29 of 129), but not the highest share — 2015 is 9.8% on a base of 41, and 2017 ties 2025 at 7.8%. A first draft of the page called 2025 “the highest of any year”, which was false; the section was rewritten to say the per-year series is noisy on small bases and that no year in seventeen exceeded one paper in ten. |
| Whether bot management concentrates on high-ranked sites | Inferred, not measured. It is where the products are sold and it is consistent with the shape of individual papers' losses, but no paper in the corpus reports a block rate by rank decile. Filed as the first open question on the page. |
Cloudflare's “Content Signals Policy” wording; llms.txt; the Arkose FunCaptcha→MatchKey rebrand | The external-currency sub-agent could reach these only through search snippets, not a direct fetch of a primary page. None of the three is on the content page. They are recorded here so a later run knows they were considered and dropped rather than missed. |
| Verdict reliability | Not measured. Every one of the 138 candidates and 24 recall papers got exactly one auditor's verdict. No second rater, so there is no inter-rater agreement figure, and the published precision (31.2% / 58.7%) treats single-model verdicts as ground truth. The 22 obstructed-quantified rows are the best-covered — a second reviewer verified each figure word-for-word against its paper, and verify_crawler_detection_figures.mjs does it a third time — but the 57 offtopic and 38 mitigated-only verdicts rest on one read each. Double-coding a sample would close this and was not done. |
| Verdict reliability | Not measured. Every one of the 138 candidates and 24 recall papers got exactly one auditor's verdict. No second rater, so there is no inter-rater agreement figure, and the published precision (31.2% / 58.7%) treats single-model verdicts as ground truth. The 22 obstructed-quantified rows are the best covered — a second reviewer verified each figure word-for-word against its paper, and verify_crawler_detection_figures.mjs does it a third time — but the 57 offtopic and 38 mitigated-only verdicts rest on one read each. Double-coding a sample would close this and was not done. |
| Recall of the wide sweep itself | Unknown, and unknowable from text: a paper that was blocked and never wrote about it is invisible. Every count on the page is stated as a lower bound. |
Judgement calls
- The population is a sweep, and the page says so in its own body, not only here.
A page whose population comes from regexes over PDFs has to declare that where the
reader meets the numbers.
- **The precision is published (31.2% / 58.7%).** A mention threshold is a candidate
set, not a claim. Publishing precision is the only thing that makes 43 mean anything.
- **Recall is estimated and the estimate is wide.** Publishing "at least 3.8%, plausibly
8–19%" is less satisfying than publishing one number, and it is the honest shape.
- **The 22 quantified figures are given as a table with denominators and an explicit
"not comparable" warning**, rather than as a range or a mean. Averaging a 1% measured
on popular sites with a 69% measured on phishing domains would produce a number with
no referent. Three of the 22 are held back from the table entirely — a WHOIS
bulk-query study, a version-disclosure scan and a 50-URL censorship control set — as
too specialised to calibrate against; a footnote says so and the script prints all 22.
- **Methods are dated in a table with a "status now" column**, and the two rows that
rest on 2025–2026 say they rest on the corpus's thinnest years. A ranking of what the
literature did is not advice about what to do now.
- **The Tor rows are included** (''singh2017_torexit'', ''oh2017_fingerprinting'') even
though Tor discrimination is arguably a different phenomenon from bot management. They
are in because from the crawler's side the failure is identical, and because they are
two of the few quantified figures the field has. A reasonable person would have cut
them.
- **The tooling table dates the stealth projects but gives no instructions.** The
closest call on the page; see //Why this page// above.
- **Discussion block.** The content page keeps ''~~DISCUSSION~~''; this page does not.
Comments belong where the reader is, and a provenance page is read by somebody
checking a number. That is the convention this page adopts and it is recorded here so
later provenance pages can follow it.
Bibliography additions
16 entries were appended to bibliography, generated by
scripts/bibgen.mjs from the corpus index (real DOIs where the index has them):
li2021_good, herley2022_automated, venugopalan2025_inconsistent, jan2020_throwing, liu2025_somesite, cui2025_odyssey, kim2025_scrapers, qi2026_viper, nguyen2024_frame, ardi2023_prevalence, wang2011_cloak, maroofi2020_human, szurdi2021_where, shi2020_text, oh2017_fingerprinting, campobasso2020_impersonation.
Checks run before appending:
- Key collision against the live bibliography: two generated entries,
bekos2023_hitchhiker and hausladen2025_websites, already existed and were
dropped from the additions; the page cites the existing keys.
* **DOI and URL collision**, because a key-string check alone passes while the same
paper is already in the file under another key. One DOI collision
(''10.1145/3543507.3583311'') and one URL collision, both the same two entries.
* **PETS and USENIX records carry no authors in the index** — 100% of both venues. Three
entries needed authors fetched from the venue landing page with ''curl'' and a browser
User-Agent (''WebFetch'' gets 403 from usenix.org): ''herley2022_automated'',
''qi2026_viper'' and ''oh2017_fingerprinting''. ''bibgen.mjs'' failed loudly on the
PETS one rather than guessing, which is the behaviour you want.
* **Attribution guard**: ''node scripts/check_attributions.mjs pages/crawler_detection.txt out/bib_live.txt out/newbib.bib'' — 19 "Name et al., VENUE YEAR" attributions
checked against the ''author'' field of the key cited beside them, all matching.
Checks run before saving
| Check | Result |
|---|---|
node scripts/check_wrap.mjs | OK |
node scripts/check_tables.mjs | OK — every table has one cell width |
node scripts/check_page_numbers.mjs (windowed and whole-page, with –code) | OK |
node scripts/check_attributions.mjs | OK — 19 attributions |
node scripts/cd_quotecheck.mjs | 161 quotes: 111 exact, 37 partial, 13 read by hand |
node scripts/verify_crawler_detection_figures.mjs | 22 per-paper figures checked against the papers, 0 not found |
bash scripts/external_checks_crawler_detection.sh | 0 FAILED |
Every {[key]} resolves | OK — 72 citations, 46 distinct keys, 0 unresolved. Counted by the builder from the saved page text, never typed in. |
| Rendered DOM verified after saving | see Review log |
Review log
Four reviewers, all told explicitly that the author's context may not be exhaustive, all handed the page text, the report script and its unedited output, and these notes. The three focused reviewers ran in parallel first; the generic one ran after their findings were applied.
Reviewer 3 — external currency (Sonnet)
Instructed to fetch rather than recall, given today's date, and to reject listicles and vendor comparison blogs.
| Finding | Verdict | What was done |
|---|---|---|
| Cloudflare's AI-crawler defaults have moved again since the 2025-07-01 change the page cites: Search / Agent / Training categories replace the single “Block AI bots” toggle, and from 2026-09-15 new domains default to blocking Training and Agent on ad-displaying pages. The page was silent on it. | Accepted | The reviewer's source was a secondary news site, so the claim was re-verified against Cloudflare's own documentation before use: developers.cloudflare.com/bots/llms-full.txt contains both “take effect for new domains on September 15, 2026” and “Block AI bots [Deprecating on September 15, 2026]”. A bullet was added to The AI-Crawler Turn, including the observation that the page was written 17 days before that date and that a crawler classified as Agent lands on the blocked side of it. The Content Signals Policy (2025-09-24) was verified on blog.cloudflare.com/content-signals-policy/ and folded into the same footnote. Two checks were added to the external-check script. |
| Imperva itself was acquired by Thales (completed 2023-12-04) — a second layer of the consolidation story the page warns about, missing from the vendor table. | Accepted, after independent verification | imperva.com could not be read with curl. Verified from Imperva's own press release with a headless Playwright Chromium: “Thales Completes the Acquisition of Imperva… Press Release Dec 4, 2023”. One clause added to the Imperva row. |
Everything else on the page verified as still correct: all 8 anti-detection rows plus Camoufox, BotD and Anubis (versions, dates, licences, archived status, tag-vs-release behaviour); the perimeterx.com and distilnetworks.com redirects; the F5/Shape press release; DataDome, Kasada and Arkose independent; WebDriver Level 1 REC 05 June 2018 and Level 2 Working Draft 02 July 2026; the w3.org User-Agent quirk; RFC 9309 not obsoleted; webbotauth and aipref both chartered; the expired individual draft correctly distinguished; Chrome 132 headless split; kEnableAutomation and IDS_CONTROLLED_BY_AUTOMATION still in Chromium HEAD; Playwright's separate headless shell; Turnstile GA 2023-09-29; the 2025-07-01 Cloudflare change. No dead links, no archived repos. | Noted | No change needed. |
A defect the reviewer did not find, caught by re-running the check script after
applying its findings. A first draft of the Imperva footnote said the page “returns an
Incapsula-branded HTTP 403 to curl”. It does not: it returns HTTP 200 with a
920-byte Incapsula challenge body. The status code had been misread from a two-column
curl -w output. The footnote was rewritten, and the check was rewritten to assert the
body, not the status — asserting the status is precisely the mistake the page is
about. The corrected observation is a better example than the original claim.
Defects the author found while re-reading, before the reviewers reported
| Defect | Fix |
|---|---|
| “96% of crawling papers do not do it” in What to Report, about reporting a cause-broken-down non-load rate. The number guard passed it because the report prints “~96 papers” in the recall section — a coincidental token match, not a source. And the claim itself was wrong: 96.2% is the share not reporting obstruction, which is a different thing from not breaking down a non-load rate. | Rewritten to state the measurable proxy (3.8%) explicitly, and the report now prints the 96.2% complement so no future draft can borrow the token by accident. |
| “The 2025 row alone is 10 of 129 crawling papers (7.8%), the highest of any year in the corpus” — false. 2015 is 9.8% (4 of 41). | The whole subsection was retitled from “Reporting is rising, from almost nothing” to “Over time: not much of a trend” and rewritten to say the per-year series is noisy on small bases and that no year in seventeen exceeded one paper in ten. |
| “three of the eight rows have a maintained successor under a different name” in the tooling table — only one has an author-claimed successor under a different name, and one kept its name while the code moved. | Rewritten to name the two cases and what each teaches. |
| “A very large share of the web sits behind that default” about Cloudflare — unverified quantity claim. | Replaced with a conditional that carries no quantity. |
| The bot-management-concentrates-on-popular-sites claim was asserted in the second paragraph and only hedged 400 lines later in Open Questions. | An inline paragraph now says it is an inference and not a measurement, at the point the reader meets it. |
Reviewer 1 — figures against the script (Sonnet)
Handed the page, the provenance draft, the report script and its output, the fold script and the hand-audit JSON, and told to re-run the script and to look for bugs inside it rather than only for page/script disagreements.
| Finding | Verdict | What was done |
|---|---|---|
| The “22 papers that put a number on it” table conflated two populations. Two rows (Hausladen, Bekos) come from the 24-paper recall sample, not from the 138 candidates, and the script labels them separately for exactly that reason. Two genuine members of the 22 (Campobasso and Allodi's ImpaaS accounts; DeBlasio et al.'s Tripwire) were absent with no note, and the footnote claimed only three of the 22 were held back when the real number was five. | Accepted; the most substantive finding of the review | The table now shows nineteen of the 22 plus the two recall-sample rows marked † and named as not counted in the 22; the two missing members were added as rows; the footnote now names all three genuine exclusions and what each of them measured. A bibliography entry (campobasso2020_impersonation) was generated for the new row. The second reviewer independently found the same defect, which is why it is worth the space. |
tool_fold.mjs false positive. The Anti-detection patches family was a bare /stealth/, which matched Stealth Audio Player in a mmWave-radar paper. Section H's 12 should be 11. | Accepted, and it reached further than the reviewer saw | The fold was tightened and re-diffed string by string; it also dropped Razer Blade Stealth laptop from otherToolsMentioned, which the reviewer did not mention. Because the fold is shared with Crawler, that page's published 12 / 2 row became 11 / 1 and was corrected in the same sitting. Full account under A shared fold this page had to fix. |
| The “anchors removed” computation only half worked. It string-edited the tight patterns' regex sources and stripped the anchor from four of ten. | Accepted, and the published figure was wrong by more than half | LOOSE_SELF_REPORT_PATTERNS is now ten hand-written unanchored patterns in botdet_fold.mjs; the report uses them directly. The true figure is 406, not the 249 the page had printed. |
| False “the highest of any year in the corpus” claim about 2025. | Accepted | Already corrected on the content page before this review landed (see the author-found defects above); the same error was still in the provenance prose and has now been fixed there too. |
| Stale checklist figures on the provenance page (“67 citations, 42 distinct keys”). | Accepted | The builder now computes the citation counts and the bibliography key list from the saved page and the BibTeX file, so they cannot go stale again. |
| Confirmed correct: script output reproduces byte-for-byte; 1,120 and 1,080 never conflated; the period row, the Wilson interval, the precision figures, the recall point estimates, section D/D2/E/F/G figures and the five AI-crawler papers all recomputed and matching. | Noted | No change. |
Reviewer 2 — citations and quotes (Sonnet)
| Finding | Verdict | What was done |
|---|---|---|
| The same 22-table population defect as Reviewer 1, found independently. | Accepted | See above. Two reviewers converging on it is the strongest signal in this review. |
| Bijmans et al.'s denominator was wrong: “~1,371” should be 1,363. The tilde was a back-calculation from 946 ÷ 0.69; the paper states 1,363 five times and never says 1,371. | Accepted | Verified by hand: 1,363 appears 5 times in paper.cols.txt and 1,371 zero times. Corrected on the page and in the hand-audit record, with a note saying where the wrong number came from. This is the exact failure mode the wiki has recorded before — a number that looks derived from the paper and is derived from arithmetic on the page instead. |
| Stale provenance checklist counts. | Accepted | Same fix as above. |
| Confirmed correct: all keys resolve; no key, DOI or title collisions; all new BibTeX entries verified against the corpus index, including the three whose authors came from venue landing pages; all 19 attributions match; every other table-row figure verified word-for-word against its paper; the external claims spot-checked against primary sources. | Noted | No change. |
Reviewer 4 — generic (Fable)
Told explicitly that the three focused reviewers had already run, that its job was whatever they were not looking for, and that the author's context may not be exhaustive. It also reported that the files changed under it mid-review — true, and a real defect in how this run was sequenced: two of its drafted findings had already been fixed by a concurrent edit. Freezing the files before a generic review is the lesson.
| Finding | Verdict | What was done |
|---|---|---|
A literal | inside monospace in a provenance table cell (12 | 2 in the Reviewer 1 log). Monospace does not escape pipes; the row would have parsed as five cells in a three-column table. | Accepted | Rewritten as 12 / 2 and 11 / 1. The reviewer also drew the right corollary: the Checks run before saving table was true when written and false by the time the review log was appended to the page it describes. All pre-save checks were re-run after this log was final. |
| ~92 cells of double-backticks in the generated audit tables — a markdown habit that stock DokuWiki renders as literal backtick characters. Unique in the whole wiki. | Accepted | The builder now emits \'\'…\'\' for every generated cell. No slug contains an apostrophe, so the substitution is safe. |
The stale 12 survived in this page's own headline table while the rest of the page tells the story of correcting it to 11. Exactly the failure mode this wiki has recorded as a fix survives in the provenance log. | Accepted | Corrected to 11. |
| “A challenge page is HTTP 200 with a full DOM” overstates a universal — Cloudflare has shipped challenges as 403 and 503 too, and this page's own vendor footnote says “can be”. | Accepted | Changed to “can be”, with the two other status codes named and the 200 case identified as the dangerous one. |
| An “at all” negative with no recorded check, and contradicted on the same page: “no paper in this corpus reports a block rate broken down by popularity rank” — DeBlasio et al. split one figure into all-sites and top-100. | Accepted | Narrowed to “by rank decile”, and DeBlasio's two-stratum split is now named in the same sentence, which strengthens the inference rather than weakening it. This wiki's own rule is that “nobody” must never come from a probe; it had. |
| “Read by hand” means Sonnet sub-agents, and the content page did not say so. Deeper: verdict reliability was never measured — one rater per candidate, no inter-rater agreement, and the published precision treats single-model verdicts as ground truth. | Accepted, and it is the most important finding of the four reviews for the honesty of the page | The content page now says “audited individually against that paper's full text” and points at this page for who did it; the run table says plainly that “hand-audited” means the sub-agents; and What could not be established gained a Verdict reliability row stating that no second rater was used, which rows are best covered, and that double-coding a sample would close it and was not done. |
The tooling table: keep it, but the patchright cell was the one cell that recommended rather than dated (“drop-in”, “the actively maintained option”), and the scattered licences serve only an adopter. | Accepted | The cell now reads “the only row still receiving commits in the week this table was built”, and the licences were dropped from the content table; they remain in the Z block here. The reviewer's overall verdict on the author's flagged closest call was that the section title, the two stated lessons and the repeated ethics pointer make it read as a warning. |
| “DataDome, Kasada, Arkose Labs — current and independent” asserts a positive from an absence, in a market the same table calls consolidated, on a page whose provenance records rejecting a plausible false acquisition claim. | Accepted | Now “Current; no acquisition found as of 2026-08-29 — an absence of evidence rather than a company statement, and weaker than the rows below.” |
| Two unrelated sweeps both return 382 and a reader could take the discarded draft's 1-in-12 precision anecdote as bearing on the recall audit's 6-in-24. | Accepted | A parenthetical now says the collision is a coincidence. |
A stale comment in botdet_fold.mjs still claimed 398 papers “at roughly 20% precision” for the unanchored sweep — a figure superseded by 406, and a precision that was never measured. Scripts are a citation surface on this wiki. | Accepted | Comment rewritten; it now says no precision is claimed for the unanchored set. |
11 papers name a stealth patch vs a stealth patch — 15 on the same page, both saying “name”, from different populations. | Accepted | “among their tools” added, and the 15 explained in the same sentence. |
| The provenance narrated the neighbour-page edit in past tense before it happened. | Accepted | The three pages were published in one sitting, so the tense is true; the reviewer's diff of the edit found the moved material survives and no duplication remains. |
| The reader is told to build a challenge-page detector and pointed at no artefact, not even this page's own marker list. | Accepted | The step now names the seven markers this page's own sweep used, says plainly that no public curated set exists, and a sixth open question asks for one — with the observation that every paper writes its own list, none publishes it, and none reports its precision. |
| The Imperva and Akamai footnote's worked examples are themselves mild differential probing, which the page tells readers to treat as a decision. | Accepted | Half a sentence added saying so, and that reading a press release is not a measurement of the operator. |
Confirmed clean: rendering hazards (nowiki-escape balance, uppercase and closed WRAP tags, no unescaped media syntax, footnote and URL escaping, table cell counts everywhere except the finding above); the report script reproduces the embedded output byte-for-byte; the Wilson interval, the Y block, 940+93+35+12=1080, the 1,080/1,120 separation and the 161 = 138 − 1 + 24 quote tally all recompute; the content page answers its own question in reader order; no evasion instructions on either page. | Noted | No change. |
One finding recorded and not acted on. The reviewer noted the run's own sequencing problem — files edited while a reviewer was reading them. That is a process defect, not a page defect, and it is recorded here rather than fixed: the correct practice is to freeze the page before a generic review, and this run did not.
A defect found by re-running the checks, after all four reviewers
The Imperva observation had to be rewritten twice, and the second rewrite is the one worth recording.
- First draft: “returns an Incapsula-branded HTTP 403 to
curl”. Wrong — the
status was 200 and the challenge was in the body. Caught by the check script.
- Second draft: “answers
curlwith HTTP 200 and 920 bytes… the same URL, fetched by
a headless Playwright Chromium, returns the full article.” Correct at the time, and
published as a worked example. - Then the check script **failed**: ''curl'' from the same host was now getting the full 180 KB article, three times in a row, roughly forty minutes after the challenge.
The challenge was transient — almost certainly a rate or reputation score that tripped under our repeated requests and then decayed. The footnote now records the whole sequence with its timing and says explicitly that it is not a standing property of that host, and the check script no longer asserts the transient: it asserts the claim (the article's Thales date) and merely reports which of the two responses it got today. The Akamai 403, by contrast, was consistent on every attempt across several hours, and the page now says so, so the two observations are not read as the same kind of thing.
This is the most useful thing the run produced about its own subject: a block rate measured once is a measurement of a moment, and the page says so where the reader meets the example.
Two more claims the author cut before publishing
| Claim | Why it went |
|---|---|
| “Reviewers now ask. A crawl paper with an unexplained non-load rate and no breakdown of causes is an easy reject.” | An assertion about reviewer behaviour that this corpus cannot support, and in tension with the page's own central finding: 96.2% of crawling papers report no obstruction and were published anyway. Replaced with an argument that stands on its own — the breakdown has to be collected while you crawl, and a reviewer's “how do you know the sites you lost were lost at random?” cannot be answered afterwards. |
| “no difference is evidence you were not singled out” in the differential-crawl box. | Overstated: a null result on one axis is weak evidence, not proof, and it says nothing about the axes you did not vary. Rewritten to say so, and to add that a paper must name the axis it varied or “we ran a control” is unfalsifiable. |
See also
- Crawler Detection — the page these notes are behind.
- corpus — the dataset-wide provenance page: venue scope, selection
funnel, and the corpus-level caveats this page does not restate.
Conventions this page follows
No ~~DISCUSSION~~ block, following the existing provenance: pages: comments
belong on the content page, where the reader is. No bibliography entries of its own — it
cites the same {[key]} keys as Crawler Detection against the
shared bibliography. The keys it names are
[1Venugopalan, 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)], [2Liu, 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)], [3Searles, 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)],
[4Singh, 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)], [5Oh, Se Eun; Li, Shuai; Hopper, Nicholas (2017): "Fingerprinting Keywords in Search Queries over Tor", in: Proceedings on Privacy Enhancing Technologies. (DOI)], [6Hausladen, 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)] and
[7Bekos, 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)].
References
- [1]
- 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)
- [2]
- 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)
- [3]
- 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)
- [4]
- 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)
- [5]
- Oh, Se Eun; Li, Shuai; Hopper, Nicholas (2017): "Fingerprinting Keywords in Search Queries over Tor", in: Proceedings on Privacy Enhancing Technologies. (DOI)
- [6]
- 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)
- [7]
- 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)
