ChesscoChessco
Chessco

Opponent preparation, measured live

From an opponent's name to a prep plan.

Chessco turns whatever you know about the player into a practical match plan: identify the person, connect them to online games, build their opening tree, rank the leaks you can actually reach, then drill the positions before the round.

Can we find them by name?

3.4%

19,035 of 553,023 FIDE 1400+ players already have a linked chess.com or Lichess handle. If not, the PGN path can still identify them by style.

Can we identify them from games?

10 games

Collecting

0 trials so far

We show public hit-rate percentages only after 30+ benchmark trials. That avoids turning a one-game artifact into a fake guarantee.

How fresh is the corpus?

Jun 4, 2026

213,991 graph-ready online accounts. Corpus snapshot is loaded. These numbers update from live artifacts, not static marketing copy.

What do you have?

Start from the clue in hand.

Jump to live proof

Opponent name or FIDE profile

Search the federation index, then attach known online accounts.

Use Scout

Chess.com or Lichess handle

Skip identity search and go straight to repertoire and leak prep.

Open Prepare

PGN or sample games

Match their style against the fingerprint corpus to find the account.

See identity path

Only a tournament pairing

Start with name, country, federation, rating band, and event context.

See first step

The five-stage path

What Chessco gets you through.

Each stage answers one practical question and hands the next stage a stronger signal.

Stage 1

Find the opponent

You have
Name, federation, country, rating band, or tournament pairing.
Chessco does
Search official rosters and community-confirmed ad-hoc targets.
You get
A precise tournament-player record to prepare against.
Live proof
761,899 federation players indexed.
Search players

Stage 2

Identify their account

You have
Known handle, claimed account, or a PGN sample.
Chessco does
Match public profiles and compare opening style against the corpus.
You get
A chess.com or Lichess account with confidence signals.
Live proof
PGN benchmark pending.
See evidence

Stage 3

Build their tree

You have
The matched online handle.
Chessco does
Build color-split, recency-weighted opening trees from their games.
You get
A prep-ready repertoire map for White and Black.
Live proof
213,991 graph-ready accounts.
Open Prepare

Stage 4

Rank useful leaks

You have
Their tree plus your repertoire.
Chessco does
Score overlap, severity, timing, confidence, and practice cost.
You get
The lines worth studying before this specific game.
Live proof
Leaks are ranked by game-relevant opportunity, not raw engine noise.
Review method

Stage 5

Drill the plan

You have
Leak report and target positions.
Chessco does
Turn prep into bot games, position drills, and coach handoff.
You get
A practical training queue for the round.
Live proof
Practice starts from the positions you are trying to reach.
Practice modes

How the magic works

A pipeline built for one question: what should I prepare?

The page below keeps the live measurements, but this is the product logic in plain English.

1

Federation index

Official rosters and ad-hoc targets make the human player searchable first.

2

Account identity

Claimed handles, public profiles, and PGN-style matching connect that person to games.

3

Opening graph

We store what each account actually plays, split by color and weighted toward recent games.

4

Leak ranking

We compare their choices to yours and rank lines by opportunity, severity, and practice cost.

5

Practice

The report becomes position drills, bot games, and coach-ready prep notes.

Style matching and AI Detective

Style matching looks for uncommon shared opening choices, coverage of the same lines, and plausible human moves at the candidate's rating. AI Detective then checks public profile facts such as name, country, title, and rating so a style match with impossible paperwork gets demoted.

Trees, leaks, and practice

The prep tree is not just a database of moves. It is split by color, weighted toward recent games, and compared to your own repertoire. Leaks rise when they are likely to appear, costly for the opponent, and cheap for you to prepare.

Live proof and operations

The numbers behind the walkthrough.

The task flow above is visitor-facing. These panels keep the raw coverage, accuracy, corpus, and worker-health measurements available for anyone who wants to audit the claim.

Outcome summary snapshot

Found by name

3.4%

