O Oura + Garmin, one place

Your ring and your watch,
finally reading from the same page.

Health Dash merges overnight recovery data from an Oura Ring with training data from a Garmin watch and scale, then turns both into one coherent picture — daily rings, sleep architecture, biological age, charted trends and a training plan you can actually follow.

Connects via the Oura API v2 and the intervals.icu API. Your data lands in your own database.

Today Synced from Oura & Garmin
86
Readiness
Oura
75
Sleep
Oura
79
Rebound
HRV & RHR
42
Effort
Garmin
73
Charge
Energy

Start here

Which setup are you?

Three ways in. Find the one that matches what you already own — each card says exactly what you get and what you don't.

O
Oura only

Best recovery picture, no training data.

You get

  • Sleep score and the full stage breakdown — deep, REM, light, awake
  • Sleep efficiency
  • HRV, resting heart rate, readiness
  • SpO₂, respiration rate and body temperature deviation
  • Daytime stress, resilience, cardiovascular age
  • All-day heart rate, steps, all-day calories

You miss

  • Recorded workouts — GPS, laps, HR zones, running dynamics, power
  • VO₂ max
  • Training load and the fitness / fatigue / form model
  • Weight and body fat
ReadinessSleepReboundEffortpartChargeStress

Your dashboard rings on this setup — Effort runs from all-day movement only.

G
Garmin only

Great training data, lighter on recovery detail.

You get

  • Sleep duration, sleep score and sleep quality
  • Resting heart rate, HRV — including HRV SDNN
  • Respiration rate, and blood oxygen with Pulse Ox enabled
  • All-day stress score — Garmin's own 0–100 daily average
  • Steps, and Garmin's own readiness score
  • Every workout: GPS route, per-second heart rate, lap splits, time in HR zones, running dynamics and power
  • VO₂ max, training load, and the fitness / fatigue / form model
  • Weight and body fat from an Index scale

You miss

  • Sleep stage breakdown — deep, REM, light
  • Sleep efficiency
  • All-day heart rate
  • Body temperature deviation
  • Resilience and cardiovascular age
  • All-day calorie burn — workouts only
ReadinessSleepReboundEffortChargeStress

All five rings — Sleep scored without the stage breakdown.

Your Garmin measures sleep stages, but intervals.icu (how Garmin data reaches the app) has no field for them, so they can't be passed through.

Try the live demo — switch between all three setups

No account needed. See exactly what each route looks like before you wire anything up.

The devices

Two sensors, two jobs.

The ring never comes off, so it owns the overnight and all-day story. The watch goes on for training, so it owns the workout story. Health Dash keeps both honest about which one is talking.

Oura Ring
Worn 24/7
O

The primary source for everything that happens while you are not training — overnight sleep and all-day physiology.

  • Sleep stages
  • HRV
  • Resting heart rate
  • Readiness
  • SpO₂
  • Body temperature deviation
  • Stress
  • Resilience
  • Cardiovascular age
  • All-day heart rate

Primary source for overnight and all-day metrics.

142 BPM
Garmin wearable
Any watch or band — Fenix, Forerunner, Venu and the rest
G

Everything about the session itself: where you went, how hard it was, and what it cost you.

  • GPS activities
  • Per-second heart rate
  • Laps
  • Time in HR zones
  • Running dynamics
  • Training load
  • VO₂ max

Anything that syncs to Garmin Connect counts as Garmin here — watch or band, it all arrives the same way, through the intervals.icu API.

74.2 kg
Garmin Index scale
Optional
G

Step on it and the numbers arrive on their own — no logging, no typing, no forgetting.

  • Weight
  • Body fat percentage
  • Automatic sync

No scale? Type a default weight into your profile instead and everything that depends on it still works.

What you get

Nine screens that answer real questions.

Not a wall of numbers. Each page exists because there was something you kept wanting to know.

Daily rings & insights

Five rings — Readiness, Sleep, Rebound, Effort and Charge — with the day's insight written underneath them.

Sleep architecture

Deep, REM and light stage ratios night by night, so you can see whether a bad score was short sleep or shallow sleep.

Biological age & bloods

VO₂ max percentile, Fitness Age, Cardiovascular Age and Framingham Heart Age calculated from your blood panels.

28+ charted metrics

Around 28 metrics you can chart over any window, each with an AI overview explaining what the trend is doing.

Activity deep-dives

Every Garmin workout logged, openable down to laps, time in HR zones and the raw per-second streams.

