← The Signal

Your Whoop, Oura and Garmin disagree about your recovery. Which one should you train off?

Wearables19 Aug 20268 min read

Why your recovery scores disagree

Your Whoop says 34% recovery. Your Oura says 82 readiness. Your Garmin shows Body Battery at 61.

Same body. Same night. Same bed.

Most people looking at that conclude one of the three is broken, usually the one they paid least for. None of them is broken. They disagree because they measure different things, at different times, against different baselines, then compress the result into a single number that looks comparable and is not.

The short answer

Pick the device you wear most consistently. Ignore the absolute number. Train off its seven-day trend.

Do not average the three. An average of three incompatible measurements is not a better measurement, it is a number with no referent. And do not switch to whichever device agrees with how you feel that morning, which is the most common failure and removes the only value the score had.

If you want the accuracy ranking before the reasoning: on the best available head-to-head validation, Oura measures nocturnal HRV closest to ECG, Whoop is next, Garmin is third. The size of that study matters, and it is below.

They are not three opinions of one number

All three report HRV as rMSSD, which sounds like a shared standard. The standard is the maths. What differs is when they point it at you, and HRV moves enormously across a single night.

Whoop samples continuously through the night and reports a value weighted toward your last slow wave sleep stage. HRV carries more weight in Whoop's recovery score than in any of the others.

Oura segments the night into five-minute windows, calculates HRV in each, and averages across the whole sleep period.

Garmin does something structurally different. HRV Status is a seven-day rolling rMSSD compared against a sixty-day personal baseline. It is a slower instrument by design and it is not trying to tell you about last night.

Whoop is answering "how did the deepest part of your night look". Oura is answering "how did the whole night look on average". Garmin is answering "how does this week compare to the last two months". Three different questions, so three different answers is the correct outcome rather than a malfunction.

The direction of a disagreement carries information too. If Whoop reads high and Oura reads low, the average of your night looked worse than its deepest stretch, which is what a late meal, a late drink or a late session tends to produce: a disrupted early night that recovers before you wake. Reversed, the opposite. That inference follows from the measurement windows but has not been formally tested, so treat it as a reasonable read rather than a finding.

Garmin's Body Battery is not the score you think it is

This causes more confusion than the HRV windows.

Body Battery is not Garmin's recovery score. It is a continuously updating energy gauge, built on Firstbeat Analytics, that drains with activity and stress and recharges with rest. It changes all day. That makes it useful for a question the other devices cannot answer, which is whether the afternoon session is still on after the morning you have had, and useless as a morning readiness verdict.

Garmin's actual analogue to Whoop Recovery is Training Readiness: a once-daily morning score combining sleep, recovery time, HRV Status, stress and acute training load.

If you have been comparing Body Battery against a Whoop Recovery percentage, you have been comparing a fuel gauge against a blood test. Compare Training Readiness instead and the gap narrows considerably.

How accurate are they

A 2025 study in Physiological Reports put five consumer wearables against a Polar H10 chest strap running single-lead ECG at 1000 Hz, across 536 nights.

Nocturnal HRV (rMSSD)ConcordanceMean error
Oura Gen 40.995.96%
Oura Gen 30.977.15%
Whoop 4.00.948.17%
Garmin Fenix 60.8710.52%
Polar Grit X Pro0.8216.32%
Resting heart rateConcordanceMean error
Oura Gen 30.971.67%
Oura Gen 40.981.94%
Polar Grit X Pro0.862.71%
Whoop 4.00.913.00%

Two caveats that most write-ups of this study leave out, and both change how much weight it carries.

It is thirteen people. Thirteen healthy adults, 536 nights between them. That is a lot of nights and very few bodies. It shows the sensors are capable. It shows much less about how they behave on your particular wrist, in your particular sleep, at your particular resting heart rate.

Garmin was excluded from the resting heart rate analysis, because the researchers could not identify the timestamp of the window Garmin uses to calculate it. Researchers with ECG reference data could not determine when a Fenix decides to measure your resting heart rate. If yours has never matched anything else, that is why.