Out of ~553,023 tournament-rated players in our index, this is the share who've already linked a chess.com or Lichess account, so typing their name finds them instantly. The rest still get found by pasting their games (see the next tile).

Found by their games

10 games

Collecting

0 trials so far

For already-fingerprinted accounts, we publish headline hit rates only after 30+ trials per sample size. Until then, raw rows stay in the detailed table below.

Last refresh

Jun 4, 2026

These numbers re-measure every night, so what you see here is yesterday's truth, not a marketing screenshot from last quarter.

Name-search coverage and federation index

Stage 1

Find: locate them in the tournament pool.

Start by name. Filter by federation (FIDE / ICF / USCF), title (GM / IM / FM / …), country, and rating range. The index is built from official federation rosters, so every tournament-rated player is in scope, not just titled GMs. If they aren't in any federation roster, type the name and rating to add them as an ad-hoc target; community-verified ad-hoc players then appear for the next searcher.

Federation players indexed

761,899

FIDE 755,081 · ICF 6,818 · USCF via FIDE-USA slice

Online handles seeded

106,296

chess.com + Lichess handles linked to federation IDs

Live game-corpus handles

pending

hourly corpus snapshot not yet populated; see the chess.com identity queue below for live worker counts

Games ingested

pending

aggregate count rebuilds hourly; workers are actively ingesting

Not in any federation roster?

Type the player's name and rating to add them as an ad-hoc target. They become searchable for the next person looking, and once another user verifies the entry the target promotes to community-confirmed. Useful for juniors, unrated club players, and players from federations not yet covered.

Tournament games come to you.

We auto-ingest Lichess broadcast tournaments every 30 minutes. If your opponent played a broadcast event (a Grand Prix, a national championship, a weekend open with live relay), their games are already in the corpus the moment you search them. No PGN upload needed for those games.

Name-search coverage by FIDE tier

Club players matter as much as GMs. We benchmark coverage at every rating band, not just titled players.

Data refresh · last refresh 6/4/2026
TierFIDE poolClaimedCoverageProgress
Titled (GM/IM/FM/CM/WGM/WIM/WFM/WCM)24,23112,765(li 1,396 · cc 12,437)52.68%

66% of 80% v1 target

FIDE ≥ 220020,70712,687(li 1,535 · cc 12,351)61.27%

target met (40% v1)

FIDE 2000-219952,3213,063(li 816 · cc 2,278)5.85%

29% of 20% v1 target

FIDE 1800-1999133,4663,079(li 2,291 · cc 816)2.31%

23% of 10% v1 target

FIDE 1400-1799346,529206(li 0 · cc 206)0.06%

2% of 3% v1 target

Feature 1 coverage = distinct federation_players.id with ≥1 platform_players row where claimed_federation_player_id is set. Counts the unique-FIDE-player axis, not handles. A player claimed on both lichess + chess.com counts once in the total.

PGN identity accuracy, corpus coverage, and ingestion health

Stage 2

Scout: match them to an online account.

A tournament name alone isn't enough. We need their chess.com or Lichess account to pull real games for the next stages. Two paths get us there.

Path 1: By name

Match a claimed account.

If the player has linked a chess.com or Lichess account to their FIDE / ICF / USCF profile, it shows up directly. The coverage table below reports what fraction of the tournament pool is matchable this way, by rating band.

Path 2: By PGN

Paste a handful of their games.

The Opening Graph asks one question per game: which online account plays chess like this?

It pays more attention to weird moves than book moves (everyone plays 1.e4; only a few people answer it the way they do), looks for the longest opening line you'd both play move-for-move, and uses a neural net trained on human games at their rating level to ask “would a 1700-rated human really play this move here?”

The more of their games you paste, the surer the answer. Five is a hint. Twenty is usually enough. Fifty is decisive.

