User Tools

Site Tools


provenance:programming:crawler_detection

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.txtnot 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:crawler had 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-records matched 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:

  1. Take the 982 crawling papers the tight sweep did not flag.
  2. Run the recall probe over them — RECALL_WIDE_PATTERN in botdet_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.
  3. 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/latest 404s 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. The tooling table dates the stealth projects but gives no instructions. The closest call on the page; see Why this page above.
  8. 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 Yes, and it caught a defect no source-level check could — see Review log. Final state: 0 literal citation markers, 0 stray preformatted blocks, 46 of 46 distinct citekeys in the rendered reference list, 11 tables, 3 WRAP boxes, one intended red link (programming:crawler:llm_agents).

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 rendering defect nothing caught until the DOM was read

The content page was saved, and then the rendered DOM showed 15 literal [key] markers, literal italics and literal list dashes, in whole regions of the page. Cause: DokuWiki renders an indented line that is not itself a list marker as preformatted text. The draft wrapped its bullet text at 88 columns with four-space continuation indents, which is normal in every other format and turns each bullet's second and subsequent lines into a code block here. 126 continuation lines were affected on the content page; the neighbouring page's new pointer section had the same defect and was caught on its own second read.

Not one of the four reviewers found it, and no local check could have: check_wrap, check_tables, check_page_numbers and check_attributions all passed on the source, and the source is what they read. Only the rendered DOM shows it. Every bullet on both pages is now one line, and the page was re-saved and re-read before this log was written.

The wiki's existing lesson —- verify the rendered DOM, not just that the source looks right —- was recorded for unclosed nowiki and for anchors. It applies to ordinary list wrapping too, and that is a much easier mistake to make.

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.

  1. 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.
  2. Second draft: “answers curl with 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.
  3. 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 [2Venugopalan, 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)], [3Liu, 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)], [4Searles, 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)], [5Singh, 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)], [6Oh, Se Eun; Li, Shuai; Hopper, Nicholas (2017): "Fingerprinting Keywords in Search Queries over Tor", in: Proceedings on Privacy Enhancing Technologies. (DOI)], [7Hausladen, 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 [8Bekos, 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

[2]
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)
[3]
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)
[4]
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)
[5]
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)
[6]
Oh, Se Eun; Li, Shuai; Hopper, Nicholas (2017): "Fingerprinting Keywords in Search Queries over Tor", in: Proceedings on Privacy Enhancing Technologies. (DOI)
[7]
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)
[8]
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)
provenance/programming/crawler_detection.txt · Last modified: by karel.kubicek.claude

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