Strongest Point › Connect › Oura ring

Connected sources

Oura ring

A small program on your own computer signs in to Oura once, through your browser, and sends the ring's numbers to your card every morning: hours asleep, the sleep and readiness scores, resting heart rate, HRV, steps and active calories. It can also backfill every night since you got the ring. Your Oura login and tokens stay on your computer. About fifteen minutes the first time; after that it runs by itself. If you would rather not install anything, the Apple Health Shortcut at the bottom of this page works too, for last night only.

Oura retired personal access tokens in December 2025, so the script signs in the way an app does: you create a free “application” of your own on Oura's site (two minutes) and the script uses it. Oura lets a new application connect up to ten rings without further approval, which is plenty for a household.

What you need

What is kept where

1. Make a key in the app

Open Strongest Point, go to Account & plan, scroll to Connected sources, choose Oura ring and tap Make a key. Copy the key. Until it has been used once, “Copy again” stays next to it in the list on that device; once it has been used, nobody can read it back. If you lose it then, turn it off and make another.

2. Check what it fills

Under the key, “What it fills” lists the ring's seven numbers under their own names: sleep from the ring, sleep score, readiness, resting heart rate, HRV, steps and active calories. Pick an existing item for any of them (your hours-of-sleep item, say), tap “Add a new item for it”, or “Add items for the rest”. Leave what you don't want on Nothing. The ring's numbers are separate from the Apple Health and CPAP ones on purpose, so the ring's sleep can sit beside CPAP hours or replace them, your choice.

3. Get Python (once)

Mac: open python.org/downloads in your browser and click the big Download button. Open the downloaded file and click Continue through the installer. When it finishes, a Finder window opens; double-click “Install Certificates.command” in it, then close everything.

Windows: open python.org/downloads and click Download. Open the file. On the first screen tick “Add python.exe to PATH” (this matters), then click Install Now.

Any Python from 3.8 on works; nothing else needs installing.

4. Download the script

Right-click the link at the bottom of this page and choose Save Link As (Chrome) or Download Linked File As (Safari). Save it as oura.py in your Documents folder. If your browser adds .txt to the name, rename it so it ends in .py.

5. Create your Oura application (once)

Open cloud.ouraring.com/oauth/applications in your browser and sign in with your Oura account. Click to create a new application. Name: anything, say Strongest Point. Redirect URI: exactly http://localhost:8765/callback (the script listens there during sign-in; if that port is taken on your computer, pick another number and give the same number to the script in the next step). Save it. The page shows a Client ID and a Client Secret; keep that page open.

6. Open a command window in Documents

Mac: open Terminal (press Command-Space, type Terminal, press Return). Type cd Documents and press Return.

Windows: open the Start menu, type PowerShell, open Windows PowerShell. Type cd Documents and press Enter.

Everything below is typed into that window, one line at a time. On Windows, type py wherever the line says python3.

7. Set it up and sign in (once)

python3 oura.py --setup

It asks for the feed key from step 1 (paste it), the port (press Return for 8765), and the Client ID and Client Secret from step 5. Then it opens your browser on Oura's sign-in: sign in, tick the boxes, and allow it. The browser lands on a plain page that says you are connected; close it. The script says “Connected to Oura.”

If the browser shows a page that will not load instead, copy that page's full address from the address bar and paste it into the terminal when asked; the script reads the code out of it.

8. First run: three months of nights and days

python3 oura.py --days 90

It lists each day as it reads it (hours asleep, scores, resting heart rate, HRV, steps, calories), then “Sent. 240 written, 0 kept as typed” or similar. Any day you had already typed by hand is left alone, which is what “kept as typed” counts. Up to 400 days with --days 400. Open the app and look at a past day: the numbers are there, marked “filled in from Oura ring”.

9. Make it run every morning

python3 oura.py --install-schedule --at 08:35

That's it, on a Mac or Windows PC. Pick a time after you usually get up and the ring has synced with the Oura app; the script sends the last 7 days each run, so a morning the computer was off is caught up later. To stop it: --uninstall-schedule.

Which day a number lands on

