Protection

Bot
Detection

Invisible human verification — no CAPTCHA, no friction, pure behavioral signals.

Live demo — your session

Human score

Behavioral signals
Move your mouse, type something, or scroll to see signals update in real time.
Integration
Add to any page in 2 steps

Step 1 — Add the script to your page's <head>:

<script src="https://ackgeo.com/ackgeo-human.js"></script>

Step 2 — Call AckgeoHuman.getToken() on form submit and verify server-side:

// Client — get token before submitting
const token = await AckgeoHuman.getToken();

// Include in your form POST
fetch('/your-form', {
  method: 'POST',
  body: JSON.stringify({ token, ...formData })
});

Server-side verification — POST the token to ACKgeo:

// Node.js example
const res  = await fetch('https://ackgeo.com/human/verify', {
  method:  'POST',
  headers: { 'Content-Type': 'application/json' },
  body:    JSON.stringify({ token })
});
const { human, score } = await res.json();
// human: true/false   score: 0-100
if (!human) return res.status(403).json({ error: 'Bot detected' });
How scoring works
Mouse movement +15

Natural curved paths with velocity variation. Bots move in straight lines or not at all.

Keystroke timing +10

Human typing has irregular rhythm. Bot keystrokes are evenly spaced.

Time on page +20

Bots submit forms in milliseconds. Humans take seconds to read.

Scroll behavior +8

Real users scroll with natural deceleration. Bots skip straight to submit.

Touch events +15

Touch input is almost always a real human on a real device.

Honeypot field -100

A hidden field bots fill in but humans never see. Instant fail if triggered.

Configuration
Detection threshold

Scores below the threshold are flagged as bots. Default is 25 — conservative enough to catch most bots without false positives. Higher threshold = stricter (more false positives). Lower = more permissive.

Permissive (10)Strict (60)
25
Threshold
Scores ≥ 25 pass. Most human users score 40–80.