Show the math
  • Rare moves the candidate also plays (about 45%). Bayesian-smoothed log-ratio against the global corpus. Rare shared moves count for much more than common book moves.
  • Coverage (about 20%). Fraction of the target's moves the candidate's tree contains, measured at ply 6, 10, and 14.
  • Longest shared opening (about 15%). Longest exact prefix match in plies, via the prefix4..prefix24 inverted index.
  • How far each line gets before they diverge (about 10%). Per opening sequence, the ply at which the candidate first stops matching.
  • Maia policy lift (about 5%, when available). Per-rating-bucket policy (Maia 1500 / 1700 / 1900), chosen by the candidate's avg opponent rating, applied at each FEN.
  • Stockfish style (about 5%, when available). cp-loss similarity, Gaussian σ=20.
  • Support (about 5%). Log-scaled total overlap count, so big-corpus candidates beat thin ones at equal coverage.

AI Detective

Check the paperwork.

Once the math finds a likely match, AI Detective does what a human detective would. It opens their public profile and checks the paperwork: real name on file, country, FIDE title, plausible rating. If the chess style says GM-level but the profile says rated 900, that's a hard contradiction and the candidate gets demoted. If everything lines up, the match is upgraded.

AI Detective is a separate step, not part of the math score. It catches the cases where two unrelated people happen to play alike.

Under the hood

The validator is DeepSeek-chat (OpenAI-compatible chat completions). It returns one of four statuses per candidate: supported, neutral, soft_contradiction, or hard_contradiction. Hard contradiction is the only state that can downgrade a top-1 candidate out of the email-worthy tier.

Below: top-1 and top-10 accuracy on a random sample of accounts, by how many games of theirs you paste. These numbers are the math ranker only. AI Detective sits on top and can sharpen the final answer, but isn't in this measurement.

Opening graph vs sparse fingerprint accuracy

Sparse accuracy is published. Opening-graph accuracy is waiting on the first opening_graph_identity artifact after graph backfill and ranker indexes settle.

Sparse refresh · last refresh 6/4/2026
GamesSparse top 1Sparse top 3Sparse top 10Opening graph
30.0%0.0%0.0%pending
50.0%0.0%0.0%pending
100.0%0.0%0.0%pending
200.0%0.0%0.0%pending

Sparse remains the fallback/reference path until the opening-graph artifact is published. Benchmark accuracy measures whether the style matcher retrieves the right account. Final product probability also includes AI Detective validation, which can demote public-identity contradictions.

PGN-search accuracy by sample size

For 5 random players we hand the matcher N of their games and check whether it names them. 230,182 players indexed across chess.com + Lichess.

Data refresh · last refresh 6/4/2026

Quick scan

not met games

smallest sample size with top-10 accuracy >= 50%

Recommended

not met games

smallest sample size with top-3 accuracy >= 70%

High-confidence

not met games

smallest sample size with top-1 accuracy >= 75%

GamesTrialsTop 1Top 3Top 10Median rankMRR
300.0%0.0%0.0%n/a0.000
500.0%0.0%0.0%n/a0.000
1000.0%0.0%0.0%n/a0.000
2000.0%0.0%0.0%n/a0.000

lichess

GamesTrialsTop 1Top 3Top 10
300.0%0.0%0.0%
500.0%0.0%0.0%
1000.0%0.0%0.0%
2000.0%0.0%0.0%

chess.com

GamesTrialsTop 1Top 3Top 10
300.0%0.0%0.0%
500.0%0.0%0.0%
1000.0%0.0%0.0%
2000.0%0.0%0.0%

Last full run took 0 min on 0 trials. Current read at 20 games: 0.0% top-1, 0.0% top-10.

PGN-search accuracy on FIDE-rated players (OTB games)

Same matcher, but trained on tournament games we sourced from TWIC for 53,860 FIDE-rated players who may have no chess.com / Lichess account. Path B works for them too.

Data refresh · last refresh 5/18/2026

Quick scan

3 games

smallest sample size with top-10 accuracy >= 50%

