Tour de France Rankings & Stages Scraper avatar

Tour de France Rankings & Stages Scraper

Pricing

from $1.00 / 1,000 record scrapeds

Go to Apify Store
Tour de France Rankings & Stages Scraper

Tour de France Rankings & Stages Scraper

Scrapes official Tour de France jersey rankings (GC, points, mountains, youth, team) and stage metadata (start/finish cities, distance, elevation, type) from letour.fr. Covers all 21 stages — ideal for fantasy cycling, sports analytics, and content pipelines during the July race window.

Pricing

from $1.00 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

0

Monthly active users

13 days ago

Last modified

Categories

Share

Scrapes official Tour de France jersey rankings (GC, points, mountains, youth, and team) plus stage metadata (start/finish cities, distance, elevation, stage type) directly from letour.fr. Covers all 21 stages — updated daily during the July race window.

What does it do?

Each run retrieves:

  • Stage metadata — start/finish cities, total distance, elevation gain, and stage classification (Flat, Hilly, Mountain, Individual Time Trial, Team Time Trial)
  • Jersey rankings for each stage across up to 7 classification types: General (GC yellow), Points (green), Mountains (polka-dot), Youth (white), Team, Combative, and Lanterne Rouge
  • Rider details — position, bib number, name, country (ISO 3-letter code), team name, accumulated time, time gap to leader, and points

Data comes from the official site, covering every completed stage.

Why use this instead of scraping ProCyclingStats?

ProCyclingStats is the de facto third-party cycling data source, but it is bot-protected. letour.fr publishes the same official rankings and reads cleanly, which keeps this actor fast and cheap.

Input

FieldTypeDefaultDescription
yearinteger2026Tour de France year to scrape
stageNumbersarray of integersall 21 stagesFilter to specific stages, e.g. [1, 2, 21]
rankingTypesarray of stringsall typesWhich jersey rankings to scrape: general, points, mountains, youth, team, combative, lanterne_rouge
maxItemsinteger0 (unlimited)Hard cap on total records saved

Output dataset fields

FieldTypeDescription
yearintegerTour de France year
stage_numberintegerStage number (1–21)
stage_typestringFlat / Hilly / Mountain / Individual Time Trial / Team Time Trial
start_citystringStage start city
finish_citystringStage finish city
distance_kmnumberStage distance in km
elevation_gain_mintegerTotal elevation gain in metres
ranking_typestringgeneral / points / mountains / youth / team / combative / lanterne_rouge
positionintegerRider position in the ranking
bibintegerRider bib number
rider_namestringRider abbreviated name (e.g. "T. POGACAR")
rider_countrystringCountry code (ISO 3166-1 alpha-3, e.g. "SLO")
team_namestringFull team name
finish_timestringAccumulated race time for general/youth/team rankings
time_gapstringTime gap to race leader
pointsintegerPoints total for green/mountains rankings
sourcestringSource URL of the ranking data

Sample output (Stage 21 GC, 2025)

{
"year": 2026,
"stage_number": 21,
"stage_type": "Flat",
"start_city": "Thoiry",
"finish_city": "Paris Champs-Élysées",
"distance_km": 133,
"elevation_gain_m": 1000,
"ranking_type": "general",
"position": 1,
"bib": 1,
"rider_name": "T. POGACAR",
"rider_country": "SLO",
"team_name": "UAE TEAM EMIRATES XRG",
"finish_time": "76h 00' 32''",
"time_gap": null,
"points": null,
"source": "https://www.letour.fr/en/ajax/ranking/21/itg/2b9.../subtab"
}

Usage tips

  • During the race window (July 4–26, 2026): Run daily to capture updated standings after each stage finishes. Stage 1–20 rankings update that evening; Stage 21 (Paris) closes the tour.
  • Historical data: Stage results from the 2025 Tour are accessible at the same URL paths.
  • Future stages: Ranking tabs are only populated for completed stages. Running the scraper on a future stage returns 0 results for that stage — no error is thrown.
  • Scaling: For a full run (21 stages × 5 jersey types = ~105 ranking tables × ~160 riders = ~16,800 rows), a single run completes in under 3 minutes at the default concurrency of 5.

Technical notes

The actor uses a 4-level hierarchical crawl:

  1. /en/overall-route → discovers all stage links
  2. /en/stage-N → extracts stage metadata (city names from page title, distance/type/elevation from stageHeader__infos blocks)
  3. /en/rankings/stage-N → discovers AJAX subtab URLs (hash-keyed, rotated per year)
  4. /en/ajax/ranking/N/<type>/<hash>/subtab → parses rider rows from the rankings table HTML