PaceWeather logo

PaceWeather

Know the conditions. Perform your best.

Weather-adjusted insights for your Strava runs.

Strava + weather-adjusted pacing v0.4.13 • 20260723-beta5

Dashboard intro

See the pace the weather allowed.

Compare your real Strava effort against the conditions, then see what the same run may have looked like in better weather.

Strava login Past activity history Ideal conditions pace Flexible Strava summaries

Quick Snapshot

Your recent pace and weather story

Condition mix

Waiting for synced history

Recent weather-ready runs

A cleaner read on your latest enriched efforts

Standout runs

Best, toughest, steepest, and costliest days

History Insights

Patterns across your past runs

Personal Insights

How you perform in different conditions

Athlete Profile

Your current weather and terrain profile

Condition Buckets

How different weather groups stack up

Athlete Baseline

What your own history says about you

Weather Trends

Grade and cost trends across your history

Grade distribution

How often you land in each weather tier

Monthly averages

Weather grade and weather cost by month

Rolling acclimation

Recent 30-day adaptation versus the prior 30 days

Tolerance trend

How your heat and humidity profile is changing

Local Data Queue

Local data update progress

Queue Status

Waiting for sync

Next Up

Runs needing local data

Latest Report

No batch run yet

Recent Activities

Choose a run to analyze

Waiting for sync

Activity Report

Select an activity

0 of 0
Not posted

Run Summary

How much the weather slowed you, what caused it, and what pace ideal weather likely would have supported.

Weather Impact --
Primary Limiter Choose an activity to see the Primary Limiter.
Actual Pace --
Perfect Weather Pace
--
Difference --
Estimated Time Lost
--

Weather Analysis

How the conditions shaped this run

