OrbTop

CrossFit Games & Open Leaderboard Scraper

SPORTSSOCIAL MEDIA

CrossFit Games & Open Leaderboard Scraper

Scrape athlete leaderboard data from the official CrossFit API at c3po.crossfit.com. Covers all four competition types across all available years, divisions, and regions — returns per-athlete rank, score, affiliate, and per-workout scores.

What it scrapes

  • CrossFit Open — all years (2011–present), ~177,000 athletes per year per division
  • CrossFit Games — annual Games leaderboard
  • Quarterfinals — the stage between Open and Semifinals
  • Semifinals — regional Semifinals leaderboard
  • All divisions: Men, Women, Masters (35–39 through 60+), Teen Boys/Girls, Team
  • Both Rx and scaled leaderboards
  • All regions or filtered by specific region ID

Output fields

Field Description
competition Competition type: open, games, quarterfinals, semifinals
year Competition year (e.g. 2024)
division_id Division numeric ID
division_name Division name (e.g. "Men", "Women 35-39")
scaled True if scaled leaderboard
overall_rank Athlete's overall rank in this division
overall_score Athlete's overall score (raw points)
competitor_id CrossFit athlete ID
competitor_name Athlete full name
first_name / last_name Split name fields
gender M / F
age Athlete age
height Height with units (e.g. "172 cm")
weight Weight with units (e.g. "190 lb")
country_code ISO 2-letter country code
country_name Country of origin
region_id / region_name Region (e.g. "Europe", "North America")
affiliate_id / affiliate_name CrossFit box/affiliate
workout_scores JSON array of per-WOD scores: rank, scoreDisplay, scaled flag, breakdown, time
is_judged True if at least one workout was judged

Input

Parameter Type Default Description
competition string open Competition type: open, games, quarterfinals, semifinals
year integer 2024 Competition year (2011–2030)
division integer 1 Division ID (1=Men, 2=Women, 3-14=Masters, 17-20=Teens, 30=Team)
scaled boolean false Fetch scaled leaderboard instead of Rx
region integer 0 Region filter (0 = worldwide)
startPage integer 1 First page to fetch (50 athletes/page)
endPage integer Last page to fetch (omit for all pages)
maxItems integer 10 Cap on total rows returned

Division ID reference

ID Division
1 Men
2 Women
3 Men 35-39
4 Women 35-39
5 Men 40-44
6 Women 40-44
7 Men 45-49
8 Women 45-49
9 Men 50-54
10 Women 50-54
11 Men 55-59
12 Women 55-59
13 Men 60+
14 Women 60+
17 Teen Boys 16-17
18 Teen Girls 16-17
19 Teen Boys 14-15
20 Teen Girls 14-15
30 Team

Usage examples

Scrape the top 50 Men from the 2024 CrossFit Open (one page):

{
  "competition": "open",
  "year": 2024,
  "division": 1,
  "maxItems": 50
}

Scrape the full Women 35-39 division from the 2023 Open:

{
  "competition": "open",
  "year": 2023,
  "division": 4,
  "scaled": false
}

Scrape just pages 100-110 of the 2024 Open Men Rx (partial/resume pull):

{
  "competition": "open",
  "year": 2024,
  "division": 1,
  "startPage": 100,
  "endPage": 110
}

Scrape the CrossFit Games 2024 Men leaderboard:

{
  "competition": "games",
  "year": 2024,
  "division": 1
}

Notes

  • Large Open competitions have up to 3,545 pages (~177,000 athletes). Use startPage/endPage for partial pulls, or set maxItems to cap results.
  • The API is public — no authentication required, no proxy needed.
  • Rate limited to ~2 requests/second (polite default). Full Open divisions take approximately 30 minutes.
  • All data comes from the official CrossFit c3po.crossfit.com API — the same source powering the games.crossfit.com leaderboard site.