procyclingstats.com APIprocyclingstats.com ↗
Extract race results, team lists, and all-time victory rankings from ProCyclingStats. 3 endpoints covering stage races, one-day classics, and pro cycling teams.
curl -X GET 'https://api.parse.bot/scraper/cf66e8e3-c65a-4b3e-b418-c826000f01c2/get_race_results?url=race%2Ftour-de-france%2F2024%2Fstage-1' \ -H 'X-API-Key: $PARSE_API_KEY'
Extract detailed race metadata and results for a specific event (stage or one-day race). Returns race information such as date, distance, departure/arrival cities, and a full list of finishing positions with rider names, teams, times, and UCI points.
| Param | Type | Description |
|---|---|---|
| urlrequired | string | The race URL path on ProCyclingStats (e.g. 'race/tour-de-france/2024/stage-1' or 'race/milano-sanremo/2024'). |
{
"type": "object",
"fields": {
"results": "array of finishing positions, each with rank, rider_name, rider_url, team_name, uci_points, time, and resolved_time",
"metadata": "object containing race details such as date, distance, departure, arrival, classification, profile_score, avg_speed_winner, and race_name"
},
"sample": {
"data": {
"results": [
{
"rank": "1",
"time": "5:07:22",
"rider_url": "https://www.procyclingstats.com/rider/romain-bardet",
"team_name": "Team dsm-firmenich PostNL",
"rider_name": "Bardet Romain",
"uci_points": "210",
"resolved_time": "5:07:22"
}
],
"metadata": {
"date": "29 June 2024",
"arrival": "Rimini",
"distance": "206 km",
"departure": "Firenze",
"race_name": "2024 » 111th Tour de France (2.UWT)",
"profile_score": "176",
"classification": "2.UWT",
"avg_speed_winner": "40.213 km/h"
}
},
"status": "success"
}
}About the procyclingstats.com API
The ProCyclingStats API provides 3 endpoints for accessing professional cycling data including detailed race results, team rosters by year, and all-time career victory rankings. The get_race_results endpoint returns a full finishing list with rank, rider name, team, time, and UCI points for any stage or one-day race. Teams and rider statistics are available through the remaining two endpoints.
Race Results
The get_race_results endpoint accepts a url parameter pointing to any race path on ProCyclingStats — for example race/tour-de-france/2024/stage-1 for a stage or race/milano-sanremo/2024 for a one-day classic. The response includes a metadata object with fields such as date, distance, departure, arrival, classification, profile_score, and avg_speed_winner. The results array contains one entry per finisher, each carrying rank, rider_name, rider_url, team_name, uci_points, time, and resolved_time (elapsed time converted to a comparable format).
Teams and Victory Rankings
The get_all_teams endpoint accepts an optional year parameter (e.g. '2024') and returns an array of WorldTour and ProTeam entries, each with team_name and a two-letter country code. This is useful for building year-over-year team directories or filtering results by nation.
The get_victory_ranking endpoint takes no inputs and returns the top 100 riders ranked by all-time career victory count. Each entry includes rank, rider_name, and victories. The list is sorted descending by victory count and reflects cumulative career totals, not a single-season view.
- Build a live race tracker that displays finishing positions, times, and UCI points for each stage of a Grand Tour.
- Populate a cycling statistics dashboard with all-time career victory leaders using the
get_victory_rankingresponse fields. - Generate year-over-year team composition reports by querying
get_all_teamsfor multiple seasons. - Filter race results by team to analyse a squad's collective performance across a monument classic.
- Map departure and arrival cities from race metadata to visualise route geography across a season.
- Compare
profile_scoreandavg_speed_winnerfields across stages to identify the hardest races in a calendar year. - Build a UCI points tracker by aggregating
uci_pointsper rider across multiple race result responses.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ProCyclingStats have an official developer API?+
What does the `get_race_results` endpoint return for time fields, and how does `resolved_time` differ from `time`?+
time field contains the raw time string as recorded in the results (e.g. a gap like '+0:32' for riders behind the winner). The resolved_time field converts that into an absolute elapsed time, making it easier to sort or compare finishers without manually parsing gap notation.