Wind data on Strava
Explainer · last updated 20 August 2026
Two riders post the same 60 km at the same average speed. One had the wind behind them for an hour; the other spent half the ride pushing into it for the same number on the screen. Strava shows you nothing that tells them apart. Here is what wind actually does to a ride, how headwind and tailwind are worked out from a GPS track, and how to get those numbers onto every activity automatically.
Does Strava show wind data?
No. Strava keeps your GPS track, speed, elevation, power and heart rate, and it will happily compute grade-adjusted pace or a power curve from them — but nowhere on an activity page does it show wind speed, wind direction, or how much of your ride was into the wind. Weather simply is not part of what Strava displays.
That leaves a real gap. Wind is, on flat terrain, the single largest variable between two otherwise identical rides — bigger than tyre choice, bigger than most of what riders do obsess over. It is also the one condition that never appears in the ride log, so a hard day into a gale is remembered as a slow day.
Headwind, sidewind and tailwind: the split
"It was windy" is not a measurement. A useful one starts from the fact that wind only matters relative to the direction you were travelling, which changes at every turn of the route. So the ride gets broken into short segments:
- the raw GPS is smoothed twice — a narrow window to keep sharp turns sharp, a wider one for stable movement vectors;
- the track is cut into stretches of roughly constant bearing — split wherever the bearing turns by 15° or more and wherever the GPS starts drifting, with long straights split again over time, because the wind itself changes during a ride;
- stretches too short to trust are dropped — under 3 GPS points, 3 seconds, 15 metres, or below 0.5 m/s, which throws away stops, lights and noise;
- each surviving stretch is matched against historical wind for that time and place (Open-Meteo's ERA5 reanalysis — measured conditions, not a forecast);
- the wind vector is projected onto your direction of travel, and the stretch is filed as head, side or tail by the angle θ between the two;
- the shares are averaged weighted by time, so ten minutes into the wind counts for ten times more than one.
The three buckets are three equal 120° arcs around you — no fuzzy judgement, just the cosine of that angle:
cos(θ) > 0.5 → tailwind cos(θ) < -0.5 → headwind otherwise → sidewind
Add the segments up and you get the shares — for example 48% head, 33%
side, 19% tail, always summing to 100. That triple describes a ride far better than
a single average wind speed does: 25 km/h of wind hurts enormously on an out-and-back and barely
registers on a loop that turned with it.
Sidewind gets reported differently, and for a good reason. Inside that middle arc the wind barely pushes you along or holds you back — the along-track component is zero for a wind exactly square-on and never more than half the wind speed even at the edges of the arc — so scoring it on the same scale as head and tail would understate a gale you were leaning into for an hour. Instead the side bucket reports the crosswind's raw strength in km/h:
side score = |W| · sin(θ) // km/h across your direction of travel
Bearings are averaged as vectors, not as plain numbers. Averaging 359° and 1° arithmetically gives 180° — due south for two riders heading due north — so the mean direction and the spread that decides where to cut the track both come from circular statistics instead.
What wind factor actually means
The shares tell you how the ride was distributed; the wind factor compresses the whole thing into one number. It weighs every segment of the route by how much the wind was working with or against you at that moment. The number is signed and centred on zero — the sign is the whole point:
- Negative — the wind was net against you, and the further below zero, the harder the day was for the speed you produced.
- Around 0.00 — a balanced ride, or a day with no real wind to speak of.
- Positive — you were pushed along. Enjoy it, and expect the return leg to collect the debt.
It is not an abstract index, and there is no secret in how it is built. Take the wind blowing along your direction of travel, and weight it by how fast you were going:
W∥ = |W| · cos(θ) // + tailwind, − headwind
AeroWeight = (v_kmh / 35)²
windFactor = W∥ · AeroWeight
The weighting is the part riders underestimate. Aerodynamic drag scales with the square of your speed through the air, so the same 20 km/h wind matters four times as much at 40 km/h as it does at 20. The reference speed is 35 km/h: hold exactly that and the weight is 1, so the wind factor is the along-track wind in metres per second. Ride slower and the same wind counts for less, because you are simply not moving fast enough for it to cost you much.
Each stretch of the ride gets its own number this way, and the ride's wind factor is their mean
weighted by duration. So a steady 13 km/h wind straight in the face reads about -1.8
on a 25 km/h ride, and closer to -3.5 if you held 35 km/h through it. Turn around
and the number flips sign but keeps its size: the out-and-back that reads -1.8
heading north reads +1.8 coming home.
Alongside it come the raw conditions — average wind speed, average wind direction in degrees,
and a compass arrow such as ↗ showing where the wind was blowing. Velometry
exposes all of these as description tokens: {wind_factor},
{head_wind_percent}, {side_wind_percent},
{tail_wind_percent}, {average_wind_speed},
{wind_direction_indicator} and the per-component factors. The
full token reference lists the lot.
Why a headwind wrecks your average more than a tailwind saves it
Aerodynamic drag grows with the square of your speed through the air. Ride at 30 km/h into a 15 km/h headwind and your body is meeting 45 km/h of air — more than double the drag of the still-air case. Turn around and the same 15 km/h behind you leaves only 15 km/h of relative air, but you also spend far less time on that half of the ride, because you are moving faster.
The arithmetic is unforgiving: the slow half lasts longer than the fast half, so the wind takes
more time from you than it gives back. An out-and-back in a steady wind is always slower than
the same route in still air. A description line such as
Fought 48% headwind, wind factor -0.86 is not an excuse — it is the missing context
for an average speed that otherwise looks like a bad day.
How to add wind data to your Strava activities
Velometry writes it into the activity description for you, free:
- Connect with Strava. The official OAuth flow doubles as your login — no separate account, no password.
- Put wind tokens in your template. Either write your own line or load a ready-made one from the description ideas page.
- Ride. When the activity lands on Strava, a webhook wakes Velometry, which pulls the GPS streams, sends them to the wind-factor engine at windfactor.cc, and writes the finished description back to that ride — seconds after upload.
Only the GPS streams leave the app, and the result is not stored beyond a short cache, in line with the Strava API Agreement. Nothing derived from your activities is persisted — see privacy and data.
FAQ
Does Strava show wind data?
No. Strava stores your GPS track, speed, elevation, power and heart rate, but it shows no wind speed, wind direction or headwind information anywhere on the activity page. Weather conditions are not part of what Strava displays for a ride.
What is a good wind factor?
There is no "good" one — it describes the day, not your form. The number is signed and centred on zero: a minus means the wind was against you overall, a plus means it helped, and the further from zero, the stronger the effect. Its value is in comparing rides: two 30 km/h averages at -1.8 and +1.2 were nothing like the same effort.
How is headwind percentage calculated?
Your GPS track is cut into stretches of roughly constant bearing, each is matched against the
historical wind for that time and place, and the wind vector is projected onto your direction of
travel. Each stretch falls into one of three equal 120° arcs by the angle between wind and
travel: cos(θ) > 0.5 is tailwind, cos(θ) < -0.5 is headwind,
anything between is sidewind. Stops and GPS noise are discarded and the shares are averaged
weighted by time, so they always sum to 100.
How do I add wind data to a Strava activity?
Connect Velometry to Strava and put wind tokens in your description template. On every new ride Velometry sends the GPS streams to the wind-factor engine, gets the head, side and tail breakdown back, and writes it into the activity description automatically. It is free.
Can I get wind data for rides I have already uploaded?
Yes. The Recent rides tab in the admin panel regenerates the description of any of your last 10 rides with your current template, wind tokens included.
Does wind data work for runs?
No. Velometry writes descriptions for bike rides only — including indoor, virtual, gravel and MTB rides. Runs, swims, walks and e-bike rides are left untouched.