HealthSave Get on App Store

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 atIdentifier HealthSave exportsUnitWhere it lives in Apple Health
Workout durationworkout_durationminWorkouts (per session)
Workout caloriesworkout_calorieskcalWorkouts (when workout recorded energy)
Workout distanceworkout_distancemWorkouts (when workout recorded distance)
Active energy burnedactive_energy_burnedkcalActivity
Walking + running distancedistance_walking_runningmActivity
Resting heart rateresting_heart_ratecount/minHeart
Heart rate variability (SDNN)heart_rate_variabilitymsHeart
Heart rate recovery (1 min)heart_rate_recoverycount/minHeart
Walking heart rate averagewalking_heart_rate_averagecount/minHeart
VO2 maxvo2_maxml/kg·minHeart
Running power (Apple Watch)running_powerWRunning dynamics
Running speed (Apple Watch)running_speedm/sRunning dynamics
Running stride lengthrunning_stride_lengthmRunning dynamics
Running vertical oscillationrunning_vertical_oscillationmRunning dynamics
Running ground contact timerunning_ground_contact_timemsRunning dynamics
Workout effort score (iOS 18+)workout_effort_scoreeffort scoreWorkouts

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 dataBest destinationFormat HealthSave producesBest guide to start with
Compare training blocks side by side, pivot by weekSpreadsheet (Numbers / Excel / Sheets)CSV, one row per metric readingAnalyze Apple Health data in Excel
Keep a daily training log next to your numbersObsidian (markdown, Dataview, Bases)JSON, one short script converts itApple Health to Obsidian
Ask plain-English questions, no scriptingAI assistant (ChatGPT, Claude, local LLM)JSON uploaded or pastedAnalyze Apple Health with AI
Live HR / pace on a wall displayGrafana or a personal dashboardJSON or CSV into a databasePersonal health dashboard
Coach / running partner gets a clean fileTheir import script, or a PDF reportCSV (machine import) or PDF (human read)Apple Health data in Excel
Self-hosted archive, query the season yourselfPostgres, DuckDB, Home AssistantJSON batches over HTTPSApple 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

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

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

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


HealthSave: Export Health Data, on iPhoneGet on the App Store