Calendar & notes

A month view of what you actually did, with your own notes and planned workouts sitting alongside it.

Training plans

Generate a plan toward a race date, approve it into the calendar, then track planned against actual as the weeks go by. A separate Targets page holds what you're aiming at.

AI Coach

Coming soon

A chat that can see your data and answer questions about it. Not live yet.

Inside the app

The Metrics page, in motion.

Every metric the app charts, in one row. Pick your setup and the ones you wouldn't get grey out — so you can see exactly what each combination is worth before you buy anything.

healthdash / metrics
Sleep Score Sleep Duration Deep Sleep REM Sleep Sleep Efficiency Readiness HRV Resting HR Sleeping HR Respiration SpO₂ Body Temperature Steps Active Calories Total Burn Stress Resilience Cardiovascular Age Pulse Wave Velocity Breathing Disturbance Weight Body Fat VO₂ Max Workout Distance Workout Time Training Load Workout Calories Avg Run Pace Workout Avg HR Fitness / Fatigue / Form
HRV (night avg) 74ms ▲ 9% vs your 30-day baseline O
Aug 2Aug 9Aug 15
Written overview HRV — 14-day overview

Night-average HRV is trending up with the usual saw-tooth around hard days, and every reading is set against your own rolling baseline rather than a population average. Nothing in the shape suggests you are digging a hole.

Sample values. Metrics greyed out and struck through aren't available on the setup you've picked. The real page charts around 28 metrics over any window you choose, each with its own written overview underneath.

Written for you

Every page explains itself.

Numbers on their own make you do the interpreting. Health Dash writes the interpretation for you — on every page, from that page's own figures, over the window you picked, against your own baseline.

Every page, its own overview

Each page is read on its own numbers. Nothing generic, nothing recycled from another screen.

It reads the window you picked

Choose a single day and it reads that day. Choose 7, 30 or 90 days and it reads the trend across that window.

A morning and an evening read

The dashboard gets both: the morning covers last night's sleep and recovery and gives a verdict on any workout planned that day; the evening recaps how the day actually went and flags one thing to consider for tomorrow.

Scores explained, not just displayed

For sleep and health scores: what the number means, which underlying factors moved it, and what to do about it.

Charts come with the words

What the metric physiologically measures, what your particular series is doing with real figures, and what that means practically.

Measured against your baseline

Every number is compared to your own rolling baseline, so "high" and "low" mean high and low for you.

☀️ Morning — Sleep & Recovery AI

Overnight HRV of 74 ms ran 9% above your 30-day baseline and resting heart rate of 49 bpm sits below your 51 bpm norm — a well-recovered nervous system. Sleep was strong (score 84, 7.6h) with deep at 21% and REM at 23%, both inside the restorative bands. Green light for the planned tempo run — readiness of 87 supports training with intent.

🌙 Evening — How the day went AI

Training today: Tempo Run (10.5 km, 52 min, avg 168 bpm), adding 88 training load — a substantial stimulus that will need matching recovery tonight. Movement closed on 12,800 steps and 880 active calories, well above your average. Tomorrow is unscheduled; protect sleep tonight and let the morning numbers decide whether it becomes an easy run or a rest day.

Sleep Score · 7-day overview AI

Sleep score averaged 79 across the week, held back on two nights by REM falling under 18% of the night rather than by short duration. Both followed late finishes — REM concentrates in the second half of the night, so a fixed wake time trims it first. Bedtime consistency is the lever here, not more hours.

HRV · 30-day overview AI

Heart rate variability is the beat-to-beat variation in your heart rhythm overnight, reflecting parasympathetic activity. Over the past month it has risen about 17%, from an average of 71.2 ms in the earlier half to 83.2 ms more recently — a move in the right direction. HRV is highly individual, so the trend against your own baseline matters far more than the absolute number.

HRV (night avg) O

Pick a period — the overview is rewritten for it.

AI overview

Last night HRV averaged 74 ms — 9% above your 30-day baseline, and your highest reading of the week.

Across the week HRV averaged 76 ms, holding above baseline apart from one dip the morning after Thursday's tempo run.

Over the month HRV has risen about 17%, from an average of 71.2 ms in the earlier half to 83.2 ms more recently.

Across the quarter HRV has climbed through two training blocks, with the clearest gains in the most recent one.

The written analysis is generated from your own data and compared against your own baselines. It is not medical advice.

How data flows

Two pipelines, one merge.

