Detection

Detect every bot that touches your site.

22 scoring rules, 45+ client signals, 6 ML engines. From known AI crawlers to anti-detect browsers running residential proxies.

22+ Known Crawlers

GPTBot, ClaudeBot, Bytespider, PerplexityBot and more, identified by user-agent matching.

Browser Fingerprinting

Canvas, WebGL, AudioContext, fonts, plugins with 45+ signals collected per visitor.

Crawler Verification

Reverse DNS confirms if a claimed bot is real. Spoofed Googlebots caught instantly.

Header Fingerprinting

HTTP header order reveals automation tools, even when UA is spoofed.

Asset Loading Check

HTTP-only scrapers load zero CSS/JS/images. We track every resource.

IP Intelligence

ipinfo.io integration identifies datacenter, VPN, proxy, and Tor traffic.

ML Analysis

Cross-signal correlation, behavioral mismatch, canvas consistency checks.

Real-time Scoring

Every request scored 0.0 to 1.0 in under 50ms. Cached lookups, deferred writes.

22+
Known crawlers detected
45+
Client signals collected
6
ML engines running
<50ms
Verdict latency
Pipeline

Every request, scored in milliseconds.

Three layers, evaluated in parallel — server, network, and client. The aggregate score ranges from 0.0 (human) to 1.0 (bot).

Step 01

Server signals

User-agent, header order, TLS fingerprint, HTTP/2 priorities, ASN, IP classification. ~10ms.

Step 02

Client beacons

detect.js sends 45+ signals in 3 beacons (200ms / 30s / unload). Canvas, WebGL, mouse entropy, font enumeration.

Step 03

ML aggregation

6 ML engines combine signals into final score. Cached so repeat visitors verify in <5ms.

Worked example

How a python-requests scraper gets caught.

Every signal stacks. By the time we hit a threshold, we've evaluated 22 rules across 4 layers. Here's a real request, scored.

GET / · 23.27.145.78 · python-requests/2.31.0
  • Identityuser-agent: python-requests/2.31.0+0.90
  • Client signalsno asset requests in 600ms+0.25
  • Browser fingerprintheader order matches requests lib+0.70
  • IP intelligenceASN 14618 — Amazon AWS+0.30
  • Client signalsno client-side beacon ever sent+0.25
  • Final scoreCapped at 1.0 — blocked1.00
Rule catalog

22 rules. Four detection layers.

Every signal we evaluate. Some give hard verdicts, others stack into the final score.

Identity4 signals
Known bot UA0.95

Matches GPTBot, ClaudeBot, Bytespider, PerplexityBot + 18 others by user-agent

Bot framework UA0.90

python-requests, curl, wget, Scrapy, Puppeteer, Playwright, Selenium signatures

Empty / short UA0.80

Missing or < 10 char user-agent — almost always a script

rDNS verificationverify

Reverse DNS confirms claimed crawler identity (Googlebot → google.com)

Browser fingerprint4 signals
navigator.webdriver0.85

Headless browser automation flag exposed by every WebDriver-based tool

Header order fingerprint0.70

HTTP header order reveals python-requests, curl, Go-http-client, Node fetch

Minimal headers0.50

Fewer than 4 HTTP headers — real browsers send 8+

Chrome without sec-ch-ua+0.30

Claims Chrome but missing Client Hints — automation signature

Client signals6 signals
No assets loaded+0.25

HTTP-only scrapers load zero CSS/JS/images — broken DOM after 200ms

No speech voices+0.15

speechSynthesis.getVoices() returns 0 — headless Chrome telltale

Canvas noise injection+0.40

Anti-detect browsers inject canvas noise — double-render detects mismatch

Zero hardware concurrency0.50

hardwareConcurrency = 0 — real devices report 2–32 cores

Instant event loop+0.20

setTimeout(0) returns in 0ms — physically impossible in real browser

Fast DOM mutation+0.20

100 DOM inserts < 0.5ms — headless renders ~10× faster

IP intelligence4 signals
Datacenter ASN+0.30

AWS, GCP, Azure, Hetzner, DigitalOcean — verified via 3 IP providers in parallel

VPN / proxy IP+0.20

ipinfo.io VPN/proxy classification + 15 known residential proxy networks

Tor exit node+0.40

Tor exit list cross-checked on every request

Timezone-IP mismatch+0.35

Browser claims Vienna, IP geolocates to USA — proxy rotation tell

ML engines

Catches what rules can't.

Six engines run after the rule layer. They surface professional scrapers operating residential proxies, anti-detect browsers, and rotation infrastructure.

01

Behavioral mismatch

Residential IP + no mouse / scroll / clicks = professional scraper using rotation proxy (Bright Data, Oxylabs).

02

Canvas double-render

Anti-detect browsers inject canvas noise. We render twice — if hashes differ, noise injection is confirmed.

03

Cross-signal correlation

Chrome UA but wrong JS engine? Mobile UA but desktop hover? 10+ signal pairs checked for consistency.

04

Request distribution

Human request timing is log-normal (varied). Bot timing is uniform (Math.random). KS test detects the difference.

05

Mouse entropy

Real hands produce high-entropy angles + tremor. Emulated mice show low entropy + zero micro-jitter.

06

Session coherence

3+ pages without a single interaction (click, scroll, keystroke) = bot navigation, not human reading.

53% of internet traffic is automated.
How much of yours?

Most site owners have no idea. Find out in under 2 minutes — free.