How scoring works
Botardo assigns every form session a score from 0 to 100. Learn what drives that number.
Every form submission gets a score from 0 (definitely human) to 100 (definitely a bot). Every session starts at 100 by default — see why scores start at 100 — and only moves down as signal layers confirm the session looks human. Here's how Botardo arrives at that number.
Signal layers
Botardo evaluates sessions across three independent signal layers. Each layer holds a portion of the starting 100 and releases it when it finds evidence consistent with a human; a layer that never reports simply never releases its share, and the score stays elevated.
Behavioral baseline
Mouse movement, keystroke cadence, scroll patterns, and focus timing are compared against a per-device behavioral model. Natural human variance lowers the score; deviations, or a lack of any interaction to measure, leave it unchanged.
Network signals
IP reputation, data-center ranges, known proxy exits, Tor relays, and hosting ASNs. Most legitimate users submit from residential or mobile addresses, which lowers the score; hosting and exit-node ranges leave it unchanged.
Environment fingerprint
Browser feature availability, canvas rendering, WebGL renderer strings, and font enumeration. An ordinary, fully-featured browser lowers the score. Headless browsers leave a distinct fingerprint even when they spoof common user-agent strings, so this layer doesn't release its share for them.
Score thresholds
Botardo doesn't make the block/allow decision for you — that's your call based on your risk tolerance. These are the defaults most customers use:
| Score range | Suggested action | Typical use |
|---|---|---|
| 0–40 | Allow | No friction |
| 41–70 | Challenge | CAPTCHA or honeypot |
| 71–100 | Block | Silently drop the submission |
**Tip:** Start with logging-only mode (`data-mode="passive"`) for a week before enabling blocking. You'll learn your baseline false-positive rate before it affects real users.
Confidence levels
Alongside the score, Botardo returns a confidence field: "high", "medium", or "low". Confidence reflects how much signal was available for this session.
A score of 80 with "low" confidence is less actionable than 80 with "high" confidence. Consider loosening thresholds or routing to a challenge step when confidence is low.