Oura talks to Health Dash directly. Garmin devices go via Garmin Connect and intervals.icu. Both land in a merge engine that decides which source wins for each metric.

Oura Ring
Worn 24/7
Garmin watch
Worn for workouts
Garmin Index scale
Optional
Oura API v2
Personal access token
Garmin Connect
→ intervals.icu API
Merge engine
Oura primary, Garmin fallback
Dashboard
Rings, sleep, metrics, activities

Every value on screen is tagged with the source it came from, so you always know whether you are looking at the ring, the watch, intervals.icu or a figure calculated here from your own data.

Inside the app

A few pieces, up close.

Sample values shown — these are the components you'll be reading every morning.

HRV (night avg) O
64ms
▲ 6 ms vs 7-day average

Glance card. One metric, its change against the recent baseline, and a 14-day sparkline. The dashboard is a grid of these.

Last night — 7h 24m O
Deep 1h 33m · 21% REM 1h 47m · 24% Light 3h 47m · 51% Awake 4%

Sleep architecture. Stage ratios for the night, from the Sleep page. Deep and REM are the two you care about; light is whatever is left.

Tempo run — time in zone G
Z16:10
Z216:40
Z327:05
Z438:20
Z58:15

HR zones. From the activity deep-dive, built out of the per-second heart rate stream alongside laps and training load.

August Done · Planned · Note

Calendar. Completed activities, planned sessions from an approved training plan, and your own notes — on one grid.

Pricing

Try everything free for 14 days.

Two weeks is enough to connect your devices, pull in your history, and watch the rings calibrate to you. No card needed to start — pick a plan when you've seen it work.

Free trial
$0 for 14 days
  • The full product — every ring, page, metric and chart
  • Both devices, plus your historical data brought in
  • A taster of the AI coach — 5 chats, 4 messages a day

Your data and history carry straight over when you pick a plan.

Coach
$15 / month
  • Everything in Core
  • The AI coach — training and recovery advice grounded in your own numbers, workouts and plans
  • Up to 12 coach messages a day

During the private beta everything is free — pricing applies from public launch.

FAQ

The questions people actually ask.

Mostly about devices, and mostly about what happens when two of them disagree. That is the whole problem this app exists to solve, so it gets the longest answers.

Do I need both an Oura ring and a Garmin?

No. One is enough, and the price is the same either way.

What changes is which screens fill in. Oura alone gives you sleep stages, efficiency, readiness, temperature deviation, daytime stress, resilience and cardiovascular age — the overnight and all-day picture. Garmin alone gives you VO₂ max, training load, recorded workouts with GPS and heart-rate zones, and weight from a connected scale — the training picture. Apple Health alone covers the basics from an Apple Watch or anything else that writes to it.

Together they cover each other's blind spots, which is the setup the app was built around. But no screen is empty because you only own one device — we hide what a source genuinely cannot supply rather than showing you a card with a dash in it.

Why does Garmin data come through intervals.icu instead of directly?

Because Garmin does not offer a self-serve API for individuals. Their developer programme is aimed at companies, with an approval process and commercial terms behind it.

intervals.icu already holds an approved Garmin connection, is free, and is widely used by endurance athletes. You connect Garmin Connect to intervals.icu once, then give us your intervals.icu athlete ID and API key. Your Garmin data flows Garmin → intervals.icu → here.

The honest cost of that route: it carries what intervals.icu has a field for. Total sleep, sleep score, sleep quality and average sleeping heart rate come through. Sleep stages do not — there is no field for them in the schema, so they are lost in transit rather than missing from your watch. The Apple Health route below is the way to get them.

My Garmin tracks sleep stages. Why are they blank?

Your watch measures them; the route they take to reach us cannot carry them. intervals.icu has no deep/REM/light fields at all — we checked the full wellness schema rather than assuming.

The fix is Apple Health. Garmin Connect writes sleep stages into Apple Health on your iPhone, and an export app pushes them to us from there. Set that up and the stage timeline fills in on a Garmin-only setup.

What happens when both devices report the same thing?

One wins, and the app tells you which. Every number carries a small badge naming the source that actually produced it — O Oura, G Garmin, I intervals.icu, A Apple Health, S smart scale, M entered by you, C calculated here.

We never average two devices into one figure. Blending a sleep score from one with stages from another would describe a night neither device measured. One source per metric, per day, named on screen.

