botcheckme

Lens over plate: reads BOT.

Plate 1 — the same dots, two readers

Outside the lens this plate says YOU. Inside it, the same dots say BOT.

A few dozen of about 1,400 dots change colour across that edge. None of them are you. Drag the lens — or focus it and use the arrow keys.

You’re a person.
It’s your settings that aren’t.

Something in this browser reads as automated to the checks that keep stopping you. This finds which things, ranks them, and tells you what to change.

No account, no email. Every visit here is recorded and one full reading of this browser is stored. What is collected

Ten things get read

  • Time zone
  • Language
  • Network
  • Connection
  • Request headers
  • Extensions
  • Browser build
  • Graphics
  • Fonts
  • Input & timing

The ruled report is built after the reading exists. There are no empty rows waiting for it.

READ AT PRIOR TABLE ED. 1.0.0 · 2026-10-13 · ASSUMED, NOT MEASURED

The rank is taken against 15 written assumptions about how common each value is and 16 written weights about how much each one matters. 9 of them we think are probably wrong. Real counts from the browsers these sites have read appear beside a row, never inside its rank. Read the assumptions →

Fig 1 A bot check, as a beam scale
CHALLENGEPASSVPNBLOCKOLD012345678910
Drag the poise, or use ← →Static view
The weights are what a check reads as unusual in a browser; the poise is the line the site chose. Slide the poise in and the same weights tip the beam to challenge: the reader moved, the browser did not. The weights shown are illustrative until you read your browser; then they are yours. The line is always illustrative, because no site publishes its own.

A bot check never decides whether you are a person. It weighs how ordinary your request looks against the requests it usually sees, and challenges anything past a line the site chose. You are not being accused of anything; you are being sorted, by a machine, on evidence you have never been shown.

The scale beside this is that machine. Each weight is something a check reads as unusual. The poise is the line. Sites and their vendors move the line all the time, which is why the same browser passes one month and is stopped the next. Read your browser above and the weights become yours.

What does a bot check actually look at?

Two halves, and they are read in different places. The network half arrives before your browser says anything: the address your traffic came out of, the country it belongs to, and whether the operator of that network is a household provider or a place where servers live. You did not choose most of it and you cannot see it from inside your own browser.

The browser half is everything your browser volunteers when the page loads — the clock, the languages you asked for, the size of the window, the name of the graphics adapter, how quickly it can finish a piece of arithmetic. None of it is secret and none of it identifies you. What matters is whether the two halves tell one story. Traffic leaving Frankfurt with a clock set to Chicago is two halves of two different stories, and that costs you more than either half would alone.

Why does it happen to some people and not others?

Because the things that push a request below the line cluster on ordinary people who have done nothing unusual. Someone on a work laptop, behind a corporate network, with a VPN left on from the morning and an ad blocker a relative installed, is carrying four contributions at once — and each of them is a reasonable choice that thousands of people make.

The same is true in the other direction: the person beside you on the same Wi-Fi sails through, because their browser happens to volunteer a duller set of answers. That is the whole reason this page reads your browser instead of guessing. Nobody can tell you which of your four it is by reasoning about it, and the ranking is different for every machine.

Can I fix it, or is this just how the web is now?

Most people can fix most of it, and the fixes are dull. Move a VPN to a server in your own country. Allow-list one site in your blocker. Turn hardware acceleration back on. Close the tabs before you go back to the checkout. None of that requires understanding anything on this page, which is why every row in the reading ends in an action rather than a number.

What cannot be fixed by a setting is stated as such on the row rather than dressed up: an address your provider shares with a thousand other subscribers, a laptop with no graphics chip, a corporate tunnel you do not control. The full list of what a reading can find marks each one as belonging to a setting, to the network, or to the machine, before you have pressed anything.

The usual version of this page is a dark scanner with a pulsing button, a green or red badge, and a table of raw values nobody outside the trade can read. That arrangement agrees with the accusation: it grades you and hands back a verdict.

This one does not grade anybody. Every measurement is presented as a property of the reading, what a bot check sees when it looks at your browser, and every row ends in an action. There is no badge, no score and no percentile. The rank comes from a written table of assumptions, published in full, with the ones we doubt marked as doubted. Real counts from other browsers sit beside it, labelled.

Two things follow from that. The first is that you can argue with this page: every number on a row shows its own arithmetic. The second is that when a row says we could not decide this, it says so, rather than filling the gap with a guess.

Every symptom, and what each one is waiting on →

What people type into a search box before they get here

Why does every website suddenly think I’m a bot?
Because the thing doing the reading changed, not you. Anti-bot vendors retune thresholds, add signals and re-weight existing ones continuously, and the same vendor serves thousands of sites at once — so one adjustment shows up everywhere on the same afternoon. The other common answer is that something in front of your browser moved: your provider handed you a different address, your VPN silently re-picked a nearer exit, or a browser update stopped arriving.
Am I actually being blocked for being a bot?
Not exactly. A bot check does not decide whether you are a person; it scores how ordinary your request looks and challenges anything below its threshold. Everything this page finds is a way your setup reads as unusual to that scoring, which is a different sentence from an accusation — and it is why every row here ends in something you can change.
Does this page send my browser data anywhere?
Yes. Every visit is recorded with its address, approximate location, network and browser facts, and once per browser the site takes a full reading in the background and stores it. Pressing the button shows you that reading. The privacy page lists everything and has a button that deletes it.
Is my VPN the problem?
Often, but not for the reason people expect. The address itself matters less than the disagreement it creates: your traffic comes out in one country while your clock and your language say another, and that contradiction is cheap for a vendor to check and hard for a page to fake. Picking a VPN server in your own country usually costs you nothing and removes the contradiction.
Why does this not give me a score out of 100?
Because a score would hide the reasons. Each row is ranked as surprisal against a written assumption about how common a value is, times a written weight for how much a challenge acts on it, and both numbers are printed on the row. Where these sites have real counts for your value, the row shows them too, beside the rank rather than inside it.
Will turning off my ad blocker fix it?
Sometimes, and you almost never have to turn it off everywhere. A blocker changes the page before the site's own script runs, which is also what a scraper's page looks like. Adding the one site that keeps stopping you to your blocker's allow list is usually enough, and you keep the blocking everywhere else.
Nothing on my machine changed. Why did this start happening?
Because the reader changed, not you. Vendors retune thresholds, add signals and re-weight existing ones continuously, and a setup that passed in March can start failing in August without a single setting moving. That is the whole premise of this page, and it is why the reading is dated and the assumptions behind it are published.

The rows you cannot fix from a settings page

A VPN you need for work, an address your ISP shares with a thousand other subscribers, a laptop with no graphics chip, a hardened profile that breaks the sites it was meant to protect — none of these have a checkbox. What is left is to present a reading that is internally consistent and ordinary on purpose, instead of one that is accidentally strange.

Donut Browser does that at the engine level: its Wayfern Chromium fork applies the fingerprint through CDP injection rather than patching JavaScript in the page, and it refuses to launch a profile whose proxy exit country, time zone and language contradict the profile's own fingerprint — which is the top row of most readings on this site. It is AGPL-3.0, it has no telemetry of any kind, and it runs on macOS, Windows and Linux.

Stated plainly: this site has no test results showing what any particular anti-bot service does with any particular browser, and neither does Donut Browser's own repository. What can be checked is the source, which is public.