Read the full writeup →
The Heat TaxBoston Marathon 1940 to 2019

Above 55°F, each degree costs about 0.4% of your time

I lined up 80 Boston Marathons with the weather on the course that day. Below about 55°F the temperature makes no measurable difference. Above it the median finisher loses 0.42% of their time per °F, about a minute at 3:47, and the share is similar from the front of the race to the back.

Men's 25th place

Hover or tab to a point for its year.

Each point is one race: how far its time sat above or below the field's long-run trend, against the temperature on the course (Open-Meteo, ERA5). The dashed line is the model, flat to 55°F and rising after. Values from tables/series_*.csv. Price your own race day from a live forecast.
0.42%
Of finish time per °F above 55°F for the median runner (90% bootstrap interval 0.20 to 0.52), about 0.95 minutes at 3:47.
0.29–0.46%
The same slope for nine positions in the field, from the 10th man (2:13) to the 90th percentile (5:01). Slower runners lose more minutes.
0
Extra skill from dew point or a heat index over plain temperature, in leave-one-year-out cross-validation.
0.1%
Per mph of headwind at the front of the race. For the rest of the field the wind estimate was too noisy to use.
2.26%
Average error on the five held-out races (2015 to 2019), against 2.15% for a guess with no weather. Right on 2015 and 2016, badly wrong on cold, wet, windy 2018.

October 2026 upgrade. The June 2026 version of this page used 14 races (2001 to 2014) and reported 1.03 minutes per °F on the median (r = 0.86) and 31 minutes from 50°F to 80°F. Part of that came from gun times in the hot years; the new figure is 0.95 minutes per °F above 55°F and nothing below it, or about 25 minutes from 50°F to 80°F. The write-up goes through the change.

How it was done

Results for 1940 to 2019 come from adrian3/Boston-Marathon-Data-Project, cross-checked against llimllib/bostonmarathon for 2001 to 2014. Weather is hourly ERA5 from the Open-Meteo archive at three points on the course, over the race hours of each year. Each of nine series (men's 10th, 25th, 100th and 1000th place; field percentiles 10 to 90) is fitted as log time on a spline trend in the year plus a heat term, with a bootstrap over race years. 2015 to 2019 were held out of everything. The model ships as model/heat_model.json with a small Python loader, heat_model.py.

Limitations

Only two whole-field training races were above 70°F (2004 and 2012), so those intervals are wide. The model has no term for cold rain. The weather is a gridded reanalysis rather than a thermometer on the road, and the trend in the year only soaks up slow changes in who runs Boston.