Why your Strava workouts are missing from your Oura data
You link Strava to Oura, your Saturday ride appears in the app, and then it is nowhere in your export — or in any third-party tool you connect. This is not a sync bug and not something a better app can fix. Workouts imported from another service live on one side of a wall that the public API does not cross.
On this page
What the API actually returns
Oura's API exposes what the ring recorded: sleep, readiness, activity, heart rate, temperature, and workouts the ring itself detected or you logged inside the Oura app. Sessions that arrived from a connected service — Strava, Polar, Apple Health, Garmin via an integration — are shown to you in the app but are not part of what the API hands out.
The gap is easy to confirm on your own data. Count the workouts in your Oura app for a given month, then count what a connected tool receives. If a chunk of your rides came in from Strava, the second number is smaller, and no amount of re-syncing changes it.
Why it works this way
Most likely for the ordinary reason: an imported session is another company's record, and re-exporting it through a public API means redistributing data you agreed to share with Oura, not with everyone Oura talks to. Whatever the reasoning, the practical position is stable and has been for years, so it is worth planning around rather than waiting out.
What it means for any tool you connect
Anything reading your Oura data through the API — a dashboard, a spreadsheet, a desktop app, a coach's platform — sees the same partial picture. If it shows you a weekly training load, that load is missing your imported sessions. If it correlates recovery against training, the correlation is computed on the subset the API returned.
The failure mode to watch for is silence. A tool that quietly presents an incomplete week as a complete one is worse than one that shows you the hole, because you will act on it: an app that cannot see Saturday's four-hour ride will tell you Sunday's low readiness is a mystery.
What you can do about it
Three things help. Log the sessions that matter directly in the Oura app rather than relying on the import, if the ring did not detect them itself — a manually added workout is Oura's own record and does come through. Keep your training history where it was recorded, in Strava or your watch's platform, and treat your ring data as the recovery half of the picture rather than the whole of it. And when a tool tells you something about training load, check whether it says where the sessions came from.
How Vitra deals with it
Vitra reads the Oura API, so it has exactly the same ceiling — there is no version of this where a third-party app sees more than the API returns. What Vitra does is refuse to paper over it: workouts it did not receive are not silently averaged away, and it does not present a training-load figure as if it were complete when the underlying week is not.
It is a small thing that decides a large one. An app that pretends its data is total is an app you should not believe the next time it tells you to rest.
Frequently asked questions
Pedro Thomaz builds Vitra, a desktop app that reads Oura data against your own baseline instead of a population average. He has worn a ring daily for years and reads these same numbers every morning — which is where most of what is written here comes from. Vitra is not a medical device and nothing on this blog is medical advice.
Local AI on your Mac or PC. One-time purchase, 7-day trial, no Vitra subscription.
Download Vitra →