RookSac
← All articles

How to Analyse All Your Chess Games at Once

Analysing one game teaches you about that game. Analysing four hundred teaches you about yourself. Here are the four free routes to running an engine over a whole history, and what to measure once you have.

By the RookSac teamOctober 22, 20268 min read

First, decide what you are measuring

Bulk analysis goes wrong when it is done for its own sake. Four hundred annotated games is not an insight; it is four hundred files. Before you start, pick the question:

The question decides the method, because some of the routes below give you annotated PGNs and nothing else, which answers none of those four without further work.

Get your games

Both big sites publish free, keyless APIs:

Be polite with both: they are free services, they rate-limit, and a script that hammers them gets blocked. Download once, cache locally, analyse from the cache.

The four routes

1. Request analysis game by game on Lichess

Import the PGN, press "Request a computer analysis". Free, properly annotated, and it handles games played anywhere. The limit is 40 games a day, so this is a route for tens of games, not hundreds.

2. SCID vs PC

Desktop database software with batch annotation built in: load a PGN database, point it at a Stockfish binary, set a time or depth per move, and let it run. No cap, no code. It will take hours for a large database, and what you get back is annotated PGNs — the analysis, not the conclusions.

3. python-chess and a Stockfish binary

About thirty lines: read the PGN, walk the moves, ask the engine for an evaluation at each one, write the results to CSV. This is the route that answers arbitrary questions, because you decide what gets recorded. It is also the route that needs you to write code and to be careful about search depth consistency.

4. In the browser

Stockfish compiled to WebAssembly runs inside a tab, which means a site can analyse a whole history on your own machine without a server bill and therefore without a cap. This is what RookSac does: username in, it fetches from the public API and runs a pool of Web Worker engines, defaulting to your CPU core count, so several games are in flight at once.

Keep the comparison fair

Three traps that make bulk numbers lie:

  1. Mixed time controls. Bullet accuracy and classical accuracy are different populations. Comparing them produces a trend that is really just a change in what you played.
  2. Inconsistent depth. If half your games were analysed at depth 12 and half at depth 18, the deeper half will show more mistakes, because the engine found more. Fix the setting before you start and do not change it mid-way.
  3. Too small a slice. "I score badly in the French" based on six games is not a finding. Single-game accuracy varies by more than 25 points even for elite players, so small slices move on their own.

What to look at once you have it

In the order that has paid off most, for most players:

  1. Errors by move number. Almost everyone has a spike. If yours is moves 10–15, your problem is the transition out of the opening, not the opening itself.
  2. Accuracy by phase. Opening, middlegame and endgame scored separately. The weakest of the three is where your next month goes.
  3. Openings ranked by points lost, not by win rate. Win rate is contaminated by who you played; points lost to engine-measured error is not.
  4. The positions themselves. Numbers tell you where to look. Only the positions tell you what you were actually doing wrong, and they make far better training material than generic puzzles — which we wrote about in training with puzzles from your own games.