Apple Health for Runners: Own Your Run Data, Workouts, VO2 Max, HRV, HealthSave
Running with an Apple Watch means your watch is the dashboard. Apple Health on the iPhone stores the data; HealthSave gets it out. The hard part is not the export, it is choosing a destination that fits the question you actually have. This page is for runners who already use Apple Watch and want their data in a place they control: a spreadsheet, an Obsidian daily note, an AI assistant, a homelab dashboard, or a tool their coach already uses.
What Apple Health gives runners, exactly
The iPhone and Apple Watch write a specific, well-defined set of metrics to Apple Health. Anything in this table is what HealthSave can export. The identifier in the second column is the exact string that appears in your JSON file (in metric) and in your CSV header.
| What you want to look at | Identifier HealthSave exports | Unit | Where it lives in Apple Health |
|---|---|---|---|
| Workout duration | workout_duration | min | Workouts (per session) |
| Workout calories | workout_calories | kcal | Workouts (when workout recorded energy) |
| Workout distance | workout_distance | m | Workouts (when workout recorded distance) |
| Active energy burned | active_energy_burned | kcal | Activity |
| Walking + running distance | distance_walking_running | m | Activity |
| Resting heart rate | resting_heart_rate | count/min | Heart |
| Heart rate variability (SDNN) | heart_rate_variability | ms | Heart |
| Heart rate recovery (1 min) | heart_rate_recovery | count/min | Heart |
| Walking heart rate average | walking_heart_rate_average | count/min | Heart |
| VO2 max | vo2_max | ml/kg·min | Heart |
| Running power (Apple Watch) | running_power | W | Running dynamics |
| Running speed (Apple Watch) | running_speed | m/s | Running dynamics |
| Running stride length | running_stride_length | m | Running dynamics |
| Running vertical oscillation | running_vertical_oscillation | m | Running dynamics |
| Running ground contact time | running_ground_contact_time | ms | Running dynamics |
| Workout effort score (iOS 18+) | workout_effort_score | effort score | Workouts |
One workout in Apple Health produces up to three rows in the JSON export: one for duration (in minutes), one for calories (when the watch recorded energy), and one for distance (when the workout had a measurable distance). The workout type rides along inside the source field, formatted as "<device> (<type>)" — for example "Apple Watch (Running)" or "Apple Watch (HIIT)". The full per-metric catalog is at /metrics/, the schema reference is at Apple Health export to JSON.
Pick the destination that matches the question
The export format follows the destination. Most runner setups fall into one of five families:
| What you want to do with your run data | Best destination | Format HealthSave produces | Best guide to start with |
|---|---|---|---|
| Compare training blocks side by side, pivot by week | Spreadsheet (Numbers / Excel / Sheets) | CSV, one row per metric reading | Analyze Apple Health data in Excel |
| Keep a daily training log next to your numbers | Obsidian (markdown, Dataview, Bases) | JSON, one short script converts it | Apple Health to Obsidian |
| Ask plain-English questions, no scripting | AI assistant (ChatGPT, Claude, local LLM) | JSON uploaded or pasted | Analyze Apple Health with AI |
| Live HR / pace on a wall display | Grafana or a personal dashboard | JSON or CSV into a database | Personal health dashboard |
| Coach / running partner gets a clean file | Their import script, or a PDF report | CSV (machine import) or PDF (human read) | Apple Health data in Excel |
| Self-hosted archive, query the season yourself | Postgres, DuckDB, Home Assistant | JSON batches over HTTPS | Apple Health for self-hosters |
None of these are mutually exclusive. The same JSON file goes into Obsidian, an AI assistant, and a Postgres database at the same time; you do not have to choose. The point is to pick the destination that matches the question you are actually trying to answer this season.
Three sample journeys
The runner in a 5K training block
Question: which workout each week had the highest cardiac drift, and how does this block compare to last block?
Setup: HealthSave Pro exports JSON for the last 90 days, scoped to workouts, heart rate, and HRV. A short script pivots the workout rows into one row per run (duration, calories, distance, average HR during the run), and another script joins each run to the resting HR and HRV the morning after. The user opens the spreadsheet once a week and looks at three things: average pace across the block, how HR during the long run trended across the block, and how HRV recovered week to week. No dashboard required; the spreadsheet is the dashboard.
What made it work: a narrow scope (three metrics, 90 days), a real cadence (weekly), and a destination that supports pivot tables.
The post-marathon recovery check
Question: how soon did my resting HR return to baseline after the race, and how does HRV look now?
Setup: HealthSave Pro exports JSON for the last 180 days, scoped to resting heart rate and HRV. The user pastes the file into Claude and asks: "plot resting heart rate by week, mark the marathon date, and tell me when the rolling 7-day median returned to within 5% of the pre-race baseline. Same for HRV." Claude returns a plain-English read with the dates. The user pastes the answer into their Obsidian running log under "Marathon recovery."
What made it work: a long enough window to see the recovery arc, a destination that can do the math, and a one-shot question instead of a dashboard.
The HRV-aware base builder
Question: which days this month should I have taken easy, and which days did I actually go hard?
Setup: HealthSave Pro exports JSON for the last 365 days, scoped to HRV, resting heart rate, workouts, and workout effort score (when iOS 18+). The user wires HealthSave background sync to a small DuckDB on their Mac, then runs a weekly query that joins HRV (morning of) with the workout effort score (workout that day) and surfaces the days where HRV was low but effort was high. Those are the "should have gone easy" days. A Grafana chart on the wall shows the running weekly pattern.
What made it work: a private database the user controls, a join that no app dashboard ships, and a destination that scales to a year of data without paying a subscription.
The principle behind all three
Running analytics is not "collect every metric and look at it later." It is "decide the question, pick the slice that answers it, put it somewhere you will actually look at it, and review on a cadence." Everything else is implementation.
The export is the cheap part. The discipline of looking at the numbers on a real schedule, and adjusting the training block when the answer is uninteresting, is the practice.
What HealthSave is and is not in this picture
- HealthSave is the on-ramp. It reads Apple Health on your iPhone, with your permission, and writes a clean JSON or CSV file to wherever the iOS share sheet can reach. Free for the last 7 days; Pro unlocks the multi-year archive, longer date ranges, PDF reports, and background sync to your own server.
- HealthSave is not the destination. It does not draw pace charts, host your data, or generate insights. Those are the destinations' jobs.
- HealthSave is not a coaching tool. It does not prescribe training zones, calculate VO2 max (the watch does that), or compare your run to a model. For training plans, use a coach or a tool designed for it.
- HealthSave is not a medical device. It is for personal recordkeeping and self-investigation. For medical decisions, use a clinician.
The architecture in one diagram
iPhone + Apple Watch (Apple Health)
│
│ read-only HealthKit access
▼
HealthSave (on-device, no cloud)
│
│ JSON / CSV / PDF (iOS share sheet)
▼
your destination
├─ Numbers / Excel / Sheets (one row per reading)
├─ Obsidian vault (one markdown file per metric per year)
├─ ChatGPT / Claude / local LLM
├─ your Postgres or DuckDB
├─ Grafana on a wall display
└─ a CSV handed to a coach or training partner
Every arrow ends at a destination you control. The destination decides what the data looks like next.
Honest limits
- Apple Watch is not a clinical device. Heart rate is within a few percent during steady running; GPS distance has drift; VO2 max is an estimate, not a lab measurement. Use the trend, not the absolute number.
- Workout type is in the source field, not a separate column. When you pivot, filter, or chart by workout type, group on the parenthetical in the
sourcecolumn (e.g. everything ending in(Running)). The JSON guide walks through the format. - Pro is required for the long archive. Free exports the last 7 days, which is enough to ask a question about last week. For season-level trend work, you want Pro ($24.99 one-time, Family Sharing, no subscription).
- The discipline is yours. No app, including HealthSave, will run the splits for you. The export is the cheap part.
Choosing your first destination
If you already script on your Mac, start with the DuckDB guide — it is the lowest-friction private archive and scales to years. If you already keep a running log in Obsidian, start with the Obsidian guide. If you want plain-English answers without setting up anything, paste a 7-day JSON into ChatGPT or Claude and ask one real question — the AI guide has the prompts. If you already run a homelab, start with the self-hosted path. If you have a coach who takes a CSV, the Excel guide has the cleanest pivot. The right starting point is the one that matches a tool you already use.
HealthSave is not a medical device. It is for informational purposes only and does not diagnose, treat, cure, or prevent any disease or condition. Privacy claims of zero data collection apply to the iOS app; if you choose to send data to a self-hosted destination, that destination is yours to operate. Training decisions are yours; use a coach when the question matters.
FAQ
What running data does Apple Health record?
Apple Health, written by the iPhone and Apple Watch, records every workout you save (run, walk, cycle, hike, strength, yoga, and 70+ other types), plus resting and recovery metrics (resting heart rate, HRV (SDNN), walking heart rate average, one-minute heart rate recovery, and VO2 max), plus running-specific dynamics on Apple Watch (running power, running speed, running stride length, running vertical oscillation, running ground contact time). The per-metric catalog documents each identifier.
Where can I see my Apple Watch VO2 max trend?
Apple Health stores VO2 max under the identifier vo2_max with unit ml/kg*min. The Health app charts the trend on your phone, but the raw numbers stay there. To get the series into your own charts, export the vo2_max metric as JSON or CSV with HealthSave. The metric catalog documents the identifier.
Does Apple Health export a 'run' file or a single workouts file?
Neither. Apple Health exports one giant XML file containing every metric ever recorded, including workouts. That file is hard to parse and not human-readable. HealthSave turns it into one JSON file with one row per sample, including one row per workout's duration, calories, and distance (one workout becomes up to three rows), with the workout type (Running, Cycling, Hiking, …) riding along in the source field.
How do I export my runs to a spreadsheet?
In HealthSave, pick the workouts slice, choose CSV, and pick the date range. Each row in the spreadsheet is one metric reading at one time, including workout_duration in min, workout_calories in kcal, and workout_distance in m, with the workout type in the source column. Open it in Numbers, Excel, or Sheets, pivot by source to get a per-run summary, or chart pace against date.
Can I export Apple Health running data to a custom API or a homelab?
Yes. HealthSave Pro unlocks background sync over HTTPS, where every export sample is POSTed to an endpoint you own. The webhook guide and the custom REST API guide show the API contract; the self-hosters hub shows the full Grafana / Home Assistant / Postgres pipeline.
Can I export my workouts to Strava, Garmin Connect, or a coach's tool?
HealthSave writes generic data files (CSV and JSON), not the GPX/TCX/FIT activity files that Strava and Garmin Connect import. For Strava, use a workout-export app that writes those formats; HealthSave is the archive-and-analysis side. For a coach or a tool that eats a spreadsheet, the CSV is clean: up to three rows per workout (duration, calories, distance), with the workout type in the source column.
Is the running data accurate enough to plan training off?
Consumer wearables (Apple Watch included) are not clinical instruments. Heart rate is within a few percent during steady-state running; GPS distance has drift; VO2 max is an estimate from the watch, not a lab measurement. HealthSave moves whatever your device recorded; it does not validate it. Use the trend, not the absolute number, and trust the watch less than the run you actually had.
Do I need HealthSave Pro for running analytics?
For the last 7 days, no. JSON and CSV export of the most recent week is free, no account. For the multi-year archive that lets a single training block sit next to last season's, Pro is the unlock: a one-time $24.99 with Family Sharing, no subscription. The free tier is enough to start; Pro is what makes season-level trend work possible.
Related guides
- Apple Health export to JSON, the schema reference for every metric on this page (including the workout expansion rule).
- Apple Health to Obsidian, the daily-note setup, useful for a running log.
- Analyze Apple Health with AI, the smallest setup, no scripting, ask one question.
- Analyze Apple Health data in Excel, the spreadsheet path with pivot tables per workout.
- Apple Health to DuckDB, the private archive that scales to years without a subscription.
- Build a personal Apple Health dashboard, the wall-display path.
- How to export HRV and sleep data from Apple Health, the recovery-metric deep dive.
- Apple Health for self-hosters, the homelab end-to-end pipeline (Grafana, Home Assistant, Postgres).
- Apple Health for the quantified self, the meta-intent hub if you also care about sleep, nutrition, and journaling.
- Apple Health for cyclists, the rides, FTP, cycling power, and cadence hub if you also ride.
- Every metric HealthSave exports, the per-metric identifier catalog.
Get HealthSave
Free to download, no account. Try the JSON export on a single 7-day window, paste it into the AI of your choice, and ask one real running question. That is the cheapest possible start.
Download HealthSave on the App Store