If you used Apple Health's "Export All Health Data" and got a giant export.xml you can't open in Excel, that's expected — Apple's native export is a single nested XML blob, not a spreadsheet. To get clean, per-metric CSV you have two routes: parse that XML yourself, or let HealthSave read your Apple Health data on-device and emit ready-to-open CSV (and JSON) directly. This guide explains exactly what Apple gives you, why, and how to get usable files.
I'm Umut. I built HealthSave's export specifically because Apple's XML defeated me the first time I tried to chart my own resting heart rate.
What Apple's native export actually produces
In the Health app: tap your profile picture → Export All Health Data. After a wait (it can take minutes on a large history), you get export.zip. Inside is export.xml — one file containing all of your health data, every type, mixed together as nested XML records like <Record type="HKQuantityTypeIdentifierHeartRate" .../>.
The practical problems:
- It's not a spreadsheet. Excel, Google Sheets, and Numbers can't meaningfully open a multi-megabyte (often hundreds of MB) nested XML. There are no rows-and-columns to load.
- It's not per-metric. Everything is interleaved in one file. There is no "heart_rate.csv" — you'd have to filter by
typeyourself. - It's not Android-friendly. The format is Apple's; it doesn't open into any Android health app.
- It's all-or-nothing. No date range, no metric selection — it dumps everything.
So if your goal is "chart my steps in Sheets" or "feed HRV into a notebook," the raw export is the wrong starting point.
Why it comes out this way
HealthKit stores many data types (heart rate, steps, sleep, dozens more) with rich per-sample metadata — source device, units, start/end timestamps. The native export is a faithful, complete dump of that structure, optimized for completeness and re-import into Apple's ecosystem, not for human reading or analysis. That's a reasonable design goal for a backup; it's just not what you want for a spreadsheet.
Route 1: parse the XML yourself
If you're comfortable with code, you can extract the zip and parse export.xml (Python's xml.etree.ElementTree or a streaming parser like lxml for large files), filter <Record> elements by type, and write per-metric CSVs. It's doable, but be ready for: huge file sizes that need streaming (not loading the whole tree into memory), normalizing units, and handling the start/end timestamps and source attributes per sample. For one-off curiosity it's fine; for repeated exports it's a chore you'll dread.
Route 2: let HealthSave read HealthKit directly (no XML)
HealthSave skips the XML entirely. Instead of post-processing Apple's blob, it reads HealthKit on your device and writes the files you choose:
- Install HealthSave (free) and grant read access to Apple Health. It's read-only — it never writes to or modifies your records.
- Choose your metrics. It reads 30+ HealthKit data types and 80+ workout types — heart rate, resting HR, HRV, steps, distance, sleep, SpO2, calories, weight, and more. Pick just the ones you want.
- Choose a date range. Unlike Apple's all-or-nothing dump, you export exactly the window you need.
- Pick a format: CSV (opens straight in Excel/Sheets/Numbers) or JSON (for scripts and APIs). Both are free. (A formatted PDF report is also available with Pro.)
- Export and share via the iOS share sheet to Files, Mail, AirDrop, Drive, iCloud, or Dropbox.
Everything happens on-device — your health data doesn't leave the phone unless you export the file or sync it to a destination you set.
What lands in the CSV
When you export, say, heart rate, you get a tidy table instead of nested XML: a row per reading, with the timestamp and the value (and, depending on the metric, the unit). One column for date/time, one for the value — exactly the shape you'd want to chart or pivot. Because you selected the metric and date range, you don't have to filter anything out afterward.
Apple's XML vs HealthSave CSV/JSON
| Apple "Export All" | HealthSave | |
|---|---|---|
| Output | One export.xml blob |
Per-metric CSV / JSON |
| Opens in a spreadsheet | No | Yes (CSV) |
| Pick metrics | No | Yes |
| Pick date range | No | Yes |
| Android-openable | No | Yes (CSV/JSON are universal) |
| Effort to get a usable file | Write a parser | Tap export |
Honest limits
- HealthSave is iOS only and reads Apple Health. The data must already be in HealthKit; it doesn't pull Android/Google Fit.
- Read-only. It copies your data out; it can't edit Apple Health.
- Free vs Pro: CSV and JSON export are free; the free tier caps export history at the last 7 days. One export covering your full history (and PDF reports) needs Pro ($24.99 one-time, no subscription).
- Accuracy is your wearable's. The CSV faithfully reflects what your device recorded; it isn't validated or corrected.
Related
- Back up Apple Health before switching to Android — why the XML is useless off-iOS.
- Export HRV and sleep data (and what the numbers mean).
- Apple Health data for self-hosters — JSON straight into your own pipeline.
Get HealthSave
Free to download, no account. Get clean CSV/JSON in a couple of taps instead of fighting XML.
Download HealthSave on the App Store
By Umut — developer of HealthSave. I built HealthSave because I wanted my own Apple Health data out of its silo and into my homelab. I use it every day.