Score Logic

How Readiness and Sleep scores are calculated in Intervals Companion


On this page:

Where the Data Comes From

Both scores are calculated and written to your Intervals.icu wellness log, alongside the other daily metrics the app syncs. They draw on two sources: last night's readings come from Apple Health, and the baselines and training load they are measured against come from your Intervals.icu wellness log.

Source of Each Input

Inputs play one of three parts. Components carry a weight and combine into the score; when one has no data, its weight spreads across the rest. Penalties apply after that sum and can only subtract points. The Baevsky Stress Index sits between the two — it moves the HRV component up or down before the weighting.

Input Used by Part it plays Source
Sleep duration, stages, awake time, bedtimeSleep ScoreComponentsApple Health
Breathing disturbancesBothSleep Score component, and a readiness penaltyApple Health
HRV last night (rMSSD or SDNN)ReadinessComponentApple Health
HRV history for the 7-night average and the 60-day baselineReadinessComponentIntervals.icu
Sleeping heart rate last nightReadinessComponentApple Health
Sleeping heart rate baselineReadinessComponentIntervals.icu
Fitness and Fatigue (CTL and ATL)ReadinessComponentIntervals.icu
Baevsky Stress IndexReadinessAdjusts the HRV componentApple Health
Training ramp rateReadinessPenaltyIntervals.icu
Blood oxygen (SpO₂)ReadinessPenaltyApple Health
Wrist temperature and its 14-night baselineReadinessPenaltyApple Health

The Sleep Score reads Apple Health only. It needs no history and no Intervals.icu data.

The Readiness Score takes the finished Sleep Score as its sleep quality component. Duration, stages, bedtime, and awake time therefore reach readiness only through that 30% weight — readiness never scores them separately. Breathing disturbances work differently: they affect the restfulness part of the Sleep Score, and readiness also reads them directly as a penalty on the total. A night of heavy disturbance therefore lowers readiness on both paths.

The history the Readiness Score compares against is your Intervals.icu wellness log, which for most athletes is the data this app uploaded on previous mornings. Wellness entries written by another device or app count towards that history in exactly the same way. Wrist temperature is the one exception — its baseline is read from the last 14 nights in Apple Health.

What You Need to Get a Score

Both scores are off until you turn them on. Open Settings, go to the daily metrics sync options, and enable Readiness Score or Sleep Score on the Experimental tab.

ScoreMinimum data for a result
Sleep Score One night of sleep duration in Apple Health. Stage components are added when your device records deep and REM sleep.
Readiness Score Last night's sleep duration, plus either a sleeping heart rate or an HRV reading in Apple Health.

That minimum is enough on your first morning. Sleep quality and sleeping heart rate carry the score on their own, and their weights expand to cover the components that have no data yet. Each remaining component joins the score as its data arrives:

ComponentWhat it waits for
HRV vs baseline14 nights of HRV in your Intervals.icu wellness log for a baseline; 7 for the 7-night average. The baseline reaches full strength at 60 nights.
Training Load BalanceFitness and Fatigue on your Intervals.icu wellness record for the previous day, which any athlete with recorded activities has.
Personal sleeping heart rate baseline7 nights of sleeping heart rate in your wellness log. Until then the 45–75 bpm scale applies.
Wrist temperature modifier5 of the previous 14 nights in Apple Health.

Apple Watch records HRV as SDNN, and the app syncs SDNN by default. On iOS 27 and later, Apple Health also records rMSSD, which you can turn on as HRV (rMSSD) on the Standard tab. The Computed tab offers an rMSSD calculated from heartbeat data instead; it turns off while Apple's rMSSD is on. Whichever one you sync, the app compares it against a baseline of the same kind.


Readiness Score

The Readiness Score is a single daily number (0–100) reflecting how recovered and prepared your body is for training. It draws on overnight physiology, recent training load, and sleep quality, combining them into a weighted composite. Higher is better.

Labels: Excellent (85+), Good (70–84), Moderate (50–69), Low (30–49), Poor (<30).

