Lichess Player, Game & Tournament Scraper avatar

Lichess Player, Game & Tournament Scraper

Pricing

from $0.50 / 1,000 record scrapeds

Go to Apify Store
Lichess Player, Game & Tournament Scraper

Lichess Player, Game & Tournament Scraper

Scrape Lichess player profiles, full game histories (PGN + clocks + analysis), arena and Swiss tournament listings, and per-player rating history from Lichess's open REST API. No API key required. Supports bulk username input and all game variants.

Pricing

from $0.50 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 days ago

Last modified

Categories

Share

Scrape player profiles, full game histories (with PGN, clocks, and opening analysis), arena and Swiss tournament listings, and rating time-series from Lichess — the world's largest free, open-source chess server. No API key required.

What It Does

This actor connects directly to the Lichess REST API and returns structured data across four modes:

ModeWhat You Get
playerProfile data: ratings (bullet/blitz/rapid/classical/correspondence/puzzle), game counts, play time, country, patron status
gamesFull game history: PGN, moves in UCI notation, clocks, opening ECO + name, player ratings, variant, speed
tournamentsActive arena and Swiss tournaments: clock controls, variant, player count, winner, start time
rating_historyRating time-series: full per-performance-category rating history as a JSON array

Why Lichess

Lichess publishes a fully open, anonymous-accessible API with no rate-key requirement and NDJSON streaming for bulk game downloads. It is the canonical open data source for chess research — powering cheat-detection models, opening-theory analysis, and academic chess datasets. Over 5 billion games are available.

Input

FieldTypeDescription
modestring (required)player, games, tournaments, or rating_history
usernamesstring[]One or more Lichess usernames (required for player, games, rating_history modes)
maxItemsintegerMax records to return per username. Default: 10
ratedbooleanGames mode: return only rated games
perfTypestringGames mode: filter by speed/variant (e.g. blitz, rapid, chess960)

Example Input — Player Profiles

{
"mode": "player",
"usernames": ["thibault", "DrNykterstein", "Hikaru"],
"maxItems": 10
}

Example Input — Game History

{
"mode": "games",
"usernames": ["DrNykterstein"],
"maxItems": 50,
"rated": true,
"perfType": "blitz"
}

Example Input — Tournaments

{
"mode": "tournaments",
"maxItems": 20
}

Output

Each record has a record_type field indicating its type: player, game, tournament, or rating_history.

Player Record

{
"record_type": "player",
"username": "DrNykterstein",
"title": "GM",
"rating_bullet": 3288,
"rating_blitz": 3212,
"rating_rapid": 3001,
"games_count": 85000,
"wins": 52000,
"losses": 18000,
"draws": 15000,
"country": "NO",
"patron": false,
"verified": false
}

Game Record

{
"record_type": "game",
"game_id": "q7ZvsdUF",
"rated": true,
"variant": "standard",
"speed": "blitz",
"status": "resign",
"winner": "white",
"white_user": "DrNykterstein",
"white_rating": 3190,
"black_user": "Hikaru",
"black_rating": 3120,
"opening_eco": "B12",
"opening_name": "Caro-Kann Defense",
"moves": "e2e4 c7c6 d2d4 ...",
"pgn": "1. e4 c6 2. d4 ...",
"clock_initial": 180,
"clock_increment": 0
}

Tournament Record

{
"record_type": "tournament",
"tournament_id": "mfZoVuwM",
"tournament_name": "Hourly Blitz Arena",
"tournament_system": "arena",
"tournament_clock": "3+0",
"tournament_variant": "blitz",
"tournament_rated": true,
"tournament_nb_players": 217,
"tournament_winner": "penguingim1"
}

Use Cases

  • Chess research: Download game databases for machine learning, opening theory, or statistical analysis
  • Player tracking: Monitor rating trends and performance across time controls
  • Tournament analytics: Track active tournaments, player counts, and results
  • Comparative analysis: Benchmark player profiles across the Lichess community

Rate Limits

Lichess rate-limits anonymous API access. This actor automatically handles 429 responses with exponential backoff and adds a 500ms courtesy delay between requests.

Notes

  • No API key or Lichess account required for public data
  • Games returned newest-first
  • rating_history records contain the full time-series as a JSON string
  • The moves field uses UCI notation (e.g. e2e4); PGN uses standard algebraic notation

Further reading: Streaming Charts and Box Office Data: Spotify, Netflix, Maoyan & More