Discover/ProCyclingStats API
live

ProCyclingStats APIprocyclingstats.com

Extract race results, startlists, rider profiles, team rosters, and classification standings from ProCyclingStats via 14 structured endpoints.

This API takes change requests — .
Endpoint health
verified 1d ago
get_victory_ranking
get_race_results
get_race_stages
get_top_competitors
get_rider_recent_results
14/14 passing latest checkself-healing
Endpoints
14
Updated
15d ago

What is the ProCyclingStats API?

The ProCyclingStats API exposes 14 endpoints covering professional road cycling data including race results, rider profiles, team rosters, and multi-classification standings. The get_race_results endpoint returns a full finisher list with rank, time, UCI points, and post-stage jersey leaders for any stage or one-day race. Other endpoints cover startlist specialties, form scores, stage route profiles, and per-rider results broken down by race tier over a 24-month window.

This call costs2 credits / call— charged only on success
Try it
The race URL path on ProCyclingStats (e.g. 'race/tour-de-france/2024/stage-1' or 'race/milano-sanremo/2024').
api.parse.bot/scraper/cf66e8e3-c65a-4b3e-b418-c826000f01c2/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace procyclingstats-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: ProCyclingStats SDK — bounded, re-runnable; every call capped."""
from parse_apis.ProCyclingStats_API import ProCyclingStats, ParseError

client = ProCyclingStats()

# Get a rider's profile including their numeric ID
profile = client.rider_profiles.get(url="rider/tadej-pogacar")
print(profile.id, profile.rider_name, profile.nationality, profile.current_team, profile.career_victories)

# Get team roster with team numeric ID
roster = client.team_rosters.get(url="team/alpecin-deceuninck-2024")
print(roster.id)
for rider in roster.riders[:3]:
    print(rider.rider_name, rider.nationality, rider.pcs_ranking, rider.points)

# Get recent race results for a rider
for result in client.recent_results.list(url="rider/jonathan-milan", limit=3):
    print(result.date, result.race_name, result.stage, result.position, result.pcs_points)

# Get GC standings for Tour de France 2024
standings = client.standings_results.get(url="race/tour-de-france/2024/gc")
print(standings.metadata.classification_type)
for entry in standings.standings[:3]:
    print(entry.rank, entry.rider_name, entry.time)

# List all professional teams for 2024
for team in client.teams.list(year="2024", limit=3):
    print(team.team_name, team.country)

# Typed error handling
try:
    bad = client.rider_profiles.get(url="rider/nonexistent-rider-xyz")
    print(bad.rider_name)
except ParseError as e:
    print(f"error: {e.code}")

print("exercised: rider_profiles.get / team_rosters.get / recent_results.list / standings_results.get / teams.list")
All endpoints · 14 totalmissing one? ·

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, stage type, elevation gain, profile/map image URLs, jersey leader classifications after the stage, and a full list of finishing positions with rider names, teams, times, and UCI points. The url parameter is the path portion on ProCyclingStats (e.g. 'race/tour-de-france/2024/stage-1' or 'race/milano-sanremo/2024'). Metadata fields vary by race type; results are ordered by finishing position.

Input
ParamTypeDescription
urlrequiredstringThe race URL path on ProCyclingStats (e.g. 'race/tour-de-france/2024/stage-1' or 'race/milano-sanremo/2024').
Response
{
  "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, race_name, stage_type, elevation, profile_image_url, and route_map_url",
    "classifications": "object with gc_leader, points_leader, kom_leader, youth_leader (each with rider_name and rider_url), team_winner (string or null), combative_rider (object with rider_name and rider_url, or null), and best_teammate (object with rider_name and rider_url, or null)"
  },
  "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"
        },
        {
          "rank": "2",
          "time": ",,",
          "rider_url": "https://www.procyclingstats.com/rider/frank-van-den-broek",
          "team_name": "Team dsm-firmenich PostNL",
          "rider_name": "van den Broek Frank",
          "uci_points": "150",
          "resolved_time": "5:07:22"
        }
      ],
      "metadata": {
        "date": "29 June 2024",
        "arrival": "Rimini",
        "distance": "206 km",
        "departure": "Firenze",
        "race_name": "2024   »    111thTour de France(2.UWT)",
        "start_time": "12:40",
        "profile_score": "176",
        "classification": "2.UWT",
        "avg_speed_winner": "40.213 km/h"
      }
    },
    "status": "success"
  }
}

About the ProCyclingStats API

Race and Classification Data

get_race_results accepts a url path such as race/tour-de-france/2024/stage-1 and returns a results array (rank, rider_name, rider_url, team_name, time, resolved_time, uci_points) alongside a metadata object with date, distance, departure, arrival, profile_score, avg_speed_winner, and elevation gain. A classifications object delivers the GC, points, KOM, and youth jersey leaders by name and URL after that stage. get_race_standings targets classification pages (e.g. race/tour-de-france/2024/gc) and returns ordered standings with time gaps, team names, and UCI points for GC, points, KOM, and youth competitions.

Startlist and Pre-Race Intelligence

get_race_riders returns the full startlist with rider_name, rider_url, team_name, team_url, nationality, and bib number. get_startlist_specialties merges six PCS specialty tables — GC, Time Trial, Sprint, One Day Races, Climber, Hills — into a single record per rider, with 0 assigned where a rider is unranked in a category. get_startlist_form combines form scores with current PCS ranking positions across all startlist riders, not just the visible top rows. get_top_competitors returns each rider's aggregated PCS score for the specific race. get_race_stages parses the stage profiles path and returns per-stage distance, elevation, profile scores, and time trial flags.

Rider and Team Profiles

get_rider_profile returns a rider's numeric PCS ID, photo URL, nationality, date of birth (ISO YYYY-MM-DD), current team, PCS ranking, and career victories count given a path like rider/tadej-pogacar. get_rider_recent_results returns the last 20 actual race or stage results — excluding GC/points/KOM standings — with date, race name, stage label, finishing position, and distance. get_rider_results_by_tier breaks PCS points and win counts over the trailing 24 months into seven tiers including Grand Tour overall, one-day races, and time trials. get_rider_upcoming_races reads a rider's schedule and detects active stage races to surface remaining stages, each with date, start time, and race category.

get_team_riders accepts a team path such as team/uae-team-emirates-xrg-2026 and returns rider names, profile URLs, nationalities, PCS world rankings, and accumulated PCS points for that season roster. get_all_teams lists all UCI WorldTeam and ProTeam squads for a given year with team name and two-letter country code. get_victory_ranking returns the top 100 riders ranked by all-time career victories with no required input parameters.

Reliability & maintenanceVerified

The ProCyclingStats API is a managed, monitored endpoint for procyclingstats.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when procyclingstats.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official procyclingstats.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
1d ago
Latest check
14/14 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a live Tour de France tracker showing stage results, jersey leaders, and GC standings updated after each stage.
  • Aggregate per-rider specialty scores from get_startlist_specialties to generate pre-race power rankings for a given event.
  • Produce a rider comparison tool using get_rider_results_by_tier to contrast Grand Tour vs. one-day race performance over 24 months.
  • Generate team season reports by combining get_team_riders roster data with individual rider career victories from get_rider_profile.
  • Monitor a rider's upcoming schedule via get_rider_upcoming_races to power a race-alert notification service.
  • Rank the all-time greatest sprinters or climbers by filtering get_victory_ranking output against specialty data from startlist endpoints.
  • Display startlist bib numbers, nationalities, and team affiliations for race programs using get_race_riders.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does ProCyclingStats have an official developer API?+
ProCyclingStats does not publish an official public developer API. This Parse API provides structured access to the data available on procyclingstats.com.
What does `get_race_results` return beyond just the finishing order?+
get_race_results returns three objects: a results array with rank, rider name and URL, team name, time, resolved_time, and UCI points; a metadata object with race date, distance, departure and arrival cities, classification, profile score, and average winner speed; and a classifications object identifying the GC, points, KOM, and youth jersey leaders by name and URL after that stage.
Does the API cover historical race data beyond the current season?+
Yes. Endpoints that accept a url parameter work with any valid ProCyclingStats path, including past seasons. For example, race/tour-de-france/2019/stage-20 is a valid input to get_race_results. get_all_teams also accepts historical year values.
Does the API return rider contract details or transfer information?+
Not currently. get_rider_profile returns current team, nationality, date of birth, PCS ranking, and career victories, but contract end dates and transfer history are not included. You can fork this API on Parse and revise it to add an endpoint targeting rider contract pages on ProCyclingStats.
Does `get_rider_upcoming_races` include races more than one season ahead?+
The endpoint reads the rider's published schedule on ProCyclingStats and surfaces remaining stages of any currently running stage race alongside listed future events. Races that have not yet been added to a rider's ProCyclingStats calendar will not appear. You can fork the API on Parse and revise it to poll team-level schedule pages as a supplementary data source.
Page content last updated . Spec covers 14 endpoints from procyclingstats.com.
Related APIs in SportsSee all →
cyclocross24.com API
Track cyclocross races and riders with access to current race calendars, detailed results, athlete profiles, and UCI rankings all in one place. Search for specific riders, monitor live standings, and stay updated on competitive rankings throughout the season.
data.fei.org API
Search and explore detailed information about international equestrian sports, including horses, riders, competition results, rankings, and show schedules from the FEI database. Look up specific athletes and horses, browse upcoming events by venue, and track performance across national federations.
racecenter.letour.fr API
Track live Tour de France race updates by accessing real-time rider positions, detailed stage information, and current general classification standings. Monitor how your favorite cyclists are performing throughout each stage and their overall ranking in the competition.
driverdb.com API
Access driver performance data, detailed career statistics, and race results across all major motorsports series. Retrieve championship standings, team information, and head-to-head driver comparisons, and browse comprehensive profiles, race calendars, and circuit details.
flashscore.com API
Search teams and competitions, pull daily fixtures and live scores, and retrieve match details including events, statistics, and league standings from FlashScore.
racingpost.com API
Access comprehensive horse racing data from Racing Post, including daily racecards, meeting schedules, race results, and detailed horse profiles with form history, stats, and pedigree.
worldsnowboardtour.com API
Access World Snowboarding rankings, athlete profiles, and competition results across all disciplines. Browse the event calendar, retrieve detailed schedules and outcomes, and explore rider statistics from the professional snowboarding circuit.
racing.hkjc.com API
Access comprehensive horse racing data from the Hong Kong Jockey Club. Retrieve race results, detailed horse profiles including pedigree and form records, jockey and trainer season rankings, upcoming race meeting fixtures, and horse search by name.