They do not even agree on resting heart rate, and one reason is a field name

We found this by building against the APIs rather than reading the marketing.

Pull recovery data out of Oura's API and there is a field inside the daily readiness record called contributors.resting_heart_rate. It looks exactly like what you want. It is not a heart rate. It is a 0 to 100 contributor score describing how much your resting heart rate helped or hurt that day's readiness.

The figure in beats per minute lives somewhere else: on the night's sleep record, as lowest_heart_rate.

Read the wrong one and you will report a resting heart rate of 87 for an athlete whose true resting heart rate is 48. It does not error. It does not look obviously wrong. It is just a different number from the one their Oura app shows them, permanently.

We take resting heart rate from lowest_heart_rate for this reason, and it is worth knowing as a user: if a third-party app shows you a resting heart rate that does not match your own Oura app, this is the most likely explanation. Whoop's API hands you resting_heart_rate in bpm directly on the recovery record, which is why Whoop numbers tend to survive the trip into other apps intact.

A second, more mundane source of drift: Oura tags every record with a local calendar day, so a night is unambiguous. Whoop does not, so any app consuming it decides for itself which day a sleep belongs to. Off by one, and Sunday's long run gets scored against Saturday night.

So which one do you train off?

One device, chosen for consistency of wear, read as a trend.

Consistency beats accuracy here, and not narrowly. A ring you wear every night at 7% error tells you more about your training than a watch at 5% error that you take off to charge three nights a week, because the value of these scores is the deviation from your baseline. Every gap in the record degrades the baseline the deviation is measured against.

Three rules that survive whichever device you picked:

  • Read the trend, not the morning. A single 34% means very little. Three consecutive days below your normal range means something. These devices are noisy daily and informative weekly, and Garmin has already made that choice for you by building HRV Status as a seven-day figure.
  • Treat a persistent disagreement as a data-quality signal, not a physiological one. If one device sits consistently out of step with the other two, the causes are usually boring and fixable: fit, position, wrist tattoos affecting optical sensing, a device charging through part of the night, or a sleep window one of them is misreading.
  • Never let the score overrule what your body is telling you. A 90% recovery on a morning you feel wrecked is a data point, not a permission slip. The score is an input to the decision, not the decision.

First, though: can your device measure recovery at all?

Ask this before any of the above. Almost nobody does.

HRV, resting heart rate and sleep staging are wrist-and-finger-class measurements. They need a device on your body, overnight, with an optical sensor. An iPhone in your pocket gives you steps. No HRV, no resting heart rate, no sleep.

Obvious written down. In practice it is the most common reason a recovery screen is empty, and it does not present as an error. Apple Health shows nothing where the number should be, which looks identical to a sync problem, so people spend a fortnight reconnecting integrations to fill an absence that was never going to fill.

When we audited our own users' stored recovery history, most of the active ones had never produced a single measured recovery reading. Not a broken pipeline: no device in the loop capable of producing one. Small sample, and we are not claiming it generalises, but it changed how we build. A missing recovery number now has to say which kind of missing it is, because "your watch has not reported since Tuesday" and "nothing you own can measure this" are different problems with opposite responses.

If your recovery screen is blank, check in this order: does your device measure HRV overnight at all, did you wear it to sleep, and only then whether the integration is connected.

What the number is actually for

The score is the least interesting output of the system.

Knowing you are at 34% does not tell you whether to lift, run, cut the session short, or eat more. That depends on what you did yesterday, what is scheduled today, how far out your event is, whether you are in a deficit, and whether the last three weeks trended the same direction. A number cannot make that call on its own, which is why so many people check it every morning and then train exactly as planned anyway.

The hardware measures well now. The gap is interpretation.

Kipp reads your Garmin, Whoop, Oura or Apple Watch overnight and gives you the call, not the number. It knows what you trained yesterday, what you ate, and what you are training for, then tells you what to push, adjust, or leave alone this morning.

Download on the
App Store

Sources

Next

◆ The Hybrid Signal

Train for
strength & endurance.

Which session, how hard, how much to eat. Evidence-checked, free, every other week.