Components & Weights

When all data is available, five components contribute to the score. If any component's data is absent, its weight redistributes proportionally across the remaining components — so the score always reflects 100% of available information.

Component Weight What It Measures
HRV vs personal baseline20%Where your 7-night HRV average sits against your normal
HRV last night15%Whether last night fell below your typical range
Sleep quality30%Your sleep score — duration, stages, and restfulness
Training Load Balance (TSB%)20%Fatigue as a percentage of fitness — ((CTL − ATL) / CTL) × 100
Sleeping HR vs baseline15%Cardiac recovery overnight

HRV carries 35% in two parts: your 7-night average shows where your recovery is trending, and last night shows acute stress — alcohol, an illness starting, a hard late session — the average would take days to reflect.

A minimum data gate applies: at least one of HRV or sleeping HR, and a sleep measurement must be present, or the score returns no result at all.

After all component subscores are combined into a weighted sum, penalty modifiers are applied and the result is clamped to 0–100.

HRV vs Personal Baseline (20%)

This component asks where your HRV is sitting compared to your normal. It averages your HRV (rMSSD or SDNN) across the last 7 nights, including last night, and compares that average to your personal baseline: the trimmed mean of the 60 days before. The same measurement drives the HRV Trend sheet, the HRV Trend widget, and the Daily Wellness Analysis, so every screen shows the same three numbers: your 7-night average against your baseline, this week against the week before, and last night against your typical range.

Why an average? A single night of HRV moves around by 10–20% on its own. Averaging seven nights means one odd night shifts this component only slightly, while a genuine multi-day drop shows up in full. Last night is scored separately, in the component below.

Your normal swing. Inside your normal swing the score eases from 100 to 90. It only falls in earnest once your 7-night average drops further than that: half the spread of your 60-day history, or 3% of your baseline, whichever is larger, and never more than 15% of your baseline. A week that moves around inside your normal range is a recovered week, whichever direction it moved.

7-night average vs your baselineSubscore
At or above your baseline100
Below, but within your normal swing100–90
From your normal swing down to 20% below90–30
20–30% below30–0
More than 30% below0

How long it takes. The baseline needs 14 recorded nights in the 60 days before today. Until then the app shows your 7-night average and says the baseline is forming, and readiness leaves both HRV components out and spreads their weight across the other components. Until your history reaches back about 50 days, the sheet notes how many nights the baseline is built from; after that, missed nights just leave it with fewer points. rMSSD and SDNN are kept on separate baselines and are never compared to each other. rMSSD is used once it has a baseline; until then, SDNN is used if it has one. When SDNN is the series being scored, the readiness sheet labels the rows "HRV (SDNN)" and "HRV Last Night (SDNN)" so you can tell it apart from the rMSSD shown on the HRV Trend sheet.

Why a 60-day baseline? A short baseline quietly follows you down. If your HRV stays low for a month, a 30-day baseline drops to match it, your suppressed HRV becomes your new "normal", and the score tells you everything is fine. A 60-day baseline holds steady long enough that a bad month still reads as low, while real fitness gains become your new normal within two months.

HRV Last Night (15%)

This component compares last night's HRV to your typical range: your baseline plus or minus one standard deviation of your last 60 days, the same range the HRV Trend sheet shows. A night inside that range, or above it, scores 100 — ordinary night-to-night variation costs nothing, and an unusually high night earns nothing extra, since very high overnight HRV can also come with an illness. A night below the range points to acute stress, and the score falls the further below it lands.

Last night vs your typical rangeSubscore
Inside or above the range100
Below the range, by up to one more standard deviation100–0
Further below0

Baevsky Stress Index modifier

If Baevsky SI is available, it applies an additive adjustment to the HRV subscore. Two scales are supported depending on your calculation method setting:

ScaleConditionAdjustment
Normal (raw SI, ~10–400+)SI < 50+8
SI 50–1000
SI 100–200−8
SI > 200−15
Sqrt (√SI, ~0–10+)SI < 7+8
SI 7–100
SI 10–14−8
SI > 14−15

