Skip to main content

Oura Ring

Per-night sleep stages, HRV, readiness, and body temperature from your Oura account export. Read locally, never sent anywhere.

Read your Oura account export, joined to your CPAP nights

An Oura ring records sleep stages, heart rate, heart-rate variability (HRV), respiratory rate, body temperature, and (on Gen 3 and later rings) overnight blood-oxygen estimates. The Oura app shows you these numbers; CPAP Clarity is what you import them into when you want them sitting next to your CPAP therapy data on the same calendar night.

Two import paths work, and they complement each other. The full account-export ZIP from Oura's Membership Hub carries everything (sleep stages, SpO2, stress, full history) but Oura prepares it on request and delivery can take days. The Trends CSV from cloud.ouraring.com (Trends, Period set to Daily, Download Data) downloads instantly and keeps recent nights current, at the cost of the stage timeline, SpO2, and stress detail. Drop either file into the Dashboard import zone; everything is parsed in your browser and stored in IndexedDB. A Trends import never overwrites the richer full-export version of the same night. The Oura account is read-only on our side; we cannot write to it, and neither file is retained anywhere outside your browser tab.

Once imported, the dashboard automatically joins each Oura night to the CPAP session on the same date. A night with high CPAP leak that also shows reduced REM percentage and elevated resting heart rate tells a richer story than either source alone. The full join logic is documented in the Oura ring guide for CPAP users.

How to read these numbers

Sleep stages (deep, REM, light, awake) are estimated from movement and pulse pattern, not measured by EEG. They track relative night-to-night change reliably; they do not substitute for sleep-lab scoring. HRV (heart-rate variability) and resting heart rate are sensitive autonomic signals; declines often precede subjective fatigue by a day or two. Body temperature deviation tracks your 7-day baseline, not absolute body temperature, so a 0.5 F deviation is meaningful even if the absolute reading looks normal. SpO2 on Gen 3 and later rings is an estimate, not a calibrated medical measurement; treat it as one of several data points, not as a diagnostic threshold.

These are wellness measurements, not clinical signals. Wearable sleep stages are estimates derived from movement and pulse, not the gold-standard EEG a sleep lab uses. Use these readings as one more data point in conversation with your sleep physician, not as a replacement for the CPAP data your machine records.

Read the full guide: Oura ring for CPAP users →

Frequently asked questions

How do I get my Oura account export ZIP?

Sign in at cloud.ouraring.com, open Account, then Export Data. Oura prepares the file on their side and emails you a download link; timing varies from minutes to, in some cases, several days, because Oura treats this export as an occasional full archive rather than a frequent refresh. The ZIP contains 39 CSVs covering daily sleep, readiness, HRV, body temperature, SpO2 (Gen 3 and later), heart rate, and movement. Drop the entire ZIP into the Dashboard import zone on cpapclarity.com; CPAP Clarity unzips it in your browser.

What is the Trends CSV, and when should I use it instead?

The Trends download is the quick path for keeping recent nights current. On cloud.ouraring.com (Gen 3 and Ring 4 with an active membership), open Trends, set the Period to Daily, pick your date range, choose Download Data, and select all metrics. The CSV downloads instantly and CPAP Clarity imports it from the same drop zone. It carries nightly sleep scores, durations, HRV, resting heart rate, respiratory rate, temperature deviation, and readiness, but NOT the sleep-stage timeline, SpO2, or stress data; only the full account export has those. Trends imports never overwrite nights you already imported from the full export.

How often should I use each export?

Use the Trends CSV for routine refreshes (weekly, or whenever you want recent nights on the dashboard), since it downloads instantly. Request the full account export occasionally (for example every month or two, or after a long gap) to backfill the detail Trends lacks: the sleep-stage chart, SpO2, and stress data. Because a full-export import replaces the lighter Trends version of the same nights, the occasional ZIP refresh upgrades everything in between.

Does CPAP Clarity read my Oura data in real time?

No. CPAP Clarity reads files you download from Oura, not the Oura cloud API. There is no live connection. To pick up new nights you re-export from Oura and re-import. The trade-off is that nothing on this site holds an OAuth token to your Oura account; you fully control when data leaves Oura and when it lands on your computer.

My Oura ring is Gen 2. Is SpO2 supported?

Overnight SpO2 estimation requires Gen 3 hardware (released late 2021) or later. Gen 2 rings will still produce sleep stages, HRV, body temperature, and readiness data, all of which CPAP Clarity reads, but the SpO2 column will be empty. The /oura page hides SpO2 charts when no data is present rather than showing zeros, so a Gen 2 user simply does not see that surface.

Will Oura sleep stages match what a sleep study showed?

Not exactly. Oura estimates sleep stages from movement and pulse pattern, while a sleep study uses EEG, EOG, and EMG to score stages directly. The two methods agree on overall structure (sleep / wake, REM presence) but disagree on minute-by-minute scoring. Use Oura sleep architecture as a relative trend, not an absolute label. A drop in REM percentage on multiple nights with high CPAP leak is meaningful even if the absolute REM minutes do not match a sleep lab. CPAP Clarity surfaces these as wellness metrics, not clinical signals.

Can I import multiple years of Oura data at once?

Yes. The 39-CSV export covers your entire account history. The maintainer test fixture (used to validate the parser) runs against 7+ years of nightly data (2,710 nights) and parses in approximately 13 seconds in browser. Streaming aggregators bucket the per-second heart-rate (753K rows on the reference user) and per-second body-temperature (1.85M rows) data by user-local-day so memory stays bounded.