How a captcha decides you are a bot
Nine tiles fade in and it feels like the test is beginning. The test mostly finished a few seconds earlier, somewhere between the page loading and your cursor arriving at the checkbox.
What these systems hand back to a website is a number. Call it a score running from zero to one, answering a single question: how much does this session look like a person. The site picks a threshold and writes its own rules on either side of it. Show a puzzle. Ask for a second factor. Accept the form and then do nothing with it. The grid of photographs is one branch of that decision tree, and it happens to be the only branch you can see.
I run mobile proxy lines on carrier SIMs in Singapore and a rack of Android phones that people rent by the hour, so I sit on the wrong end of these scores most weeks. Customers never send me detection whitepapers. They send me screenshots.
What the page measures while you read it
The measuring script loads with the page and starts working immediately. It does not wait for you to click anything.
The pointer is the oldest signal in the stack and still one of the loudest. A hand on a mouse does not travel in a straight line to a target. It accelerates, overshoots slightly, corrects back, and jitters a pixel or so before the button goes down. That curve is consistent enough across real people to model, and awkward enough to reproduce that a lot of automation simply does not bother.
Timing carries almost as much weight. How many seconds passed between the page finishing and your first interaction. A person reads the label, hesitates, glances at the price. A script acts the instant the element exists in the document.
Keystrokes have a rhythm too. The interval between one key and the next varies by which pair of letters it is, because your fingers were already near some of them and not others. How long each key stays held down varies as well. Text that arrives with identical gaps between every character was pasted or generated, and the timing gives it away without anyone reading a word of the content.
Then the smaller things that add up. Whether the pointer entered the window from an edge or materialised in the middle of it. Whether the tab lost focus at any point, which real people do constantly and headless sessions almost never do. On phones, the size and pressure of the contact patch when you tap.
The consistency check
Alongside the behaviour sits the browser’s account of itself: the platform it claims to be, screen dimensions, device pixel ratio, installed fonts, language, time zone, the way it renders a line of text or a WebGL scene into pixels, the quirks of its audio processing stack.
Any single one of those can be edited. The difficulty is keeping the whole story straight. A browser announcing itself as an iPhone while drawing graphics the way a desktop GPU driver does has contradicted itself. A time zone set to Singapore behind an address that geolocates to Frankfurt has contradicted itself. Most of what gets called fingerprinting is really a consistency audit run in the time it takes a page to paint.
Reputation gets layered on top. Every IP belongs to a network, and networks carry history. Space that a hosting provider rents by the hour scores differently from residential broadband, which scores differently again from a mobile carrier. Underneath that sits memory: has this browser been here before, is there a token from four months back attached to a session that behaved itself, is there any past at all. A long boring history is the single hardest thing on this list to manufacture, because the only way to get one is to have lived it.
So why show the puzzle at all
Three reasons, and the answer you give is not really among them.
The first is latency. Reputation lookups and cross referencing take longer than a page load will tolerate. The seconds you spend squinting at a half hidden motorcycle are seconds that budget did not previously have.
The second is that the puzzle is itself a behavioural sample, and a rich one. How you move between tiles. How long you look before the first selection. Whether you deselect something and change your mind. Whether you click nine squares in perfect reading order at almost identical intervals, which people essentially never do and scripts do by default.
The third is that it gives the site an alibi. There is a visible control on the page, so nobody can claim the door was left open. That is worth something to a compliance team even when it stops very little.
You can get every square correct and still be refused, because the answer was never the submission. The way you produced it was.
The puzzles were also a labelling programme
The earliest generation asked you to read wavy text, two words at a time. One word was already known to the system and graded your humanity. The other came off a scanned book or newspaper page that automated text recognition had failed on, and your reading of it went back into the transcription. Free labour, at a scale no publisher could have paid for.
The image era carried the same arrangement forward. First street numbers off the fronts of buildings, then shop signs, then a strangely specific menu of objects: traffic lights, crosswalks, buses, fire hydrants, bicycles. Those are the things a self driving system has to classify correctly, and nobody assembled that list by accident.
The tell that the programme ended is sitting in front of you the next time you get challenged. The tiles are frequently no longer photographs. They are rendered objects, low resolution and slightly cartoonish, a bicycle clearly drawn by a computer rather than shot on a street. Nobody moves from real street imagery to synthetic renders because the renders are harder to classify. You move because the labelling need was satisfied and the picture now only has to be a picture.
The people it gets wrong
Every scoring system has a false positive rate, and this one falls on a predictable set of people.
Run an uncommon browser, or a hardened privacy build that blocks the very scripts doing the measuring, and you have made yourself statistically strange. Nothing is judging you. There are simply almost no examples of you in the training data.
Accessibility software makes it sharper. A screen reader user may never move a pointer at all. Switch access advances a cursor in discrete steps. Eye tracking produces a trace with none of the overshoot and correction the model was built around. Each of those resembles the human template less than a competently written script does.
Keyboard driven people hit the same wall from the other side. Tab, tab, tab, enter, no mouse movement whatsoever, and the session arrives with an empty pointer record that reads as missing rather than human.
Then the shared exits. A university residence hall with four thousand students behind one address. An office with a single egress. Mobile networks, where carrier grade network address translation puts thousands of subscribers behind a small pool of public addresses, which is why the same phone gets challenged more on mobile data than on home wifi. You inherit the last hour of behaviour from everyone standing near you.
None of this produces a complaint the site can act on. Nobody opens a support ticket to say their risk score came back at 0.3. They close the tab, and the site sees a slightly worse conversion rate and blames the checkout.
Why a solving market exists at all
There is an entire industry built on routing a captured challenge to a person somewhere in the world who solves it in a few seconds and sends the answer back, priced by the thousand in single digit dollars.
Worth being clear about why that matters, because it is an argument rather than a suggestion. Any test a human can pass, a human can be paid to pass. No amount of extra difficulty escapes that, since being solvable by people is the entire design requirement.
The answer is transferable. That is the whole flaw. It can be couriered to a stranger and mailed back in under ten seconds.
A score cannot. Four months of ordinary browsing on a device that has genuinely been yours is not something anyone can send you. That asymmetry is the real reason the industry walked away from puzzles and toward profiles.
What I had wrong about this
I spent about two years grading my own product lines by how many challenges they triggered. Fewer captchas meant a cleaner line, and I sold on that basis.
The measurement was broken and a customer showed me why. Two people on identical mobile lines, same carrier, same afternoon, reported wildly different challenge rates. The line was not the variable. One of them was running a browser profile whose declared time zone disagreed with the connection, and working at a pace no human sustains. I had been measuring my customers and calling it a property of my infrastructure.
Address reputation still matters. It is maybe a third of the picture, and I say that now before anyone buys anything from me.
Silent scoring, and nothing to appeal
Most of these systems have stopped showing a challenge at all. They observe, they score, and they pass a number to the site, which then makes a business decision that is usually softer than a wall.
A low score can surface as a slower page. An extra verification step that appeared this week and not last. A listing that quietly does not show up. A form that submits successfully and goes nowhere. A support queue that takes four days instead of one.
A ban has a form and a queue and eventually a human at the end of it. A score has none of that. You were never told it existed, the page looked entirely normal, and the site never actually said no.
I would still not switch it off. The same machinery that reads a session as automated is what stops a stranger holding your leaked password, on hardware that has never been yours, before the transfer clears. Credential stuffing is exactly the shape these models catch best, because a script working through two hundred thousand accounts cannot make every attempt look like a separate life. The tension is permanent: anything this good at noticing the unusual will always be worst for people who are unusual for innocent reasons.
More on the machinery running underneath the ordinary internet at The Hidden Internet.
Get new guides and videos first — join the Telegram channel.