labthlete
Benchmark· 11 July 2026 · 6 min

What is a good marathon time? Percentiles from 6.4 million finishers

Real percentiles by sex and age from 6.48 million marathon results in the Labthlete dataset: what beats the median, what puts you in the top 10%, and how rare sub-3 really is.

AS
Andrea Scapini
Data scientist and founder of Labthlete

The median marathon finish across 6.48 million race results in the Labthlete dataset is 4:16:35. Breaking 3:43 beats 75% of finishers, breaking 3:17 beats 90%, and only 4.4% of marathoners go under three hours.

“Good” only means something against a real distribution. Most published averages come from a single race or a survey; the numbers below come from 6,484,071 marathon finishes in the Labthlete data lake, aggregated across public results from hundreds of races. Here is the whole field, in one table.

Marathon finish-time percentiles, all finishers
To beat this share of the fieldYou need
50% (the median)4:16:35
75%3:43:14
90%3:17:22
95%3:02:38
n = 6,484,071 finishes, 2:00 to 8:00 window. Labthlete data lake, updated July 2026.
The whole field in one curve
Finish time (x) vs the share of finishers you beat (y)
0%25%50%75%100%3:003:304:005:003:004:005:006:00
Labthlete dataset, n = 6,484,071 finishes

Landmark times, since that is how runners actually talk about the marathon: 4.4% of all finishers break 3 hours, 16.8% break 3:30, 38.7% break 4:00, and 76.4% break 5:00.

4.4%
of 6.48 million finishers break three hours

Men and women

Percentiles by sex
PercentileMen (4.26M)Women (2.16M)
Median4:05:284:36:37
Top 25%3:34:474:01:32
Top 10%3:10:063:37:38
Top 5%2:57:413:24:57
The sex gap is stable at roughly 30 minutes at the median and shrinks toward the front of the field.

By age, where it gets interesting

The common belief is that the marathon slows steadily with age. At the recreational level the data disagrees: median times barely move between 20 and 49. The fade only becomes visible from the 50s, and even a 60 year old man at the median finishes in 4:40.

Median finish barely moves until the 50s
Median marathon finish by age decade, men and women
4:004:305:0020-2930-3940-4950-5960-69
MenWomen
Labthlete dataset, n = 6.18M finishes with age
Men: median, top 25% and top 10% by age decade
AgeMedianTop 25%Top 10%n
20 to 294:00:203:30:073:02:44711k
30 to 393:58:523:29:093:04:131.23M
40 to 494:01:203:32:483:10:471.18M
50 to 594:16:523:45:253:23:39667k
60 to 694:40:254:03:383:41:47204k
Women: median, top 25% and top 10% by age decade
AgeMedianTop 25%Top 10%n
20 to 294:29:523:57:443:33:12502k
30 to 394:32:173:58:063:33:21630k
40 to 494:36:314:01:233:39:04547k
50 to 594:50:394:14:413:50:58263k
60 to 695:10:304:31:464:06:3566k
Age available for 6.18M of the 6.48M finishes.

How to use these numbers

Percentiles tell you where a time sits; they do not tell you what you can run. That depends on your thresholds, your durability and the course. The free Labthlete predictor simulates your race from those inputs, and the full app places your predicted time inside the actual finisher distribution of the race you are targeting.

Frequently asked questions

Is a 4 hour marathon good?

Yes. A 4:00:00 finish beats the median marathoner in our 6.48 million result dataset (median 4:16:35) and roughly 61% of all finishers. For women it beats 76% of the female field.

What marathon time puts you in the top 10%?

About 3:17 across all finishers. Split by sex, the top 10% starts around 3:10 for men and 3:38 for women.

How rare is a sub 3 hour marathon?

Only 4.4% of the 6.48 million finishes in the dataset broke three hours: 6.2% of men and 0.9% of women, about 1 in 110.

Does age change what counts as a good time?

Less than most people expect until the mid 40s: median times for men are nearly flat from 20 to 49 (4:00 to 4:01), then drift upward, reaching 4:40 for men in their 60s. The tables above give median, top 25% and top 10% for each decade.

Run the numbers on yourself

The free Labthlete predictor simulates your race from your own physiology: watts, thresholds, durability and the course. No account needed.

Try the predictor