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.
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 the core exportable HealthKit metrics 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