Weather Breakdown

    Weather Timeline

    See how weather changed throughout your run.

    Conditions During Run

      Air Quality

      Air-quality details will appear here after local weather enrichment runs.

      Charts

      Run trends

      Performance overlay

      Time In HR Zones

      Run Insights

      Personal Baseline --

      Need more similar runs to build your baseline.

      Weather-adjusted similar-run history will appear here.
      Feels Like Stress

      Pick an activity to see how harsh the weather likely felt.

      We use apparent temperature, wet bulb, VPD, wind, and sun load to estimate environmental strain.

      Splits

      Standard Strava split data

      Comparisons

      Compare this run against similar efforts

      Admin

      Users, subscriptions, and processing readiness

      Users

      All PaceWeather accounts

      Create and manage PaceWeather accounts from here.

      Beta Leads

      People waiting for access

      Capture interest, prepare accounts, and follow up with branded outreach from one place.

      Webhook Queue

      Recent Strava event intake

      Review Queue

      Activities ready to post

      New Strava activities that are imported and enriched will wait here when posting is set to review first.

      Strava Summary

      Choose what gets posted

      Strava Connection

      Connect your account

      Connect Strava to import activities and post PaceWeather summaries back to your description.

      Summary Template

      Default Strava format

      These settings become your account-wide default for every activity preview and auto-post.

      Template Setup

      Choose the starting point for how detailed PaceWeather summaries should feel.

      Activity Display

      This only changes which activities appear inside PaceWeather. It does not control auto-posting.

      Summary Content

      Pick which PaceWeather metrics appear in the generated summary block on Strava.

      Air Quality is off by default so existing Strava summaries do not change unless you opt in.

      Pace View

      Choose which adjusted pace metric PaceWeather shows when pace is included in the summary.

      Perfect Weather Pace keeps the same terrain. Equivalent Pace keeps the weather ideal and flattens the route.

      Posting

      Control how PaceWeather behaves when new activities arrive and where the summary lands in Strava.

      Auto-post Activity Types

      This controls posting eligibility only. Walks can stay visible in PaceWeather even when walk posting is off.

      Turn these on for the activity types PaceWeather is allowed to post automatically. Activity visibility is still controlled separately above.

      Preview

      
                          
      0 lines 0 chars

      Posting Status

      Not posted

      This activity has not been updated from PaceWeather yet.

      Product Goal

      Keep the public Strava description concise when you want, while preserving a deeper weather report inside PaceWeather.

      Automation Status

      Automation off

      Choose a posting behavior above to control what happens after Strava sends a new activity.

      FAQ

      How PaceWeather calculates each stat

      PaceWeather is meant to be transparent, not mysterious. These metrics are heuristic estimates built from historical weather, terrain context, and simple weighting rules. They are useful for comparing runs and understanding what the day likely cost you, but they are not lab-grade physiology measurements.

      What does timeline stress mean?

      The timeline stress bar is a 0-100 snapshot of how taxing the weather was at that moment. It rises when feels-like heat, wet bulb temperature, wind, and solar load rise, and when the air becomes less evaporatively friendly.

      Current formula:

      stress =
      max(0, apparentTempF - 55) * 1.25 +
      max(0, wetBulbF - 58) * 1.55 +
      max(0, windGustMph - 8) * 0.9 +
      directSolarWm2 / 45 +
      max(0, 1.1 - VPDkPa) * 8
      
      Then clamp to 0-100.

      Those thresholds are not magic numbers. They are anchor points chosen so the stress bar stays quiet in comfortable conditions and rises when conditions become meaningfully harder for most runners:

      55F apparent temperature: below this, heat itself is usually not the main limiter for endurance running.

      58F wet bulb: above this, evaporative cooling starts getting noticeably less forgiving, especially on longer runs.

      8 mph gusts: this is the point where wind exposure tends to become noticeable instead of just background air movement.

      1.1 kPa VPD: values below this mean the air is getting more saturated, so sweat evaporation becomes less efficient.

      45 W/m2 divisor: this is just a scaling factor so direct sun meaningfully contributes to stress without dominating the entire bar by itself.

      Wet bulb and VPD help represent how hard it is to cool yourself through sweat evaporation, so the stress bar now reads more like a real endurance-weather strain signal than a simple temperature bar.

      PaceWeather maps that 0-100 value into labels so it is easier to read at a glance:

      Low: 0-34
      Light: 35-57
      Moderate: 58-77
      High: 78-94
      Severe: 95-100

      Severe should be rare. It is reserved for the most punishing combinations of feels-like heat, wet bulb, wind exposure, solar load, and poor evaporative cooling.

      How is Weather Grade calculated?

      Weather Grade is a 0-100 composite score showing how favorable the conditions were for endurance performance.

      Weather Grade =
      Apparent temperature score * 25% +
      Dew point score * 22% +
      Wet bulb score * 20% +
      VPD score * 13% +
      Wind score * 10% +
      Solar score * 10% +
      Rain score * 5%

      Higher is better. Cool, dry, calm conditions tend to grade highest.

      This means the grade is no longer based on raw air temperature alone. It now leans more on how the air likely felt to the runner and how well sweat could actually evaporate.

      How is Weather Score calculated?

      Weather Score is a simplified 1-10 label derived from Weather Grade.

      Weather Score = round(Weather Grade / 10)
      Clamp to 1-10

      That score then maps to labels like Perfect, Good, Challenging, or Extreme.

      PaceWeather also pairs each score with a face emoji so the effort reads at a glance, from 😁 in ideal weather down to 😵 in the most punishing conditions.

      This emoji scale is about overall feel. It reflects the 1-10 Weather Score, not the exact number of seconds lost.

      How is Weather Cost calculated?

      Weather Cost estimates seconds per mile lost due to environmental conditions.

      Heat cost = max(0, apparentTempF - 58) * 0.42
      Humidity cost =
      max(0, dewPointF - 45) * 0.8 +
      max(0, wetBulbF - 56) * 0.55 +
      max(0, 1.4 - VPDkPa) * 5
      Wind cost = max(0, effectiveWindMph - 8) * 0.45
      Rain cost = max(0, rainMm - 0.2) * 2.5
      Solar cost = max(0, directSolarWm2 - 220) / 65
      
      Weather Cost = sum of the above

      Here is what the fixed thresholds are trying to represent:

      58F apparent temperature: this is the “heat starts mattering” point in the pace-loss model. Below that, heat cost stays at zero.

      45F dew point: this is the dry-air baseline. Dew point above that starts adding humidity cost because the air is holding more moisture.

      56F wet bulb: this is the point where moisture plus heat begins to push harder against evaporative cooling.

      1.4 kPa VPD: this is the “comfortable evaporation” target. Lower VPD than that means the air is more saturated, so humidity cost rises.

      8 mph effective wind: below this, wind cost stays at zero. Above it, the model treats wind as a meaningful pacing drag.

      0.2 mm rain: this is a light drizzle threshold so trace precipitation does not create artificial pace loss.

      220 W/m2 direct solar: this is the “sun load starts to be noticeable” threshold. It keeps dim or low-angle light from counting like harsh full-sun exposure.

      The coefficients after those thresholds control how quickly cost ramps up. They are heuristic weights tuned so the model behaves directionally like real-world running strain, not proprietary or lab-derived constants.

      Right now this is a rules-based estimate, not a personalized athlete model.

      The upgraded version uses apparent temperature for heat, wet bulb plus VPD for humidity strain, and gust-aware wind. That makes the cost model better at handling muggy runs where air temperature alone understates the real stress.

      Weather Cost uses a separate severity emoji scale from Weather Score because it represents pace loss, not overall feel: 🟢 0-5, 🟡 6-15, 🟠 16-30, 🔴 31-45, and 🥵 46+ seconds per mile.

      Because this is a transparent heuristic model, PaceWeather may not match another app’s normalized pace exactly. If the model consistently feels too aggressive or too soft, these thresholds and weights can be recalibrated.

      How are Heat Tolerance and Humidity Tolerance calculated?

      These are early personalized scores built from your own weather-ready history. They are not lab measurements. They simply ask: “How far does your actual pace drift away from your own weather-normalized baseline when conditions turn hot or humid?”

      baseline pace =
      average Perfect Weather Pace from cool/dry runs
      
      If there are not enough cool/dry runs:
      baseline pace =
      average Perfect Weather Pace from all weather-ready runs
      
      tolerance drag =
      average actual pace in hot or humid runs - baseline pace
      
      tolerance score =
      100 - (tolerance drag * 1.3)
      
      Then clamp to 0-100.

      Higher is better. A higher score means your hot or humid runs stay closer to your own weather-normalized baseline. A lower score means your pace fades farther from that baseline in those conditions.

      This is intentionally simple and transparent. It is a first-pass athlete profile, not a finished physiology model.

      The monthly tolerance trend table uses the same score month by month. That makes it useful for spotting direction over time, but it should still be read as a rough training-history signal, not a formal acclimation study.

      The rolling acclimation cards go one step further. They compare the most recent 30-day window in your synced history against the 30 days before that. If the recent window scores higher, PaceWeather marks that as improving acclimation. If it drops, the app flags that your recent heat or humidity readiness may be cooling off.

      How is Terrain Effect calculated?

      Terrain Effect is a separate estimate of how much climbing likely slowed the run. It is not weather. It is meant to show the elevation side of the effort when you want that context in the summary.

      If GAP is available, PaceWeather uses the difference between actual pace and GAP as the terrain effect.

      If GAP exists:
      Terrain Effect = max(0, actual pace - GAP)

      If GAP is not available, PaceWeather falls back to a simple elevation-gain estimate based on feet climbed per mile.

      If GAP is missing:
      gainPerMile = elevationGainFeet / distanceMiles
      Terrain Effect = max(0, gainPerMile - 50) * 0.18

      50 ft/mi is the baseline where climbing starts to count as a meaningful terrain tax in the fallback model. The 0.18 weight controls how quickly seconds-per-mile accumulate above that point.

      This fallback is a heuristic, so it should be treated as a directional estimate rather than an exact terrain model.

      What is the difference between Perfect Weather Pace and Equivalent Pace?

      PaceWeather now supports two pace views so you can decide whether elevation should be part of the normalization.

      Perfect Weather Pace is the pace you likely would have run under ideal weather conditions on the same course. Terrain remains unchanged.

      Perfect Weather Pace =
      actual pace - Weather Cost

      Equivalent Pace is the pace you likely would have run under ideal weather and flat terrain, allowing easier comparison between different runs and courses.

      Equivalent Pace =
      GAP - Weather Cost
      
      If GAP is missing:
      Equivalent Pace =
      actual pace - Terrain Effect - Weather Cost

      If you want a cleaner answer to “what would this have looked like in better weather on the same route?”, choose Perfect Weather Pace. If you want a pace that also smooths out elevation impact for easier cross-course comparison, choose Equivalent Pace.

      PaceWeather marks these pace metrics with 🎯 to show they are target or normalized pace values rather than raw activity pace.

      What is Estimated Time Lost?

      Estimated Time Lost turns per-mile weather cost into total run time.

      Estimated Time Lost =
      distanceMiles * weatherCostSecondsPerMile
      What is the Primary Limiter?

      Primary Limiter is whichever Weather Cost component contributed the most pace loss on that run: heat, humidity, wind, rain, or solar load.

      What do Temp, Hum, Dew Pt, Solar, and Clouds mean?

      Temp: Air temperature near the route.

      Feels Like: Open-Meteo apparent temperature, which acts like a heat-index-style value.

      Hum: Relative humidity.

      Dew Pt: Dew point temperature, a better proxy for muggy air.

      Wet Bulb: A heat-and-moisture measure tied closely to evaporative cooling strain.

      VPD: Vapour pressure deficit. Lower VPD usually means the air is more saturated and sweat evaporates less effectively.

      Solar: Solar radiation in watts per square meter, which acts like sun load.

      Direct Sun: Direct beam solar radiation, which is more useful than total solar load when the sun is exposed.

      Clouds: Cloud cover percentage.

      How does PaceWeather describe air quality for a run?

      PaceWeather saves a representative air-quality snapshot for the activity using the archived Open-Meteo air-quality data nearest to the run's saved time and route location.

      The activity view shows the overall U.S. AQI when available, the leading pollutant AQI, a PaceWeather Air Impact label, and separate guidance for most runners versus more sensitive runners.

      When overall AQI is missing, PaceWeather can fall back to the highest pollutant AQI to classify the run, but it lowers the displayed confidence. Partial pollutant coverage also lowers confidence.

      The data-quality section explains whether coverage was complete, partial, or insufficient and whether the AQI classification came from the saved overall AQI or only from pollutant sub-indices.

      This guidance is informational. It does not change Weather Grade, Weather Cost, pace projections, or serve as medical advice.

      How does the weather timeline work?

      The timeline samples the run every 30 minutes using archived hourly weather. Between each hour, PaceWeather interpolates the values so half-hour points behave more naturally.

      Timeline coverage uses the longest trustworthy activity duration available: elapsed time first, then stream duration, then moving time.

      Where does the weather data come from?

      PaceWeather currently pulls historical weather from the Open-Meteo Archive API.

      We use Strava to provide the activity start time, timezone, and route coordinates. Then we request archived hourly weather for that location and date range.

      Source: Open-Meteo archive-api.open-meteo.com
      
      Requested hourly fields:
      - temperature_2m
      - apparent_temperature
      - relative_humidity_2m
      - dew_point_2m
      - wet_bulb_temperature_2m
      - vapour_pressure_deficit
      - precipitation
      - cloud_cover
      - wind_speed_10m
      - wind_gusts_10m
      - shortwave_radiation
      - direct_radiation
      - sunshine_duration

      For the timeline, PaceWeather samples across the activity window and interpolates between hourly weather points so half-hour entries feel smoother than a simple hour-by-hour snap.

      This means the weather is route-area historical weather, not a body-worn sensor or exact microclimate reading at every step.