Training with Strava

Strava indoor power, outdoor heart rate: why your Fitness chart jumps when you mix load inputs

If you ride indoors with a power meter and outdoors on heart rate only, your Strava Fitness/Freshness/Form chart will show a step that no physiology produced. The cause is not a bug — it is a units problem. Power-based TSS and heart-rate-based Relative Effort answer different questions and are scaled to different rulers [Allen et al. 2019, Meyer 2018], so feeding both into one exponentially-weighted curve splices two incompatible signals. The fix is not to abandon either sensor. It is to commit to one primary load metric and hold it across the season.

By Jim Camut · Former pro & ex-Bruyneel Academy racer

Updated Jun 1, 20264 chapters7 citations

01 / 04

Power-based load and HR-based load are not the same units

TSS and Relative Effort measure different things on different scales. TSS is mechanical work normalized so one hour at FTP equals 100 [Allen et al. 2019]. Relative Effort is weighted time-in-heart-rate-zone, closer to Banister's TRIMP than to a power score [Meyer 2018, Hellard et al. 2007]. Putting both on one axis compares watts to heartbeats.

TSS is built from external load. It takes your normalized power, scales it against your FTP, and multiplies by duration, with the calibration point that 60 minutes at threshold returns exactly 100 [Allen et al. 2019]. The number is anchored to mechanical output — what your legs did to the pedals — regardless of heart rate.

Relative Effort is built from internal load. Strava slices your heart-rate stream into time-in-zone against your configured max HR, weights higher zones more heavily, and sums [Meyer 2018]. The math descends from Eric Banister's TRIMP, which applies a sex-specific exponential weighting to heart-rate reserve — roughly e^1.92 for men and e^1.67 for women [Hellard et al. 2007]. There is no point on that scale that corresponds to one hour at FTP. The two metrics were never calibrated to each other.

This is why the same physiological effort can post different numbers depending on which sensor recorded it. A steady 90-minute aerobic ride might log a TSS in the 70s indoors with power and a Relative Effort in the 50s or 60s outdoors on heart rate, or the reverse if your max HR is set low. Neither is wrong. They are different rulers, and the gap between them is not a fitness signal — it is a measurement artifact from switching sensors.

02 / 04

The discontinuity it creates in your Fitness/Freshness/Form chart

Both Fitness and Freshness are exponentially-weighted moving averages of daily load — 42 days for Fitness, 7 for Freshness [Allen et al. 2019, Hellard et al. 2007]. When the daily load you feed them jumps by 20-30 units overnight because you switched from heart rate to power, the curve reads that step as a real change in training. It is not.

The chart's mechanics make this unavoidable. Fitness updates each day as roughly 97.6% of yesterday's value plus 2.35% of today's load, the math of a 42-day exponential average; Freshness uses a 7-day constant, so today's load counts for about 13.3% [Allen et al. 2019]. The model assumes every daily input is on the same scale. It has no way to know that Monday's number came from a heart-rate ride and Tuesday's came from a power meter.

Work a concrete case. Suppose your outdoor HR rides have been logging around 60 units of daily load, and then you move indoors for winter where the same effort logs around 85 TSS. That is a 25-unit step with no change in your actual training. Freshness, weighting each day at 13.3%, climbs fast — within a week it has absorbed most of the jump and your Form (Fitness minus Freshness) dips into territory that looks like accumulated fatigue. Fitness, at 2.35% per day, drifts upward more slowly but just as falsely. The chart now tells a story about a fatigue-then-fitness swing that your legs never lived.

The reverse hurts more. A rider who trains hard indoors on power all winter and then moves outdoors to heart-rate-only rides in spring can watch Fitness sag for weeks, because Relative Effort on easy outdoor base rides logs lower daily load than the structured power sessions it replaced. The rider reads a falling Fitness line and panics, adds intensity, and inverts the 80/20 distribution that base season is supposed to protect [Seiler 2010]. The chart drove a bad training decision off a units change.

This is the sub-question the broader case for treating Strava as a training tool, not a journal, keeps surfacing: the data layer every cyclist already has only helps if the inputs are commensurable. A Fitness curve spliced from two metrics is not lying about any single ride — each TSS and each Relative Effort is honest on its own scale. It is lying about the trend, which is the one thing the chart exists to show.

