How Chess Cheating Detection Actually Works (And Why Your Opponent Probably Isn't)

Chess.com closes around 3,500 accounts a day for fair play violations. How statistical detection works, what it looks for, and why it catches people who think they are being careful.

By Merse SárváriSeptember 15, 20265 min read

Key Takeaways

  • Detection is statistical, not visual. Nobody is watching your screen. The system compares how you play to how someone of your strength should play, across many games.
  • Chess.com reports closing roughly 3,500 accounts per day for fair play violations, around 314,000 in the first quarter of 2025 alone, with about 85% of those closures automated.
  • Occasional cheating is not safer than constant cheating. Move-matching on the hardest positions in a game is itself a signal, because difficulty and accuracy are supposed to move together.
  • Most opponents who beat you badly are not cheating. Losing feels identical to being cheated, which is exactly why accusations are far more common than violations.

Ask in any chess forum whether online cheating is rampant and you will get two confident, opposite answers. One group is certain that every other game is against an engine. The other is certain that the accusations are mostly sore losers.

The data sits somewhere awkward between them. Cheating is common enough that platforms close accounts by the thousand every day. It is also far less common than the accusations, because losing badly and being cheated feel exactly the same from your side of the board.

How does detection actually work?

Not the way most people imagine. Nobody is watching your screen, and no software is scanning your computer for open windows.

Detection is statistical. The system builds a model of how a player of your strength plays and then asks how likely your actual games are under that model. Chess.com states that its system uses over 100 gameplay factors and auto-bans when the combination of them makes a performance extremely improbable.

The important word there is combination. No single factor gets anyone banned, which is why "I only used it a few times" does not work the way people expect.

What the signals look like

The specifics are deliberately not published, and Chess.com is explicit about why: "players who cheat are reading this as well." But the general shape of statistical cheat detection is well understood.

Move matching against engine choices, weighted by how obvious the move was. Playing the best move when there is only one legal recapture means nothing. Playing it in a quiet position with six reasonable candidates means considerably more.

Accuracy against position difficulty. This is the one that catches careful cheaters, and it is worth understanding properly. Human accuracy falls as positions get harder. That relationship is extremely consistent across every rating level. Someone consulting an engine at critical moments inverts it: their accuracy holds up, or even rises, exactly where it should be collapsing. A flat difficulty curve is a louder signal than a high average.

Timing patterns. Not just how long you think, but whether your thinking time relates sensibly to the position. Spending four seconds on a move that requires a long calculation, consistently, is strange. So is spending a uniform amount of time on every move regardless of what the position demands.

Your own history. This is what protects improving players. The comparison is not only against players of your rating, it is against you. Real improvement shows up as a gradual shift across many games, usually accompanied by changes in the kind of mistakes you make. A step change in one dimension while everything else stays put looks different.

Behaviour around the game. Patterns in when accounts are created, what devices connect, and how a session is structured.

The scale of it

Chess.com publishes figures, and they are larger than most players expect.

Between January and March 2025 the platform closed roughly 314,000 accounts for fair play violations. That works out to about 105,000 per month, or 3,500 per day. Around 85% of those closures were fully automated, with human analysts involved only in less clear cases.

Titled players go through a different process. A panel of experienced titled players and senior analysts reviews the data directly rather than leaving it to the algorithm. In that same quarter, 34 titled players were closed: 12 CMs, 11 FMs, 4 IMs, 3 GMs and 2 WFMs.

As of 2026, closed accounts are marked publicly rather than quietly. Whatever you think of that as policy, it changes the calculation for anyone weighing it up, because the consequence is now visible to everyone who looks at the profile.

But what about false positives?

This deserves an honest answer rather than a reassuring one.

Chess.com reviewed around 28,000 appeals out of those 314,000 closures and granted roughly 0.2% of them.

That number gets quoted by both sides of the argument, and it genuinely supports neither cleanly. If detection is accurate, a 0.2% reversal rate is exactly what you would expect, since almost everyone appealing actually did it. If detection has a meaningful false positive rate, the same number could equally mean the appeals process rarely overturns its own system. The statistic cannot distinguish those two stories, and anyone telling you it settles the question is overreading it.

What can be said with more confidence: the process is weighted toward not banning strong play. Detection is built around comparison with your own history, so the improving player who suddenly performs well above their rating is the expected case rather than the alarming one. That is the pattern the system sees constantly.

Why "just a few moves" is worse, not better

The most common cheating strategy is to use an engine sparingly, in critical positions, and play the rest honestly. The intuition is that a lower dose is harder to detect.

It is usually the opposite, for the reason above. Engine use naturally concentrates where the position is hard, because that is when people reach for it. And difficulty is precisely the axis detection measures accuracy against.

A player who is uniformly strong looks like a strong player. A player who is ordinary in simple positions and superhuman in complicated ones does not look like any rating band that exists. The selective approach produces a statistical signature that is more distinctive than consistent use, not less.

Was your opponent cheating?

Almost certainly not, and the way most people check makes things worse.

Running their game through an engine proves nothing. Accuracy is dominated by position type. A game full of forced recaptures and obvious developing moves will show a high accuracy figure for a 1200 rated player. One sharp game means nothing at all. Platforms look at hundreds of games precisely because a single one is statistical noise.

Beating you badly is not evidence. Rating is a long run average and everyone has good days. A 1400 player at their best plays like a 1600, and if you met them on that day the experience is indistinguishable from playing something unfair.

The feeling is not diagnostic. This is the hard part. Being outplayed and being cheated produce exactly the same sensation: moves you did not expect, a position that collapsed without an obvious error, an opponent who seemed to see everything. Your nervous system cannot tell those apart, which is why the accusation rate runs so far ahead of the violation rate.

The useful response is to report the game and move on. The platform can see the opponent's whole history and you can see one game. Then go and look at your own moves, because in the overwhelming majority of these games there is a real mistake in there, and it is more useful to you than the question of whether they deserved to win.

The part that does not get said often enough

Engine use during a live rated game is against the rules on every major platform, and this is not a grey area. Using an engine to understand your games afterwards is the single most effective study tool ever built. The difference is not the software. It is whether a game is in progress.

Sources: Chess.com Fair Play, Chess.com news.

Frequently Asked Questions

How does Chess.com detect cheating?

By statistical analysis of how you play rather than by watching your device. Chess.com states its system uses over 100 gameplay factors and auto-bans when the combination makes a performance extremely improbable for that player. Around 85% of closures are automated, with human review reserved for unclear cases and titled players.

How many people actually get caught?

Chess.com reported closing roughly 314,000 accounts for fair play violations between January and March 2025, about 105,000 per month or 3,500 per day. That included 34 titled players: 12 CMs, 11 FMs, 4 IMs, 3 GMs, and 2 WFMs.

Can you get banned for playing too well?

It is the fear everyone has, and the honest answer is that it is possible but rare. Detection compares your play against your own history as well as against expectations, so genuine improvement looks different from a sudden jump in accuracy. Chess.com reviewed about 28,000 appeals out of 314,000 closures and granted roughly 0.2% of them.

Does cheating just a few moves per game avoid detection?

No, and the reasoning is counterintuitive. Engine use tends to get concentrated in critical positions, which means the strongest moves appear exactly where the position is hardest. Human accuracy drops as complexity rises. A player whose accuracy is flat or rising through the difficult moments stands out more, not less.

How do I know if my opponent was cheating?

You usually cannot, and checking their game with an engine will mislead you. High accuracy in a simple or forced position is normal, and a single game is far too small a sample to mean anything. Report the game and let the platform's data answer it, because the platform can see their whole history and you cannot.

Where we stand on engine use

ChessSolve is built for analysis and training, never for live rated play. Our position on that, in full.

Read our ethics policy
MS

Written by

Merse SárváriFounder, ChessSolve