Home › Methodology
How the salary estimates are made
No team publishes what it pays its riders. This site estimates it from three public things — team budgets, results, and the handful of salaries that get reported — with one method applied to everyone, published in full so it can be argued with. Model v0.1 (11 Sep 2026).
The short version
- Each team spends about 45% of its budget on riders' wages (UCI figures for 2024: €226.5M of rider salaries across 18 teams against ~€500M of budgets). We take our budget estimate for each team and multiply by 0.45 to get the team's wage pool.
- Reported salaries are fixed. 17 riders have a base salary reported by Gazzetta dello Sport or Cyclingnews in the last 12 months. We use those numbers as-is and subtract them from the pool.
- The rest of the pool is split among the other riders in proportion to a value score, with an age adjustment and a wage floor.
- Half of each rider's estimate comes from this within-team split, half from the same split run across the whole WorldTour — so a team leader on a small team isn't over-priced just because his team-mates score little.
The value score
VP = 0.6 × PCS points 2026 + 0.4 × (career PCS points ÷ pro seasons), where pro seasons = age − 19 (minimum 1). Blending this year with a career average keeps an injured or quiet star (Bernal, Roglič) from being priced like a domestique for one bad season.
Weight = VP1.15 × age factor. Salaries are more top-heavy than points, hence the exponent above 1. Age factor: under 23 → 0.75 (first and second contracts are cheap), 23–25 → 0.9, 26–32 → 1.0, 33–35 → 0.9, 36+ → 0.8.
Floors: €40k for riders under 23 (the UCI neo-pro minimum is €35,721 employed / €58,582 self-employed), €60k for others, €90k for established pros aged 25+ with at least 1,500 career points. Riders under 23 without a reported salary are capped at €2.0M. Stagiaires are excluded.
Calibration against what the UCI publishes
| This model | UCI / Cyclingnews | |
|---|---|---|
| Riders | 527 | ~555 (20 teams) |
| Mean salary | €517k | ≈ €500k blended (self-employed €654k, employed €384k) |
| Median salary | €283k | €216k employed / €350k self-employed |
| Riders over €1M | 63 | ~70 |
| Riders over €2M | 25 | ~35 |
| Total rider wages (18 teams) | €272.4M | €226.5M (2024) → ≈ €270–290M implied for 2026 |
What the estimate is and isn't
- It is a base salary for the 2026 season in euros, gross. It excludes bonuses (a Grand Tour stage is typically €20–100k, a Monument €50–500k), prize money, image rights and personal sponsors. For a star, total income can be 30–50% above base.
- Typical error on one rider is ±40%. The method is much better at the shape of a team's wage bill than at any individual inside it. Treat single-rider figures as a band, not a number.
- Team budgets are themselves journalistic estimates with ranges (see Sources). A team whose budget is off by 20% has every unreported salary off by 20%.
- PCS points reward winners; a super-domestique's value to his team is under-measured here. That's why the "weakest value" ranking needs reading, not just sorting.
- Employed vs self-employed status (43% / 57% of the peloton), tax residence (Monaco, Andorra) and the wildly different cost of a neo-pro versus an established domestique are only partially captured.
Agencies
Agency attributions come from the agencies' own published rosters (FirstCycling's agency pages compile most of them), from agency websites, and from press reports naming a rider's agent. Each attribution carries a confidence (high = agency's own roster; medium = press report; low = single indirect source) and a source, shown on the rider page. 170 riders are unknown: not found on any published roster. "Family" and "self-represented" are real answers.
Contracts
Contract end years come from ProCyclingStats as of 9 September 2026, corrected with official team announcements where we found them (the source is linked on the rider page). "No contract for 2027" means PCS lists the current deal ending in 2026 and we found no announced extension — it does not mean the rider is leaving.
Reproduce it
The model is one Python script and one CSV. Both are in the data download. Run it, change an assumption, tell us where we're wrong: corrections are credited in the changelog.