03 / 04

How to commit to one primary load metric across the season

Pick one load metric and feed the chart only that. If you have power on most rides, make power-based TSS primary and estimate it for the HR-only rides. If you are mostly heart rate, make Relative Effort primary and accept it under-reports anaerobic work. Consistency of input beats accuracy of any single ride [Allen et al. 2019].

Power-primary is the stronger default if you have a meter on more than half your rides. Power-based TSS is immune to the heart-rate problems that distort the other metric — it does not depend on a max HR that the 220-age formula can miss by 10-20 bpm [Tanaka et al. 2001]. For the HR-only rides, estimate a TSS from duration and perceived intensity rather than letting Relative Effort feed the same curve. An honest estimate on the same ruler beats an exact number on a different one.

Heart-rate-primary is fine if power is the exception, not the rule. Many self-coached riders ride outdoors most of the year and only see power on a borrowed trainer. If that is you, make Relative Effort your season-long metric, set your max HR from a real observed peak rather than a formula, and accept the known blind spot: Relative Effort under-reports short anaerobic intervals because heart rate lags the metabolic stress [Meyer 2018]. Foster's session-RPE is a cheap, validated companion for exactly those sessions [Haddad et al. 2017].

What you must not do is let Strava average the two automatically. Strava uses Relative Effort as its load input when there is no power and a TSS-equivalent when there is, and it will happily build one Fitness curve across both [Meyer 2018]. That is the splice. The discipline is boring but it works: one metric, one ruler, all season, so the trend reflects your training rather than your sensor stack.

04 / 04

How tools that read both streams resolve it

Some platforms read both the power and heart-rate streams off every activity and compute one internal load estimate that does not whipsaw when the sensor changes. That is the difference between an app that displays your rides and one that reads them [Strava Developers]. Several tools do a version of this; the honest gap is between syncing and reading.

Intervals.icu reads your full Strava history for free and lets you choose how load is computed, which lets a disciplined rider hold one metric without paying. TrainerRoad sidesteps the problem by being indoors-only with power, so there is never a second ruler. TrainingPeaks insists on power-derived TSS and treats HR-only rides as estimates. Each is a defensible answer to the same problem: a fitness curve is only meaningful when its inputs share a scale.

Reading both streams means deriving a single training-stress estimate from whichever data each ride carried, rather than passing two different scores into one average. The infrastructure is webhook-driven — every new activity is parsed within seconds of upload [Strava Developers] — so the estimate comes from the raw power and heart-rate data, not Strava's display-layer numbers. The point is one consistent internal load, whichever sensor was on the bike that day.

This is where AdaptCycling sits. We read both your power and heart-rate streams from your Strava history and compute an internal training-stress estimate that stays on one scale whether you rode indoors on power or outdoors on heart rate, so a winter spent on the trainer does not splice a false step into your fitness trend. It is the same principle behind why a single mis-set max HR should not be allowed to rewrite a week of history — covered in our companion piece on a Relative Effort that reads high on easy rides. The data is the input the plan adapts to; keeping it commensurable is what makes the trend trustworthy.

Common questions

Quick answers

Why does my Strava Fitness chart jump when I switch from outdoor HR to indoor power?

Because the two rides are scored on different scales. Outdoor rides without power log Relative Effort, a heart-rate-zone score [Meyer 2018]; indoor power rides log TSS, where one hour at FTP equals 100 [Allen et al. 2019]. Feeding both into one exponentially-weighted Fitness curve splices incompatible units, so the chart shows a step that your training never produced.

Should I trust TSS or Relative Effort for tracking fitness over a season?

Whichever one you can apply consistently to most of your rides. If you have power on more than half your rides, make TSS primary and estimate it for HR-only rides [Allen et al. 2019]. If you are mostly heart rate, make Relative Effort primary and set your max HR from a real observed peak [Tanaka et al. 2001]. Consistency of input matters more than the accuracy of any single ride.

How much does one mismatched ride actually move the chart?

