Detection matrix
Real anti-detect tools and stealth browsers, run against the detector — one row each. You get its verdict, its coherence score, and exactly which tells gave it away. The suspicious near-misses sort to the top. For what each tool actually is, see the annotated evasion catalog.
105evaders
95caught (bot)
10suspicious
| Evader | Verdict | Score | Convicting tells |
|---|---|---|---|
patchright-headful | suspicious | — | |
camoufox-headful | suspicious | — | |
camoufox-hardened-behave | suspicious | — | |
camoufox-hardened | suspicious | — | |
camoufox-linux-coherent | suspicious | — | |
camoufox-linux | suspicious | — | |
camoufox-socks-webrtc | suspicious | — | |
webrtc-leak | suspicious | — | |
zendriver-uach-behave | suspicious | — | |
zendriver-uach | suspicious | — | |
zendriver | bot | net.h2_header_order_vs_ua | |
camoufox-touch-incoherent | bot | br.pointer_touch_incoherent | |
fp-rotation | bot | br.fingerprint_unstable_within_session | |
curl-impersonate | bot | net.no_js_execution | |
nodriver | bot | br.headless_ua | |
pydoll | bot | br.headless_ua | |
selenium-driverless | bot | br.headless_ua | |
undetected | bot | br.headless_ua | |
baseline-firefox | bot | br.webdriver_present | |
camoufox-macos | bot | net.tcp_os_vs_ua, br.font_mac_internal | |
firefox-coherent | bot | br.webdriver_present | |
screen-depth-spoof | bot | br.screen_depth_incoherent, net.ch_platform_header_vs_ua | |
h2-settings-split | bot | net.h2_settings_vs_order, net.no_js_execution | |
primp | bot | net.tcp_os_vs_ua, net.no_js_execution | |
go-tls-web-bot-auth-replay | bot | net.web_bot_auth_nonce_replay, net.no_js_execution | |
go-tls-web-bot-auth | bot | net.web_bot_auth_invalid, net.no_js_execution | |
brave | bot | br.webdriver_present, br.headless_ua | |
go-tls-h2-rotate | bot | net.h2_unknown_vs_ua, net.h2_unstable_within_session, net.no_js_execution | |
go-tls | bot | net.h2_unknown_vs_ua, net.no_js_execution, net.tls_pq_keyshare_vs_ua | |
h2-continuation-flood | bot | net.h2_continuation_flood, net.no_js_execution | |
h2-control-flood | bot | net.h2_control_flood, net.no_js_execution | |
h2-rapid-reset | bot | net.h2_rapid_reset, net.no_js_execution | |
max-stealth | bot | br.webdriver_spoofed, br.permissions_anomaly, br.no_chrome_object | |
accept-lang-spoof | bot | br.cdp_runtime_enabled, net.accept_lang_vs_navigator, br.headless_ua +5 | |
apify-fp-inject | bot | br.cdp_runtime_enabled, br.permissions_anomaly, br.no_chrome_object +3 | |
audio-noise | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
audio-readback-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
azuretls | bot | net.h2_header_order_vs_ua, net.tcp_os_vs_ua, net.no_js_execution +1 | |
brave-fake-proxy | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
brave-fake | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
camoufox | bot | net.tcp_os_vs_ua, net.no_js_execution, net.tls_grease_vs_ua | |
canvas-geometry-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
canvas-lie | bot | br.cdp_runtime_enabled, br.canvas_lie, br.headless_ua +5 | |
canvas-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +6 | |
cdc-leak | bot | br.webdriver_present, br.cdp_runtime_enabled, br.headless_ua +4 | |
ch-ua-hardcoded | bot | net.tcp_os_vs_ua, net.no_js_execution, net.sec_fetch_vs_ua +3 | |
chrome-clone-1 | bot | br.webdriver_present, br.cdp_runtime_enabled, br.headless_ua +2 | |
chrome-clone-2 | bot | br.webdriver_present, br.cdp_runtime_enabled, br.headless_ua +2 | |
chromium-firefox-ua-spoof | bot | net.tls_vs_ua_browser, net.h2_vs_ua_browser, net.ch_ua_vs_ua_browser +1 | |
coalesce-proxy | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
coalesce-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
csp-bypass | bot | br.cdp_runtime_enabled, br.csp_bypassed, br.headless_ua +4 | |
curl-http2 | bot | net.h2_unknown_vs_ua, net.h2_header_order_vs_ua, net.tcp_os_vs_ua +4 | |
datacenter-origin-proxied | bot | net.datacenter_origin_proxied | |
domrect-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
electron-leak | bot | br.automation_globals, br.electron_process, br.cdp_runtime_enabled +5 | |
firefox-os-spoof | bot | br.webdriver_present, net.tcp_os_vs_ua, br.navplatform_vs_ua +2 | |
floor-spoof | bot | br.tostring_tampered, br.nav_property_spoofed, br.webdriver_getter_tampered +1 | |
font-os-leak | bot | br.cdp_runtime_enabled, net.ch_ua_version_vs_ua, net.tcp_os_vs_ua +7 | |
full-stealth | bot | br.cdp_runtime_enabled, net.ch_ua_version_vs_ua, br.ch_he_headless +7 | |
go-tls-madeyoureset | bot | net.h2_unknown_vs_ua, net.h2_header_order_vs_ua, net.h2_madeyoureset +3 | |
go-tls-rotate | bot | net.h2_unknown_vs_ua, net.ja4_unstable_within_session, net.no_js_execution +2 | |
go-tls-static-ext | bot | net.h2_unknown_vs_ua, net.tls_ext_order_static_within_session, net.no_js_execution +1 | |
honeypot | bot | br.webdriver_present, br.cdp_runtime_enabled, br.honeypot_interaction +4 | |
http2-naive | bot | net.h2_header_order_vs_ua, net.h2_vs_tls_browser, net.tcp_os_vs_ua +4 | |
human-mouse | bot | br.webdriver_present, br.cdp_runtime_enabled, br.headless_ua +3 | |
iframe-spoof | bot | br.ua_platform_vs_ch_platform, br.cdp_runtime_enabled, net.ch_platform_header_vs_ua +9 | |
ios-ua-spoof | bot | net.tls_vs_ua_browser, net.h2_vs_ua_browser, br.ua_platform_vs_ch_platform +11 | |
ip-rotation | bot | net.ip_rotation_within_session, net.no_js_execution, net.sec_fetch_vs_ua +2 | |
keystroke-human | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +3 | |
lang-list-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
lang-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
linear-bot | bot | br.webdriver_present, br.cdp_runtime_enabled, br.headless_ua +3 | |
measuretext-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
mobile-emulation | bot | br.webdriver_present, br.cdp_runtime_enabled, br.ch_he_headless +3 | |
mobile-no-touch | bot | net.tls_vs_ua_browser, net.h2_vs_ua_browser, br.automation_globals +11 | |
naive-tz-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +6 | |
native-spoof | bot | br.native_invariant_violated, br.cdp_runtime_enabled, br.headless_ua +6 | |
os-spoof | bot | br.cdp_runtime_enabled, net.ch_ua_version_vs_ua, net.tcp_os_vs_ua +5 | |
patchright | bot | br.headless_ua, br.ch_he_headless, br.permissions_anomaly +1 | |
playwright-extra-coherent | bot | br.cdp_runtime_enabled, br.ch_he_headless, br.worker_divergence +2 | |
playwright-extra | bot | br.cdp_runtime_enabled, net.tcp_os_vs_ua, br.ch_he_headless +3 | |
quic-no-grease | bot | net.no_js_execution, net.sec_fetch_vs_ua, net.accept_encoding_vs_ua +1 | |
rebrowser | bot | br.webdriver_present, br.headless_ua, br.permissions_anomaly +1 | |
renderer-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +6 | |
screen-impossible | bot | br.screen_impossible, br.cdp_runtime_enabled, br.headless_ua +4 | |
spoof-ua | bot | net.tls_vs_ua_browser, net.h2_vs_ua_browser, net.ch_ua_vs_ua_browser +8 | |
stale-engine | bot | br.cdp_runtime_enabled, net.ch_ua_version_vs_ua, br.ch_he_headless +5 | |
stealth-naive | bot | br.webdriver_present, br.cdp_runtime_enabled, br.headless_ua +3 | |
stealth-patched | bot | br.cdp_runtime_enabled, net.ch_ua_version_vs_ua, net.tcp_os_vs_ua +7 | |
tls-stale-template | bot | net.tcp_os_vs_ua, net.no_js_execution, net.sec_fetch_vs_ua +3 | |
trace-replay | bot | bh.trace_replay_within_session, br.cdp_runtime_enabled, br.headless_ua +4 | |
tz-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +6 | |
ua-rotation | bot | net.h2_unknown_vs_ua, net.h2_header_order_vs_ua, net.ua_rotation_within_session +5 | |
uach-coherent | bot | br.cdp_runtime_enabled, br.permissions_anomaly, br.no_chrome_object +1 | |
vanilla | bot | net.tcp_os_vs_ua, net.no_js_execution, net.sec_fetch_vs_ua +2 | |
webgl-caps-worker-spoof | bot | br.automation_globals, net.tls_ext_order_static_within_session, br.webdriver_present +3 | |
webgl-renderer-spoof | bot | br.automation_globals, net.tls_ext_order_static_within_session, br.webdriver_present +9 | |
webkit-safari-coherent | bot | net.h2_unknown_vs_ua, br.webdriver_present, net.tcp_os_vs_ua +3 | |
webkit-ua-spoof | bot | net.tls_vs_ua_browser, net.h2_unknown_vs_ua, net.h2_header_order_vs_ua +8 | |
webrtc-origin-datacenter | bot | net.datacenter_origin_proxied | |
worker-proxy-fix | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
worker-proxy | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
worker-spoof | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 | |
worker-wrap | bot | br.cdp_runtime_enabled, br.headless_ua, br.ch_he_headless +4 |