Recommended

5 games

smallest sample size with top-3 accuracy >= 70%

High-confidence

10 games

smallest sample size with top-1 accuracy >= 75%

GamesTrialsTop 1Top 3Top 10Median rankMRR
320036.0%48.0%64.5%4.50.444
520068.5%78.0%88.5%10.749
1020097.0%98.5%98.5%10.978
20200100.0%100.0%100.0%11.000

Last full run took 19 min on 800 trials. Current read at 20 games: 100.0% top-1, 100.0% top-10.

Identity corpus: fingerprint coverage

Per-platform per-account fingerprints. Graph-ready is the count that actually matters: an account is only findable when its opening graph is built (both the retrieval and scoring tables). A fingerprint without a graph is invisible to the matcher, so graph-ready is the real “can we find them” number. Compact v2 shows the hashed/capped replacement backfill; reads stay on v1 until parity passes.

Data refresh · last refresh 6/4/2026
PlatformThresholdTotalGraph-ready (findable)Compact fp v2Compact graph v2≥10 games≥25 games≥50 games≥100 gamesExcludedTargetCoverage @ ≥10
lichess≥1800142,869142,868(100%)142,869(100.00%)
30,370,658 rows
142,868(100.00%)
37,402,150 moves / 24,808,232 terms
142,869105,10187,97974,3560~200,000 – 350,000(estimate)71.43%
chess.com≥140078,58571,123(91%)78,585(100.00%)
22,592,078 rows
71,123(100.00%)
24,997,881 moves / 13,433,061 terms
78,58577,47476,15474,0392,892119,371(measured)65.83%

Counts read from identity-eligible account_fingerprints plus identity run tables in games DB. chess.com frontier comes from chesscom_identity_queue, which includes platform_players plus games-frontier/sprint expansion. Coverage % is fingerprints with >=10 games over the denominator lower bound. Compact v2 tracks the hashed/capped replacement tables used for the storage-cost backfill; scout reads stay on v1 until parity passes. See docs/coverage-strategy.md.

Identity coverage by platform rating tier

chess.com coverage is measured against our discovered eligible frontier. Lichess is currently shown as indexed fingerprints by rating proxy; true per-time-control rank denominators are the next data source to wire.

Data refresh · last refresh 6/4/2026
PlatformRating tierTargetIndexed≥10 games≥50 games≥100 gamesCoverageBasis
chess.com2600+14,06313,95613,95613,69913,29299.2%frontier
chess.com2400-259917,73910,44710,44710,0359,48958.9%frontier
chess.com2200-239922,6806,4846,4846,0745,68728.6%frontier
chess.com2000-219923,35020,09120,09119,64919,32486.0%frontier
chess.com1900-19998,5478,4768,4768,3298,22599.2%frontier
chess.com1800-18995,8925,8005,8005,6795,60798.4%frontier
chess.com1700-17994,0173,9433,9433,8463,78198.2%frontier
chess.com1600-16994,4264,3094,3094,2124,15997.4%frontier
chess.com1500-15994,3974,2084,2084,1244,07795.7%frontier
chess.com1400-149971443343334231060.6%frontier
chess.comException / unknown rating13,546438438165883.2%frontier
lichess2600+-959959842768-indexed proxy
lichess2400-2599-2,8292,8292,2142,011-indexed proxy
lichess2200-2399-9,0009,0007,1906,396-indexed proxy
lichess2000-2199-26,53626,53619,91217,669-indexed proxy
lichess1900-1999-31,99731,99720,64917,854-indexed proxy
lichess1800-1899-54,21554,21532,74126,779-indexed proxy
lichess1700-1799-10,82110,8212,5621,641-indexed proxy
lichess<1700 proxy-6,5126,5121,8691,238-indexed proxy

For Lichess, the screenshot-style rank values are useful because they can become true denominators per time control. This table is ready for that source; today it uses the stored rating proxy until those rank/distribution fetches are wired.

