To export HRV already stored in Apple Health, select Heart Rate Variability in Health.md on your iPhone and save a CSV or JSON file. Choose the daily average or individual timestamped samples according to the analysis you want to do.

Get Health.md for iPhone

Health.md includes 5 free export actions, followed by a single lifetime unlock. Manual export needs no Mac. For the native Apple XML archive and the broader export choices, see how to export Apple Health data.

Know which HRV you are exporting

Health.md's Apple HRV selection reads HealthKit's SDNN quantity type and exports its values in milliseconds (ms). Apple describes SDNN as the standard deviation of intervals between normal heartbeats in its HRV type documentation.

Keep that identity with the file. Do not rename an SDNN value as RMSSD or pool it with another device's HRV score merely because both say “HRV.” Heart rate in bpm is another metric, and an HRV value in milliseconds is not itself a raw sequence of beat-to-beat intervals or an ECG waveform.

Goal Data detail Exported representation
Compare recorded daily HRV averages Summary CSV Heart / HRV, ms; JSON heart.hrv.
Inspect individual recorded HRV estimates Detailed Time-Series Available CSV Heart / HRV Sample rows, ms, with Timestamp; JSON heart.hrvSamples.
Inspect selected public source records and their identity Lossless Health Records Apple-only canonical archive with record identity, intervals, source information and capture diagnostics.

Detailed Time-Series can contain both daily summaries and sample rows. Choose one representation for each calculation. The archive option is separate; read the format guide and canonical Apple Health record reference before relying on source-record details.

1. Select HRV and preview a known day

  1. Confirm the HRV records you want are present in Apple Health on this iPhone. Health.md can read only the records available through the authorized source APIs; it does not generate new HRV measurements.
  2. Authorize Health.md to read the relevant health data. In Health Metrics → Heart, enable Heart Rate Variability. Average Heart Rate or Resting Heart Rate alone is not an HRV selection.
  3. Choose CSV for spreadsheet inspection or JSON for structured processing. Select one known day and the YYYY-MM-DD date format for easy comparison.
  4. Choose Summary or Detailed Time-Series using the table above. Select a writable folder in Files and tap Preview.
  5. Check the requested date and the HRV output. Export, then open the actual saved file and confirm its location and contents.

Follow your first iPhone export if setup or folder access is incomplete. Apple's Health permissions guide explains how to review app read access.

A longer range creates one file per day, not a combined HRV workbook. Start small and expand after the first file checks out. Do not assume a fixed number of samples per hour or day; source measurements and coverage can vary. Exporting does not fill those gaps.

2. Check the CSV labels and units

Try the synthetic daily CSV before using personal records. It contains fictional measurements and metadata generated by the exporter. The header is Date,Category,Metric,Value,Unit,Timestamp.

These are exact HRV rows from that file:

2026-03-15,Heart,HRV,42.0,ms
2026-03-15,Heart,HRV Sample,43.0,ms,2026-03-15T00:31:40Z

The 42.0 ms row is the daily HRV summary. The 43.0 ms row is an individual sample with a UTC timestamp. They are different representations, not two readings to average together. The synthetic fixture exercises the serializer; it is not a complete observed day from which you can recompute the summary using the one displayed sample.

Summary rows can omit the final Timestamp field. Use a CSV-aware importer that leaves that last cell empty while keeping the first five columns aligned. Preserve quoted commas and newlines. The full Value column is mixed-type and includes nonnumeric metadata, so select the exact rows before numeric conversion.

For daily averages, filter Category = Heart, Metric = HRV, and Unit = ms. For individual samples, filter Category = Heart, Metric = HRV Sample, and Unit = ms. A broad text search for “HRV” can include both and mix your analysis.

3. Build the view you actually need

Import the CSV using the Excel guide or Google Sheets guide, replacing their steps/sleep filters with the exact HRV filter above.

Keep milliseconds as milliseconds; no conversion to bpm is appropriate. Do not replace absent days, missing values, or conversion errors with zero. Before combining files, identify overlapping dates and re-exports and keep the intended version rather than including the same data twice.

The daily sample query assigns records by their start time within the effective export calendar day. The daily average is obtained through a separate statistics query with its own day-boundary semantics. Consequently, averaging the selected sample rows is not a guarantee of reproducing the exported daily summary exactly.

A Timestamp ending in Z is UTC. Date is the export's calendar-day label. Check the timezone context before assigning a UTC timestamp to a local date, especially near midnight.

If you prefer JSON

The synthetic daily JSON has heart.hrv = 42 and a heart.hrvSamples entry with value = 43 at 2026-03-15T00:31:40Z. Use the export's units and time_context metadata and inspect the fields actually present. Sample entries can contain additional metadata; it is not guaranteed for every record.

JSON has nested objects and arrays rather than CSV columns. Missing hrv or an absent sample array is unavailable data, not a measured zero. The compatibility samples provide timestamps and values, not a guaranteed universal source UUID key. If original identity and exact source intervals matter, inspect the canonical archive and its capture status rather than assuming matching timestamp/value pairs prove duplicate source records.

Troubleshooting

This guide describes exported records and calculations. It does not turn an HRV value into a readiness score, diagnosis, or explanation of why your measurements changed. For the broader distinction between heart-rate and HRV outputs, use the heart rate export guide.

Protect the exported records

The core local folder workflow requires no Health.md account and creates no Health.md server copy by default. A synced folder, recipient service, online spreadsheet, or AI upload follows that provider's storage and privacy rules. Detailed records can contain exact timestamps and source information; inspect the file before sharing it.

The separate opt-in, single-owner Health.md Cloud pilot retains only API exports intentionally uploaded to it, has no public signup and no automatic device sync, and is not generally available. This folder workflow does not upload to that pilot. See retention and destination boundaries.

For a non-synced destination and backup checks, follow export health data without the cloud. For exact CSV row contracts, return to Apple Health to CSV. For Android, use the Health Connect guide and its documented metric semantics rather than assuming its HRV definitions and reducers are identical to Apple's SDNN path.