Detect bots, fake browsers and device fraud — before they touch your form.
Real-time risk scoring that catches what FingerprintJS, DataDome and Cloudflare miss. Custom stealth signals tuned for serious B2B merchants.
- CDP Proxy TrapRuntime.evaluate hook absentClean
- WebGPU coherenceGPU vendor matches WebGLClean
- Mouse entropyBezier paths, human varianceClean
- WASM enginev8 timing fingerprint OKClean
- Direct navNo referrer + 0 prior pageviewsDetected
Trusted by merchants protecting £2M+ in monthly revenue
Detect what blends in. Score what matters. Act before they convert.
Detect
Catch anti-detect browsers, headless Chrome, virtual machines and CDP-driven automation. Signals tuned against the toolchains attackers actually use in 2026.
Score
Every submission gets a 0–100 risk score in under 50ms. Server-side rules engine — deterministic, auditable, no black-box ML drift.
Act
Approve, review or reject — wired into your funnel. Send to your CRM, queue for manual review, or block at the edge. Webhooks included.
From script tag to verdict in three steps.
Drop the collector
One <script> tag on your form page. Zero config. Auto-collects 23 stealth signals plus mouse and keystroke entropy.
<script src="https://stt.sh/c.js"
data-key="pk_live_…"
data-form="#signup"></script>Score on submit
Server action receives signals + form data, runs the rules engine, returns score and decision in under 50ms.
curl https://api.stt.sh/v1/score \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "01HFG7Y2…",
"signals": { /* collected */ }
}'Branch on the verdict
APPROVE moves on. REVIEW queues for manual. REJECT shows a soft fail. Plug the verdict into your CRM, Slack, or webhook.
{
"score": 87,
"decision": "REJECT",
"factors": [
{ "rule": "cdp_proxy_trap_hit", "weight": 35 },
{ "rule": "ua_vs_ch_mismatch", "weight": 22 },
{ "rule": "mouse_entropy_too_low", "weight": 18 },
{ "rule": "form_filled_under_3s", "weight": 12 }
]
}Five categories of evidence the spoofers haven't solved.
Mouse entropy
Real humans move in shaky bezier curves and overshoot targets. Bots use straight lines, perfect velocity profiles, or skip movement entirely. We measure path entropy, velocity variance and the straight-line ratio — and weight them against form completion time.
CDP trap
Chrome DevTools Protocol leaves a tiny tell: a Proxy on Function.prototype.toString detects when the page is being driven by Runtime.evaluate. The bypasses (puppeteer-stealth, undetected-chromedriver) all fail this check the way attackers actually deploy them.
$ stt.detectCDP()→ proxy trap armed→ Function.toString.call(Function.toString)→ trap fired: Runtime.evaluate{ cdpDetected: true }
WebGPU coherence
WebGL says NVIDIA. WebGPU says Intel. That's a virtualized GPU stack — a VM, a remote browser farm or a mismatched anti-detect profile. We cross-check the two adapters and flag inconsistencies the spoofers haven't patched yet.
WASM engine fingerprint
JavaScript engines compile WebAssembly with measurably different timings. v8, SpiderMonkey and JavaScriptCore each have signature setter latencies. If your user-agent says Chrome but the engine looks like SpiderMonkey, you're talking to a forged headless build.
Cross-check inconsistencies
User-agent vs. client hints. Timezone vs. IP geolocation. Language header vs. navigator.languages. Each is fakeable in isolation. All five being internally consistent under a forged identity is the asymmetric problem we make attackers solve every time.
- User-Agent↔Client Hints✓ match
- Timezone↔IP geolocation✓ match
- Accept-Language↔navigator.languages✗ mismatch
- Platform↔WebGL renderer✓ match
- Screen DPR↔viewport ratio✓ match
Submit the form, watch us score you in real time.
We collect 23 stealth signals from your browser — mouse entropy, CDP traps, WebGPU coherence, WASM engine timing, cross-checks between user-agent and client hints. The scoring engine returns a 0–100 risk number plus a decision: approve, review, or reject.
- Adversarial by design. Tuned against AdsPower, Multilogin, Puppeteer-stealth.
- Sub-50ms scoring. Server-side rule engine, no third-party hop.
- No PII stored. We hash signals; you keep the lead data.
Questions worth answering.
- FingerprintJS focuses on stable visitor identity. We focus on adversarial signals — anti-detect browsers, headless flags, runtime tampering, GPU coherence, behavioural entropy. We're complementary: FingerprintJS tells you it's the same visitor, we tell you whether that visitor is real.
Stop bots before they hit your DB.
Try the live demo aboveor talk to us about an integration.