Lichess identity-dump throughput

Monthly Lichess dump ingest status for the latest 24-month policy window. Each row is one month processed into per-account fingerprints; raw games/moves/positions are not stored here.

Data refresh · last refresh 6/4/2026

Policy window done

24/24

done runs in the latest 24-month identity window

Last completed

2024-11

at 5/25/2026

Avg scan rate

10235 games/s

across all done runs (gross games scanned ÷ wall clock)

Last run elapsed

2.5h

for 2024-11

MonthStatusGames scannedGames acceptedHandlesElapsed
2026-04done89,962,56434,625,334492,2732.8h
2026-03done90,074,19634,579,173479,9442.8h
2026-02done84,600,04332,740,777482,9872.9h
2026-01done94,604,72236,889,912501,9313.1h
2025-12done94,847,27637,398,920502,2982.4h
2025-11done90,633,15235,865,510496,9752.3h
2025-10done91,549,14836,375,305497,2592.7h
2025-09done87,049,89034,816,135485,1852.6h
2025-08done92,695,51937,413,594491,7842.5h
2025-07done93,092,77237,289,719494,0682.5h
2025-06done91,189,17836,172,303492,1012.4h
2025-05done94,068,11537,361,295493,7862.6h
2025-04done91,757,35036,025,651489,0552.5h
2025-03done97,512,35137,940,925500,7962.6h
2025-02done89,430,61234,621,367488,6102.3h
2025-01done97,569,41238,287,059514,0132.2h
2024-12done96,587,41138,344,771510,5882.4h
2024-11done90,847,98235,851,143491,0952.5h
2024-10done94,254,89137,387,186497,3942.4h
2024-09done87,713,21935,011,856483,6302.2h
2024-08done92,198,87837,080,113482,2342.5h
2024-07done90,106,18035,871,663477,5291.8h
2024-06done89,342,52935,197,079482,6312.3h
2024-05done94,400,05136,801,676491,9162.5h

chess.com identity queue

Broad chess.com fingerprint backfill. This writes only identity tables; full game storage stays reserved for prep and leak analysis on demand.

Data refresh · last refresh 6/4/2026

Queue pending

26,330

93,026 done of 119,371 eligible frontier handles

Running

0

15 permanent errors excluded from ETA

Handles/hour

40

last 24h across identity workers

ETA

653.8h

pending + retry queue at current 24h rate

Queue stalled: work is waiting, but no identity worker is heartbeating.

Check the chesscom-identity-watchdog and the Cloud Run identity jobs. Completed fingerprints remain valid; this points at worker dispatch or runtime health.

WorkerStatusHandlesFingerprintsGamesAcceptedErrorsHeartbeat ageReason
identity-usfailed202018,23717,405010h ago6/4/2026, 1:55:12 PMCloud Run execution exited 134 after max-handles 20; final account_fingerprints readback still hit V8 heap; reconciled by monitor before code/ops fixchessco-chesscom-identity-us - chessco-chesscom-identity-us-8vsrg
localhost-37failed0000011h ago6/4/2026, 1:45:08 PMCancelled by monitor: execution started after env update dropped WORKER_ID; no handles processed; job env restored before clean restartchessco-chesscom-identity-us - chessco-chesscom-identity-us-s74cs
identity-usfailed4040161,956159,298011h ago6/4/2026, 1:35:01 PMCloud Run execution exited 134 after max-handles 40; V8 heap out of memory on shutdown/finalization even with 2Gi; reconciled before restart with NODE_OPTIONS heap cap and max-handles 20chessco-chesscom-identity-us - chessco-chesscom-identity-us-4mtht
identity-usfailed2222138,959118,844012h ago6/4/2026, 12:32:32 PMCloud Run execution exited 134 after max-runtime cleanup; V8 out of memory on 1Gi container; reconciled by monitor before restart with 2Gi memorychessco-chesscom-identity-us - chessco-chesscom-identity-us-zjftr
identity-usfailed5554186,926169,779013h ago6/4/2026, 11:30:00 AMCloud Run execution exited 134 near timeout; reconciled by monitor before restarting with shorter runtime capchessco-chesscom-identity-us - chessco-chesscom-identity-us-xrqdr
identity-usfailed6159155,695145,516014h ago6/4/2026, 10:25:47 AMCloud Run execution exited 134 before DB run finalized; reconciled by monitor before restartchessco-chesscom-identity-us - chessco-chesscom-identity-us-2vw5t
identity-usfailed3737239,628225,790015h ago6/4/2026, 9:14:22 AMCloud Run execution completed/timed out before DB run finalized; reconciled by monitor before restartchessco-chesscom-identity-us - chessco-chesscom-identity-us-rrwbd
identity-usfailed4242183,694158,111016h ago6/4/2026, 8:05:00 AMstale heartbeat; Cloud Run execution no longer live after monitor restartchessco-chesscom-identity-us - chessco-chesscom-identity-us-l2dhz
Detailed product-stage notes

