Scores

How Vitalstat Calculates Your Scores

Vitalstat computes sleep, recovery, and strain scores tailored to each data source. Here is exactly how each score works for every supported device.

Score Overview

Sleep Score (0–100) — summarizes your overall sleep quality for a given night. Factors include total duration, time in each sleep stage, heart rate patterns, and sleep consistency.

Recovery Score (0–100) — measures how well your body has recovered overnight. Based on heart rate variability, resting heart rate, sleep quality, restorative sleep stages, and respiratory rate. Compared against your personal 28-day baseline.

Strain Score (0–100) — quantifies the total physical stress accumulated during the day through workouts, heart rate elevation, and calorie expenditure. Use it alongside recovery to balance training and rest.

Scoring by Device

ScorePolarApple WatchGarminOura Ring
SleepNative APINative or CalculatedNative APINative API
RecoveryCalculated (5 metrics)Calculated (5 metrics)Synthesized (4 metrics)Native (Readiness)
StrainCalculated (3 metrics)Calculated (3 metrics)ApproximatedNot available

Polar

Sleep Score

Native from API

Polar provides a native sleep score (0–100) directly from the API. Vitalstat applies dynamic adjustments via a volatile sleep score calculation that compares the current night against your 28-day historical average.

Recovery Score

Calculated in-app

A weighted composite of five overnight metrics, each compared against your 28-day rolling baseline:

Sleep Performance(40%)

Volatile sleep score adjusted against baseline

Heart Rate Variability(25%)

Current HRV vs. your 28-day average

Restorative Sleep(15%)

Deep + REM sleep ratio vs. baseline

Resting Heart Rate(10%)

Lower is better, compared to baseline

Respiratory Rate(10%)

Stability compared to baseline

Strain Score

Calculated in-app

Three components combined into a 0–100 score:

Exercise Intensity(45%)

Active calories from daily activity

HR Elevation(40%)

Average heart rate above resting baseline

Sleep Deficit(15%)

Inverse of sleep quality — poor sleep increases strain

Apple Watch

Sleep Score

Native or Calculated

Uses the native HealthKit sleep score when available. When Apple does not provide a score, Vitalstat calculates one using sleep duration, sleep efficiency, deep/REM percentage, and interruptions — all compared against a 28-day baseline.

Recovery Score

Calculated in-app

Same weighted methodology as Polar, using only overnight vitals from HealthKit:

Sleep Performance(40%)

Duration and quality vs. baseline or target

Heart Rate Variability(25%)

Overnight HRV/SDNN vs. 28-day average

Restorative Sleep(15%)

Deep + REM ratio vs. baseline

Resting Heart Rate(10%)

Overnight resting HR, lower is better

Respiratory Rate(10%)

When available from HealthKit

Strain Score

Calculated in-app

Three components with logarithmic scaling for duration:

Heart Rate Intensity(0–50 pts)

HR elevation above resting baseline

Workout Duration(0–30 pts)

Logarithmic scaling prevents saturation at high durations

Active Calories(0–20 pts)

Calories burned through activity

Garmin

Sleep Score

Native from API

Garmin provides a native sleep score (0–100) along with component subscores for REM, NREM, and awakenings. Sleep stress data (0–100) is also available for deeper analysis.

Recovery Score

Synthesized from components

Garmin does not provide a single recovery score, so Vitalstat synthesizes one from available metrics:

Sleep Score(40%)

Native Garmin sleep score (0–100)

HRV(25%)

Normalized from 10–70ms range to 0–100

Resting Heart Rate(20%)

Mapped from 80–40 bpm to 0–100

Body Battery(15%)

Daily high from Garmin's proprietary metric

Strain Score

Approximated

Garmin does not expose a native strain metric. Vitalstat provides a rough approximation based on active calories burned during the day.

Oura Ring

Sleep Score

Native from API

Oura provides a native sleep score (0–100) from the daily sleep endpoint. When the daily score is unavailable, Vitalstat falls back to the session-level sleep efficiency score. Only "long sleep" records are included — naps are excluded.

Recovery Score

Native from API

Uses Oura's Readiness Score directly — a comprehensive metric that Oura calculates from multiple contributors:

Activity Balance

Recent activity relative to your baseline

Body Temperature

Deviations from your personal norm

HRV Balance

Current HRV trend vs. baseline

Resting Heart Rate

Overnight resting HR trends

Sleep Balance

Recent sleep debt or surplus

Recovery Index

How quickly your HR stabilizes during sleep

Strain Score

Not available

The Oura API does not expose a strain metric. Activity stress minutes are tracked but not mapped to a strain score.

Frequently Asked Questions

How is the recovery score calculated?

The recovery score is a weighted composite of overnight metrics: heart rate variability (HRV), resting heart rate, sleep quality, restorative sleep (deep + REM), and respiratory rate. Each metric is compared against your personal 28-day baseline. For Oura Ring users, we use the native Readiness Score directly from the Oura API.

What is the strain score?

The strain score measures the total physical stress your body has accumulated during the day. It factors in heart rate intensity above your resting baseline, workout duration, and active calories burned. A higher strain score means your body needs more recovery time.

Are the scores the same across all devices?

Scores vary by device because each source provides different raw data. Polar and Garmin provide native sleep scores from their APIs. Oura provides both a native sleep score and a Readiness score. For Apple Watch, Vitalstat calculates scores using HealthKit data. The methodology is tuned per source to ensure accuracy.

What is a good recovery score?

Recovery scores range from 0 to 100. A score above 70 generally indicates your body is well-recovered and ready for intense training. Scores between 40 and 70 suggest moderate recovery — lighter activity is recommended. Below 40 indicates your body needs rest.

Why does the recovery score use a 28-day baseline?

Using a rolling 28-day baseline personalizes the score to your body. Instead of comparing against population averages, the score reflects how today compares to your recent normal. This means improvements in fitness are reflected over time as your baseline shifts.

See your scores in action

Download Vitalstat and get personalized sleep, recovery, and strain scores from your Apple Watch, Garmin, Polar, or Oura Ring.