About Club Ladder and how the numbers work
Club Ladder is a small site run by one person, for chess coaches and club organizers whose players are spread across Lichess and chess.com.
Who it's for
A volunteer coach with 8 to 60 students, a school club organizer, a private coach with a few groups. They want one page that answers who is playing, who is improving, and by how much, without asking each student for screenshots. Parents want the same answer for one child, in plain words.
Where the data comes from
- Lichess: the public API. Each player's ratings and game counts (
/api/user), their games (/api/games/user, results and ratings only) and, where Lichess shares it, their rating history. - chess.com: the public API. Current ratings and win/loss/draw records (
/pub/player/.../stats) and the monthly game archives. chess.com has no rating history API.
Right now I read 656 accounts (332 on Lichess, 324 on chess.com) and hold 18,253 daily records going back to Oct 31, 2026.
What runs behind it
A job runs every 10 minutes. Each account has a tier. Players who played in the last day, or whose ladder someone has opened in the last hour, are read about every 10 minutes; players active in the last week every hour and a half; the rest daily or weekly. The job takes the most wanted first, up to one Lichess batch of 300 accounts, 10 single Lichess reads and 40 chess.com reads a run. When you open a ladder with stale numbers you see the stored standings at once while I read the stale players in the background, and "Refresh now" reads them on request, once every 2 minutes per ladder. chess.com requests go one at a time because parallel requests get refused. After a "slow down" answer from either site I wait a full minute. An account that's in three ladders is read once. A failed read never counts as zero games: it leaves the old numbers alone and tries again later.
How the numbers are computed
- Rating
- The latest rating the site reports in that pool. A question mark means the site still calls it provisional.
- Change
- The rating now minus the last rating before the period started. If I have no rating from before the period (the player joined during it, or started that time control), it counts from the first rating inside the period and shows an asterisk.
- Games
- Rated games finished in the period, from the difference between two readings of each account's game counters, plus the games I read when the player joined. Before that point the count is unknown and shows a question mark, never a zero.
- Streak
- Days in a row, up to today, with at least one rated game on either site.
- Most improved
- The biggest gain in a single pool with at least 5 rated games there that week, Monday to Sunday UTC.
- Benchmarks
- Every tracked account that played in a pool over the last 30 days, grouped into 200-point bands by the rating they started with. A band shows once it has 20 players.
- Lichess vs chess.com
- People who link both accounts, per time control, when both ratings are settled and both pools have 20+ games. Bands under 10 people are hidden. A least-squares line gives the conversion used by the calculator and by pairing suggestions.
Limits
- Only rated online games on Lichess and chess.com count. Over-the-board games, ChessKid and other sites don't.
- A player who has not played in a week can be a day behind, or a week if silent for a month. Active players are read every 10 minutes.
- chess.com history before a player joins comes only from their last month or two of game archives.
- Either site can change or limit its API. If that happens I'll say so on the changelog.
Why there's a price at all
Reading thousands of accounts every few hours costs little on Cloudflare, but not nothing, and the site needs someone answering email. The free ladder covers a small club for good. The Club pass is one payment so nobody has to remember to cancel.
Club Ladder isn't affiliated with Lichess, chess.com, ChessKid or any club. Write to me with questions.