A night lands on the morning you woke up, which is the day Oura itself gives it: last night's sleep, sleep score, readiness, resting heart rate and HRV are today's row. Steps and active calories are the whole day's, so they are sent the morning after (today's would be half a day). Naps are left out of the hours asleep unless you run the script with --naps.

If something goes wrong

What each number is

The script

Download: strongestpoint.com/connect/oura/oura.py (right-click, Save Link As). It is about 350 lines and needs nothing but Python; read it if you like. It only ever talks to Oura and to your card. The commands it understands: --setup, --connect, --days N, --naps, --dry-run (show the days, send nothing), --sandbox (Oura's sample data, to test the set-up), --install-schedule, --uninstall-schedule.

The other way: a Shortcut through Apple Health

If you would rather not install anything on a computer, the Oura app can share to Apple Health and a Shortcut on your iPhone can send last night from there, under the same ring names. It sends only the night just gone (no history) and only the five numbers Health holds (no sleep or readiness score). In the Oura app, open Settings, then Health, and turn on sharing to Apple Health for Sleep, Steps, Active Energy, Resting Heart Rate and Heart Rate Variability; give it a night to fill in.

1. Start a new Shortcut

Open the Shortcuts app, tap +, and name it "Send ring to Strongest Point". Add the actions below in order; each is found by searching its name.

2. Sleep from the ring

Action: Find Health Samples. Type: Sleep Analysis. Add a filter: Source is Oura (the filter is called Source, Source Name or App depending on iOS; pick the Oura app). Add a filter: Value is Asleep (or tick the asleep stages). Add a filter: Start Date is in the last 1 days. Sort off.

Action: Calculate Statistics, Sum of Duration. Action: Convert Measurement to Hours. Action: Round Number to 1 decimal place. Rename the result "ring_sleep_hours".

3. Steps and active calories

Steps: Find Health Samples, Type: Steps, filter Source is Oura, last 1 day; Calculate Statistics, Sum; Calculate, divide by 1000; Round to 1 decimal; rename "ring_steps_thousands".

Active calories: Find Health Samples, Type: Active Energy, filter Source is Oura, last 1 day; Calculate Statistics, Sum; Round to 0 decimals; rename "ring_active_calories".

4. Resting heart rate and HRV (optional)

Resting heart rate: Find Health Samples, Type: Resting Heart Rate, Source is Oura, last 1 day; Calculate Statistics, Average; Round to 0; rename "ring_resting_hr".

HRV: Find Health Samples, Type: Heart Rate Variability, Source is Oura, last 1 day; Calculate Statistics, Average; Round to 0; rename "ring_hrv".

5. Today's date

Action: Date (current date). Action: Format Date, Custom, format string yyyy-MM-dd. Rename it "date". The numbers land on the day you woke up.

6. Send it

Action: Get Contents of URL. URL: the “Send to” address under your key. Method: POST. Headers: one, Key "Authorization", Value "Bearer " followed by your key (a space after Bearer).

Request Body: JSON. A Text field "date" with the date variable, and a Dictionary field "values" holding a Number field for each number you mapped: "ring_sleep_hours", "ring_steps_thousands", "ring_active_calories", and if you have them "ring_resting_hr" and "ring_hrv".

Action: Show Result (optional) to see the reply when you run it by hand.

7. Run it once, then every morning

Tap play; allow the Health types it asks for. The reply says how many values were written. Then in Shortcuts, Automation tab, tap +, Time of Day, 8:00 AM, Daily, Run Immediately, pick "Send ring to Strongest Point". Your iPhone has to be on and unlocked at some point after 8; it catches up when it is.

Why your own Oura application

Oura's service only talks to registered applications, and the tokens it hands out are for one person's ring. Keeping the application and its tokens on your computer means nothing about your Oura account is ever held on our server; the script is the application. If you would rather we ran one connection for everyone, tell us; it is a decision about what we store, not a technical limit.

Connected sources send numbers from a device or service you choose to your own card. Strongest Point stores those numbers as entries and a fingerprint of your key, nothing else. Apple, Apple Health, ResMed, myAir and Oura are trademarks of their owners; Strongest Point is not affiliated with them. Nothing here is medical advice.

Updated 2026-10-27. Questions or corrections: hello@strongestpoint.com.