The Sqrt thresholds are the mathematical square roots of the normal thresholds.

Sleep Quality (30%)

This is the same sleep score computed independently (see the Sleep Score section below) and reused as a readiness component. If sleep stage data is available, it incorporates duration, deep sleep, REM sleep, and restfulness. Without stage data, duration and restfulness drive the score.

Training Load Balance (20%)

Uses TSB% = ((CTL − ATL) / CTL) × 100, sourced from Intervals.icu. Unlike raw TSB (CTL − ATL), this normalizes by fitness level — a −30% imbalance means the same thing whether the athlete's CTL is 50 or 150. Omitted when CTL or ATL is unavailable.

TSB% RangeSubscore
≥ +25%100 — tapered / peaked
+10% to +25%90–100 — fresh
0% to +10%80–90 — easy week
−15% to 0%70–80 — normal training
−30% to −15%55–70 — hard training block
−50% to −30%30–55 — functional overreaching
< −50%20 — non-functional overreaching

Sleeping Heart Rate vs Baseline (15%)

Overnight resting HR is an inverted metric — lower relative to your baseline is better. With ≥7 days of history, your personal mean is used. Without sufficient history, an absolute scale (45 bpm = 100, 75 bpm = 0) acts as a fallback.

Overnight heart rate is one of the steadiest signals your watch records — within one person it usually varies by only a few beats from night to night. A rise of 5–10 bpm above your own baseline is well outside that range, so the scale drops sharply through it. Common causes are an incomplete recovery from a hard session, alcohol, a late or large meal, a warm room, or the day or two before an illness shows itself.

Ratio to personal baselineSubscore
≤ 1.00×100 — at or below your baseline
1.00–1.05×100–90 — normal night-to-night margin
1.05–1.10×90–68 — noticeably elevated
1.10–1.20×68–32 — poor recovery or a hard effort the day before
1.20–1.30×32–15 — heavy fatigue or possible illness
> 1.30×12

Modifiers (Penalty Only)

After the weighted component sum is calculated, up to four modifiers apply additive penalties. Modifiers can only reduce the score — normal readings have no positive effect. They represent red-flag conditions that signal something is wrong, not qualities that make you more ready.

finalScore = clamp(weightedSum + breathingModifier + spO2Modifier + rampRateModifier + wristTempModifier, 0, 100)
ModifierConditionPenalty
Breathing Disturbances< 10 events/hr0
10–20 events/hr−5
20–35 events/hr−12
> 35 events/hr−20
Blood Oxygen (SpO₂)≥ 92%0
90–92%−5
88–90%−10
< 88%−15
Training Ramp Rate≤ 50
5–7−3
7–10−8
> 10−15
Wrist Temperature (deviation from norm)≤ +1.0°C0
+1.0 to +1.5°C−3
+1.5 to +2.0°C−6
> +2.0°C−10

In an extreme scenario, all four modifiers could stack to a combined −59 points — but this would require severe breathing disturbances, low blood oxygen, a steep training ramp, and elevated temperature simultaneously, which is precisely the situation where a dramatic score reduction is warranted.


Sleep Score

The Sleep Score is a single nightly number (0–100) summarizing how restorative your sleep was. Two methods are available and can be selected in Settings. Both produce scores on the same label scale and both use the same dynamic weight redistribution — if a component's data is missing, the remaining weights normalize to 100%. Neither method applies post-score modifiers; all factors are weighted components.

Labels: Excellent (85+), Good (70–84), Fair (60–69), Pay Attention (<60).

Method 1: Stages + Restfulness

This method uses four components available from Apple HealthKit: total sleep, deep sleep, REM sleep, and restfulness. Three additional factors (sleep efficiency, latency, and timing) are not available from HealthKit, so their weight is redistributed across the four available components.