Stage 3

Build their opening tree.

Once we know which handle is theirs, the worker walks every game we have for them and builds two trees: a shallow depth-12 tree the matcher uses, and a deep depth-30 tree the prep UI shows you. Split by color (their white repertoire and their black repertoire are separate), recency-weighted so what they played last month counts more than what they played three years ago.

Matcher

Shallow

Quick enough to fingerprint every player in the corpus (12 plies).

Prep view

Deep

Deep enough to play out a real opening line (30 plies).

Refresh

Auto

Rebuilds whenever new games come in.

The 30-ply tree, split by color and recency-weighted, is what you walk through in the prep UI. See it on /prepare →

Stage 4

Find their leaks by comparing their tree to yours.

A leak isn't a one-off mistake. It's a fork in the road you'll actually meet them at, where they pick the wrong path often enough to matter, and where you already know the right answer.

We rank every leak by five questions.

  • Will you actually meet on this road? A blunder in a line you never play is noise.
  • Is the mistake a sprained ankle or a broken leg? Average cp-loss has to clear 100 to even count, and a queen-drop ranks above a half-pawn slip.
  • Does it happen on move 8 or move 38? Early leaks beat late ones, because more games end before time-trouble does.
  • Do you already know the punishing move, or would you have to learn a new line? Cheap-to-prepare leaks rise to the top.
  • How many games back the pattern on each side? Once isn't a leak. Five times in twenty is.

Three flavours of leak: personalized (their weakness plus your prepared response, your highest-ROI drills), surprise (their weakness, you'd need to learn a new line to punish it), and own (you slip up, they can punish you, study these to defend).

Show the math

The score combines six components: opportunity, severity, speed, readiness, confidence, and practice cost. The first five multiply together; practice cost divides the result, so cheap-to-learn leaks rise. LeakKind taxonomy: personalized, surprise, own.

The leak report names the SAN line into the position, their bad move, the engine's preferred move, and which of your repertoire branches gets you there. See it on /prepare →

Stage 5

Prepare: bots, positions, coaches.

Knowing the leaks is half the work. The other half is drilling them in conditions close to the real game.

Imitating bot

Play vs their style.

Maia-powered bots that play like a human at a given strength, not a stockfish-with-the- knob-turned-down. Casual mode is free; credit mode stakes ±1 credit per game and requires the bot rating to be at least your verified rating (so you can't farm credits by sparring 1000-rated bots).

Coming soon: bots fine-tuned to play like your specific opponent, not just a generic strength bot.

Play from a position

Drill the leak position.

Start the bot game from the exact position where the leak appears, so you're practising the move you'll actually need on the day. Position-vs-human sparring is on the waitlist. Join from the home pillar tile.

Coaches

Book a coach for the round.

Hand a coach your leak report and play through it before the game. Coaches see your student dashboard; you see their availability.