Methodology
Our score is transparent, reproducible and runner-focused. Here's exactly how we calculate it.
Every marathon on MarathonRoutes is given a difficulty score between 0 and 10, where 0 is pancake-flat and cool, and 10 is a brutal mountain marathon in the heat. The score is a weighted average of five components that account for everything that actually slows a runner down.
Altitude is not scored as a fifth component — it's applied as a multiplier on the base score. Based on the Wehrlin & Hallén (2006) model, runners lose approximately 6.3% of aerobic capacity for every 1,000m above 1,500m. This loss amplifies every other difficulty factor: the same hill or the same warm day is harder to manage when you're running at 85% of your sea-level capacity. Most road marathons are at sea level and receive a multiplier of 1.0.
A race like Mexico City (≈2,240m) receives a multiplier of roughly ×1.65, meaning its base difficulty score is scaled up by 65% to account for the aerobic impact.
Crowd support, aesthetics, organisational quality, cutoff generosity, and logistics all matter — but they don't affect how hard it is to physically complete the race. We track those separately in the race page so you can weigh them yourself.
The score is also not a predictor of your personal finish time. It's a relative ranking of courses. Your own fitness, training and pacing decide your actual result.
The methodology is versioned. The current version is v1.1. Changes from v1.0: altitude moved from an additive component to a VO2max-loss multiplier; elevation scoring now uses gradient-weighted gain from GPS data plus a downhill damage term; the weather curve is now asymmetric (heat penalises far more than cold). Every score is rebuilt automatically when the methodology changes. If you think a particular race's score is off, let us know — we take runner feedback seriously.