You set the order in Setup, separately for overnight metrics (sleep, HRV, resting heart rate, readiness) and all-day ones (steps, respiration, SpO₂, calories). By default Oura goes first, because it is worn around the clock by design.

If I pick one device as primary, do I lose the other?

No. The setting is a priority order, not an exclusion.

Whichever device you put first is used wherever it has data, and the other still covers the days it missed. A night your ring spent on the charger shows your watch's number, badged G, rather than a gap in the chart — and the app puts a note on the screen saying the fallback filled in, so a number that quietly changed source never goes unexplained.

That matters more than it sounds: a preference that switched a device off entirely would mean choosing a favourite silently cost you every day the other one covered.

I wore both devices for one workout. Will it appear twice?

It will appear twice, and both will be labelled “also on another device”.

We flag the overlap rather than picking a winner, because the two genuinely disagree — different sensors, different calorie models, and Garmin has GPS distance where Oura has none. Neither is wrong, and silently deleting one would hide a real difference from you.

Sessions starting within twenty minutes of each other on different devices are treated as the same workout. Back-to-back sessions on the same device are left alone.

Which numbers does the app calculate itself?

Three of the rings and two of the age cards. Everything else is passed through from your device unchanged.

Rebound, Effort and Charge are ours, scored against your own recent baselines rather than a population — so the same value means the same thing whether your HRV runs at 30 ms or 90. Fitness Age and the VO₂ percentile implement the FRIEND registry treadmill norms; Heart Age implements the published Framingham cardiovascular risk model from your blood panel.

The app shows the arithmetic. Open any ring and it names every input, the device that supplied it, and — for our own scores — the exact formula. A health number you cannot interrogate is worth less than one you can.

Why doesn't my Fitness Age match Garmin's?

Because they are two different calculations, and neither is “the” answer.

Ours inverts one published dataset: the age at which your VO₂ max equals the population median for your sex. It therefore moves with VO₂ max alone, and near the top of the range it moves fast. Garmin's comes from Firstbeat's model, which blends in resting heart rate and body composition and is calibrated against a different population, so it sits closer to your real age by construction. Expect ours to read younger.

The percentile shown beside it is the number to trust — it makes no modelling assumptions beyond the reference dataset itself.

Is cardiovascular age something you calculate?

No — that one is Oura's own measurement, passed through untouched. The ring reads arterial stiffness from the shape of the pulse waveform in its optical sensor.

It is the one card with no fallback. Neither Garmin nor Apple Health publishes an equivalent, and resting heart rate and HRV cannot stand in for it — they track autonomic tone, which is a different thing entirely. Without a ring the card says so rather than estimating something it cannot measure.

What does the AI actually see?

Your recent numbers and your baselines. Nothing else.

It does not receive your name, your email, your raw history, or any data belonging to another user — there is no shared pool to draw on. Each written overview lists the exact values that went into it, so you can check what it was told.

When the AI is unavailable, a rule-based writer takes over and the badge changes from AI to auto. The card still appears and still says something true about your day; it just says it in fixed sentences.

Can I use it with neither an Oura nor a Garmin?

Yes, through Apple Health — an Apple Watch, a Whoop, a Fitbit, a smart scale, anything that writes there. Your phone pushes the metrics you choose to a private URL we issue you.

It is a one-way push from your device. We hold no Apple credentials, cannot read your phone, and cannot request anything you have not configured it to send. Resetting the URL in Setup stops it immediately.

Apple Health also sits behind the direct integrations rather than competing with them: where Oura or Garmin already has a reading, theirs wins, and Apple fills the gaps they leave.

What happens to my history if I switch devices?

It stays. Readings are stored per day with the source that produced them, so a year of Garmin followed by a year of Oura reads as one continuous history with the badges changing partway through.

Baselines adapt on a rolling window rather than being fixed at signup, so scores measured against “your normal” recalibrate to the new device within a few weeks. Expect some step change at the switch — two devices genuinely measure differently, and pretending otherwise would be the dishonest option.

How often does it sync, and does my data leave?

Every thirty minutes while you are connected, plus on demand. Your first sync pulls roughly three months of history so the charts have something to say on day one.

Your data goes to the AI provider only when you use an AI feature, and only as the summarised numbers described above. It is never sold, never shared with advertisers, and never used to train models. The full detail is in the privacy policy, and the calculation sources are set out in section 3 of the terms.

Ready to wire it up?

You need an intervals.icu account with Garmin Connect attached, and — ideally — an Oura personal access token. The guide walks through both, in order.