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/endPagefor partial pulls, or setmaxItemsto 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.