Methodology

Difficulty Score: how it works

Our score is transparent, reproducible and runner-focused. Here's exactly how we calculate it.

The headline score

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.

The four scored components

Elevation (44%)
Gradient-weighted elevation gain across the course. Steeper segments count for more than equally-long shallow climbs. Flat courses like Berlin score below 2; Boston scores above 6. A downhill damage term is also applied — courses with significant descents (like New York's bridges) are harder on the quads even if the total climbing is low. That term is discounted on courses with a strong net downhill (e.g. Salt Lake City, CIM), since much of that descent converts directly into a faster time rather than being unrewarded pounding.
Hill placement (22%)
Where the climbing happens. Hills in the last third cost far more than hills at the start — Boston's Heartbreak Hill at mile 20 is the canonical example. A course with all its climbing front-loaded scores lower than one that saves the pain for the end.
Weather (22%)
Based on 10-year average race-day conditions. The optimal marathon temperature is around 7°C — cold below that barely costs time, but heat above it penalises aggressively (and non-linearly). Humidity, dew point, wind and rain all add to the temperature base score.
Turns & course shape (11%)
Multi-lap courses with tight corners cost seconds per kilometre. Point-to-point courses with long straight stretches are fastest.

Altitude points

Altitude is not scored as a fifth component and isn't applied as a multiplier on the base score either — it's added as difficulty points on top of it. The points curve is calibrated to how recreational runners actually experience elevation, not just elite-athlete VO2max-loss data: cities in the 1,500–2,000m "mile-high" band (Denver, Albuquerque, Nairobi, Johannesburg) register a real difficulty bump even on an otherwise flat, easy course, ramping further for genuinely high-altitude races. Most road marathons are at or near sea level and receive 0 points.

A race like Mexico City (≈2,240m) receives roughly +4.8 points, added directly to its base score rather than scaling it — so altitude contributes real difficulty regardless of how flat or hilly the underlying course is.

What the score doesn't include

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.

Updates and feedback

The methodology is versioned. The current version is v1.2. Changes from v1.1: altitude moved back from a VO2max-loss multiplier to additive points, recalibrated so "mile-high" cities (1,500–2,000m) register a meaningful bump rather than needing to reach ~2,000m+ before the model responds — the multiplier had collapsed to almost nothing on easy, flat courses at that altitude; the weather ceiling was widened so the hottest, most humid races differentiate from each other instead of several capping at 10/10 together; the downhill damage term is now discounted on courses with a strong net downhill. 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.

See the scores

Browse all marathons by difficulty →