ComponentWeightData Source
Total Sleep40%Total sleep duration
Deep Sleep20%Minutes of deep sleep
REM Sleep20%Minutes of REM sleep
Restfulness20%Breathing disturbances, or awake time if unavailable

Total Sleep (40%) — Full credit across 7–9 hours

HoursSubscore
< 4h0–15
4–5h15–30
5–6h30–50
6–6.5h50–70
6.5–7h70–100
7–9h100 — optimal window
9–10h100–92 — mild oversleep taper
10–11h92–75
11h+75 — floor

The drop below seven hours is steep. Short sleep is not a small shortfall: six hours a night for two weeks has been shown to produce the same deficits as two nights with no sleep at all. Sleeping longer than the optimal window costs far less, because the evidence on long sleep is weaker and is tangled up with illness.

Deep Sleep (20%) — Scored in minutes against an age-adjusted target

The target runs from about 90 minutes at age 25 down to about 45 minutes at 65. Deep sleep is measured in minutes rather than as a share of the night because your body produces roughly a fixed amount of it, mostly in the first few hours. Extra sleep later in the night is mostly REM and light sleep, so a percentage target would lower your score for sleeping longer on exactly the same deep sleep.

Deep sleep minutesSubscore
Under a third of target0–50
A third of target up to target50–100
At or above target100

The scale bottoms out at 50 rather than 0 because stage balance is not something you can choose, and a single night says little on its own.

REM Sleep (20%) — Scored in minutes against a 100-minute target

100 minutes is about 22% of an eight-hour night. Like deep sleep, REM is measured in minutes rather than as a share of the night, and for a stronger reason: REM periods get longer toward morning, so a short night cuts REM more than it cuts anything else. Scoring the share would hide that — a small amount of REM can be a large percentage of a short night. The target is the same at every adult age, since REM changes far less over a lifetime than deep sleep does.

REM minutesSubscore
< 33m0–50
33–100m50–100
≥ 100m100

Restfulness (20%)

Breathing disturbances data (events per hour) is preferred. If unavailable, awake time as a percentage of total sleep is used as a fallback.

Breathing disturbances (events/hr)Subscore
< 5100
5–1080–100
10–2050–80
20–3520–50
35+10
Awake time (% of total sleep — fallback)Subscore
< 2%100
2–5%85–100
5–10%60–85
10–15%35–60
15%+10–35

Method 2: Duration / Bedtime / Interruptions

A simpler three-factor formula that does not require sleep stage data. It adds bedtime timing as a scoring dimension, rewarding circadian-aligned sleep.

ComponentWeightData Source
Duration50%Total sleep duration
Bedtime30%Sleep onset time
Interruptions20%Breathing disturbances, or awake time if unavailable

Duration (50%) — Flat optimal window (AASM 7–9h)

Both methods use the same duration scale, so a given night's duration is worth the same either way. Only its weight in the total differs.

HoursSubscore
< 4h0–15
4–5h15–30
5–6h30–50
6–6.5h50–70
6.5–7h70–100
7–9h100 — flat optimal
9–10h100–92
10–11h92–75
11h+75 — floor

Bedtime (30%) — Sleep onset scored against a ~10pm circadian optimal

Hours before 6am are treated as late night (e.g. 1am is scored as late, not early morning).

Bedtime (sleep onset)Subscore
Before 8pm60 — unusually early
8–9:30pm60–80
9:30–11pm100 — optimal window
11pm–midnight80–100
Midnight–1am50–80
1–3am10–50
After 3am10

Interruptions (20%)

Uses the same scoring as Method 1's Restfulness component: breathing disturbances preferred, awake time as a percentage of sleep as a fallback.

Comparing the Two Methods

Stages + RestfulnessDuration / Bedtime / Interruptions
Requires sleep stage dataYes, for full scoreNo
Uses bedtime timingNoYes — 30% weight
Duration curve shapeThe same scale in both — flat 100 across 7–9h
Best forApple Watch users with sleep stage trackingUsers who want bedtime accountability