More than you would think on Freshness, less on Fitness. Freshness is a 7-day exponential average, so a single day's load counts for about 13.3%; Fitness is a 42-day average, so it counts for about 2.35% [Allen et al. 2019]. A 25-unit units mismatch repeated over a week of switched sensors can swing your Form into apparent fatigue that is purely an artifact.

Can I make Strava use the same load metric for every ride?

Not fully — Strava uses Relative Effort when there is no power and a TSS-equivalent when there is, and builds one curve across both [Meyer 2018]. The workaround is to standardize the input yourself: estimate a TSS for HR-only rides if you are power-primary, or rely on Relative Effort plus session-RPE if you are heart-rate-primary [Haddad et al. 2017].

Does estimating FTP differently fix the discontinuity?

No. The discontinuity is a units mismatch between power-based and heart-rate-based load, not an FTP error. A more accurate FTP makes your TSS values truer but does nothing to reconcile them with Relative Effort, because the two metrics are scaled to different physiology in the first place [Allen et al. 2019, Meyer 2018].
References

Sources cited in this guide

  1. 01
  2. 02
    Meyer 2018. Quantifying Effort through Heart Rate Data. Strava Engineering.
  3. 03
    Hellard et al. 2007. Assessing the limitations of the Banister model in monitoring training. Journal of Sports Sciences.
  4. 04
    Tanaka et al. 2001. Age-predicted maximal heart rate revisited. Journal of the American College of Cardiology.
  5. 05
  6. 06
    Seiler 2010. What is best practice for training intensity and duration distribution in endurance athletes?. International Journal of Sports Physiology and Performance.
  7. 07
    Strava Developers. Webhook Events API. Strava Developers.
In this series

More inside Training with Strava

Start here · Foundational guide

Training with Strava: a self-coached cyclist's guide

How to use Strava as a training tool — what its metrics actually tell you, where it fails, and how to structure training around it without a coach.

Read the full guide

Other articles in this series

  1. 01

    What your Strava Fitness number means (and if yours is good)

    Strava Fitness is CTL — a 42-day weighted load average. What the number means, why it is personal, and the decisions to make from it.

  2. 02

    Apps that connect to Strava: read vs display

    How to tell which training apps actually read your Strava data and adapt versus the ones that only display your rides.

  3. 03

    Is Strava Premium worth it for a self-coached cyclist?

    What Strava Premium gives a training-focused rider, what it doesn't (no coaching), and when the free Intervals.icu chart beats paying.

  4. 04

    Relative Effort vs TSS: which to trust by workout

    A per-workout-type rule for when to trust Strava Relative Effort vs power-based TSS, and why they are not the same units.

  5. 05

    How to set up Strava for training: one-time configuration

    Configure Strava once for training: real FTP and max HR, honest zones, one sensor stack, and feed privacy that protects your plan.

  6. 06

    Strava segments as fitness tests: map efforts to tests

    Use Strava segments as scheduled benchmark tests: which profiles map to which test, how to schedule every 4-6 weeks, and controlling variables.

  7. 07

    What to look at on Strava after a ride: 4 metrics

    A 30-second post-ride routine: the four Strava metrics that matter after every ride, the ones to ignore, and why.

  8. 08

    Strava Fitness going down while training hard: the decay math

    Why your Strava Fitness (CTL) drops even when you train hard: the 42-day EWMA decay math, the real causes, and when a falling line is correct.

  9. 09

    Heart rate drift on long rides at same power: what it means

    Why heart rate climbs at flat power on long rides — cardiovascular drift, aerobic decoupling (Pw:HR) as a durability signal, and what to do.

  10. 10

    Strava heart rate zones wrong: the whole-dashboard cascade

    How a wrong max HR in Strava cascades into bad zones, Relative Effort, and Fitness — and how to set zones from real data.

  11. 11

    Why your Strava Relative Effort is high on easy rides

    Relative Effort can spike on a genuinely easy ride — usually a mis-set max HR, not lost fitness. What inflates it on Strava and what to do.

Free 14-day trial · No card · ~3 minutes

Try the adaptive coach yourself.

Connect Strava, tell us your goal and weekly hours, and your first training week is ready in minutes.

Free 14-day trial. No credit card required.