HomeLearn → Behavioral bot detection

Behavioral bot detection

Most of the effort in this field goes into the fingerprint: canvas, WebGL, fonts, timezone, the user agent. That work is worth doing, and it answers exactly one question — what machine is this? It does not answer the second question sites ask, which is whether a person is actually driving it. That question is answered by how you move, type and wait, and a flawless fingerprint does not touch it.

The two halves of the problem

It helps to separate them, because they fail in completely different ways and the fixes have nothing in common.

FingerprintBehavior
Question What machine is this? Is a human operating it?
Measured Once, at page load Continuously, for the whole session
Signals Canvas, WebGL, fonts, screen, timezone, headers Keystroke timing, cursor path, scroll, dwell, action rhythm
Typical failure Two accounts share one value and get linked One session looks synthetic and gets challenged

The distinction matters because the symptoms differ. A fingerprint problem links accounts to each other — you get a wave of related actions across accounts that should have nothing to do with one another. A behavior problem does not link anything; it just raises friction on the one session in front of it. More captchas, more verification, a login that needs a code every time.

What is actually being measured

Browsers hand out a lot of timing for free, and none of it requires anything clever on the site's part. Every one of these is available to ordinary JavaScript on any page.

Keystroke timing

Two numbers come out of typing. Dwell is how long a key is held down; flight is the gap between releasing one key and pressing the next. Both are reported by keydown and keyup events with millisecond timestamps. Human flight times cluster in the tens to low hundreds of milliseconds and vary constantly — common letter pairs are quicker, reaching for a number is slower, and everyone slows down at the end of a word.

Automation, by default, has no timing at all. Both Puppeteer and Playwright will set an input's value in a single synchronous operation unless you explicitly ask them not to. A twenty-character password appearing in under a millisecond is not a subtle signal. It is not a thing a keyboard can physically do.

Cursor movement

A real cursor arrives at a button along a curved path, overshoots slightly, corrects, and accelerates and decelerates on the way. A scripted click usually produces no mousemove events at all — the pointer simply is at the target, then the click fires. A session with clicks and zero movement between them is trivially separable from one with a person in it.

Dwell time and reading speed

The gap between a page finishing loading and the first meaningful action is a strong signal precisely because it is bounded by human physiology. Nobody reads a form, decides, and submits in 200 milliseconds. Automation that moves as fast as the network allows produces timings that no person could generate, and that is easier to detect than any fingerprint mismatch.

The rhythm across a session

People are inconsistent. They pause, re-read, switch tabs, get distracted, and come back. A script that performs the same sequence of actions at the same pace forty times produces a variance close to zero across the whole run. Low variance over many repetitions is the easiest pattern in this entire list to spot, and it needs no machine learning to find.

The mistake almost everyone makes next

The obvious fix is to add a delay. Set 100 milliseconds between keystrokes and the "instant" problem disappears.

Except a perfectly even 100ms gap is also impossible for a human. You have not removed the tell, you have moved it — from "typed impossibly fast" to "typed with the precision of a metronome". The same applies to a fixed pause between actions, or a delay drawn uniformly from a range: uniform randomness has a flat distribution, and human timing does not. Real intervals have a long tail. Most keystrokes fall in a narrow band, and occasionally someone stops to think, and that asymmetry is part of the signature.

The practical lesson is that variance itself is the signal, not the average. Randomizing is necessary. Randomizing in a way that produces an unnaturally clean distribution is a different tell wearing the first one's clothes.

What this means for real work

If you are automating your own accounts — posting to your own storefronts, checking your own listings, running your own test suite — you are not trying to defeat anything. You are trying to stop legitimate work from being misclassified, which is a much narrower goal and a much more achievable one.

Where the two halves meet

Neither half rescues the other. A perfectly human typing rhythm does not help if three accounts share one canvas hash — they are still visibly the same machine. An immaculate, internally consistent fingerprint does not help if the session fills a form in zero milliseconds — it is a very convincing machine with obviously nobody at the keyboard.

This is worth saying plainly because the two get sold as one thing. Most tools in this category work entirely on the fingerprint and describe the result as undetectability, which it is not. It is half of the problem, addressed well.

What Parallel does about it

Typing in a Parallel automation is not instant. Each keystroke is separated by a randomized 40–120ms gap — randomized rather than fixed, for exactly the reason above. If a step sets its own delay, that still wins, including a delay of zero when you deliberately want speed.

The fingerprint half is handled separately: each profile gets a complete, internally consistent identity and its own proxy, and the combination is checked for contradictions — like a New York IP with a Karachi timezone — before the browser launches.

We will not tell you this makes automation undetectable, because nobody can honestly tell you that. Detection is a moving target and behavior is only one input to it. What it does is remove the signals that are trivially, physically wrong, which is the category that gets ordinary work flagged.

Related reading

Automation that does not announce itself

Parallel gives each profile its own consistent fingerprint and proxy, and its automation types at human speed by default rather than as a setting you have to find. Three profiles free, forever.

Download for Windows