Apple Health Export Format Reference

The exact CSV columns and JSON schemas vitalina produces when you export your Apple Health data - plus a searchable dictionary of all 131 exportable metrics and their units. A reference for developers, researchers, and anyone who wants to know exactly what they get before they export.

Last updated: August 2nd, 2026

Martin

By Martin

Co-founder, vitalina

A path winding up a hill surrounded by yellow wildflowers - a clear route through your Apple Health data

vitalina exports your Apple Health data in two machine-readable formats. Both can be opened, analyzed, or imported into other tools.

vitalina exports in three formats. This page documents the two machine-readable ones; for guided, format-specific walkthroughs see Export to CSV, Export to JSON, and Export to PDF.

vitalina's in-app Export Formats screen showing a searchable list of Apple Health data types, each with its unit, a plain-language description, an example value, and the CSV and JSON it exports as
vitalina's built-in Export Formats reference - every data type shows its unit, a description, an example, and the exact CSV and JSON it produces.

CSV (Comma-Separated Values)

Opens directly in Excel, Google Sheets, Numbers, or any spreadsheet app - and parses in pandas or Python's csv module with zero preprocessing. Every file is a single table with its header on line 1, using RFC 4180 escaping and UTF-8 encoding with a byte-order mark (BOM) so Excel on Windows renders °C and accented characters correctly.

Health Records

Heart Rate, Steps, Blood Pressure, symptoms, and most other metrics

ColumnDescription
DateISO 8601 timestamp
TypeData type name
ValueNumeric measurement - or a text level for category types like symptoms and cycle symptoms (severity: Not Present, Present, Mild, Moderate, Severe; presence: Not Present, Present; flow: Light, Medium, Heavy; test: Positive, Negative)
UnitUnit of measurement (bpm, count, kg, …); empty for category levels
SourceApp or device that recorded the data
DeviceHardware device name (if available)

Sleep Analysis

Nightly sleep session breakdown

ColumnDescription
DateNight date (yyyy-MM-dd)
Total SleepTotal sleep duration (h:mm)
Time in BedTotal time in bed (h:mm)
REMREM sleep duration (h:mm)
REM %REM as percentage of total sleep
DeepDeep sleep duration (h:mm)
Deep %Deep as percentage of total sleep
CoreCore (light) sleep duration (h:mm)
Core %Core as percentage of total sleep
AwakeTime awake during the night (h:mm)
Heart RateAverage sleeping heart rate (bpm)
Respiratory RateAverage respiratory rate (breaths/min)
SourceRecording app or device

Workouts

Individual workout sessions

ColumnDescription
DateISO 8601 start timestamp
TypeWorkout type (Running, Cycling, …)
DurationElapsed time (h:mm:ss or m:ss)
Distance (km)Total distance in kilometers
Energy (kcal)Active calories burned
Avg HRAverage heart rate (bpm)
Min HRMinimum heart rate (bpm)
Max HRMaximum heart rate (bpm)
CadenceSteps or revolutions per minute
Elevation GainMeters climbed
TemperatureAmbient temperature (°C)
SourceRecording app or device
Activity Type IDHealthKit's numeric workout activity code (e.g. 37 = Running) - a locale-stable identifier, since the Type column is localized
Duration (s)Elapsed time as plain seconds, ready for spreadsheet sums and averages without parsing h:mm:ss

ECG Summary

One row per ECG recording (ecg.csv)

ColumnDescription
DateISO 8601 timestamp of the recording
ClassificationApple Watch classification (Sinus Rhythm, Atrial Fibrillation, …)
Average Heart Rate (bpm)Average heart rate during the recording
Sampling Frequency (Hz)Voltage samples per second
Number of MeasurementsTotal voltage samples in the strip
SymptomsWhether symptoms were reported (Yes/No)
SourceRecording app or device
DeviceHardware device name (if available)

ECG Waveforms

Full voltage traces for all strips in one table (ecg-waveforms.csv, single-type ECG export)

ColumnDescription
Strip1-based recording index matching the row order of ecg.csv
Strip DateISO 8601 timestamp of the recording the sample belongs to
Time (s)Seconds since the start of the recording
Voltage (µV)Measured voltage in microvolts

Empty cells mean the data was not recorded for that entry. Most spreadsheet apps handle this gracefully. Every file starts with a UTF-8 byte-order mark (BOM): Excel uses it to detect the encoding, pandas skips it automatically, and Python readers can pass encoding="utf-8-sig".

Zip bundles & metadata.json

Each .csv file holds exactly one table. When an export produces more than one table (an "Export All" report, or an ECG export with waveforms) or includes the optional patient details, vitalina packages everything into a single zip archive that unpacks to one folder. A metadata.json file inside identifies each table programmatically - no matching on column names required - and carries the patient details separately from the data files, so they can be removed without touching any measurement.

{
  "app" : "vitalina",
  "exportDate" : "2026-08-01T10:00:00Z",
  "files" : [
    { "file" : "metrics.csv", "rows" : 36842, "section" : "metrics" },
    { "file" : "sleep.csv", "rows" : 214, "section" : "sleep" },
    { "file" : "workouts.csv", "rows" : 87, "section" : "workouts" }
  ],
  "formatVersion" : "2.0",
  "patient" : { "dateOfBirth" : "1968-03-14", "name" : "Anna Musterfrau" },
  "timeWindow" : {
    "end" : "2026-08-01T00:00:00Z",
    "start" : "2025-08-01T00:00:00Z"
  }
}

JSON (JavaScript Object Notation)

Structured format for developers, data scientists, and automated pipelines. Pretty-printed with sorted keys.

Health Records

Heart Rate, Steps, Blood Pressure, and most other metrics

{
  "dataType": "Heart Rate",
  "exportDate": "2025-01-15T10:30:00Z",
  "exportVersion": "1.0",
  "summary": {
    "average": 72.5,
    "count": 1440,
    "max": 165.0,
    "min": 52.0,
    "unit": "bpm"
  },
  "timeWindow": {
    "end": "2025-01-15T00:00:00Z",
    "start": "2025-01-01T00:00:00Z"
  },
  "records": [
    {
      "date": "2025-01-15T08:30:00Z",
      "dataType": "Heart Rate",
      "id": "...",
      "sourceName": "Apple Watch",
      "unit": "bpm",
      "value": 72.0
    }
  ]
}

Symptoms & Cycle Symptoms

Category types that carry a severity or presence level rather than a number

{
  "dataType": "Abdominal Cramps",
  "exportDate": "2025-01-15T10:30:00Z",
  "exportVersion": "1.0",
  "summary": {
    "count": 3,
    "unit": ""
  },
  "timeWindow": {
    "end": "2025-01-15T00:00:00Z",
    "start": "2025-01-01T00:00:00Z"
  },
  "records": [
    {
      "date": "2025-01-15T08:30:00Z",
      "dataType": "Abdominal Cramps",
      "id": "...",
      "sourceName": "Cycle Tracking",
      "unit": "",
      "value": 3.0,
      "valueLabel": "Moderate"
    }
  ]
}

Sleep Analysis

Nightly sleep sessions with stages

{
  "dataType": "Sleep Analysis",
  "exportDate": "2025-01-15T10:30:00Z",
  "exportVersion": "1.0",
  "timeWindow": { ... },
  "sessions": [
    {
      "date": "2025-01-14T22:30:00Z",
      "totalSleepDuration": 27000,
      "timeInBed": 28800,
      "remSleep": {
        "duration": 5400,
        "percentage": 20.0
      },
      "deepSleep": {
        "duration": 6750,
        "percentage": 25.0
      },
      "coreSleep": {
        "duration": 14850,
        "percentage": 55.0
      },
      "awakeTime": 1800,
      "sleepHeartRate": 58.0,
      "respiratoryRate": 14.5,
      "sourceName": "Apple Watch"
    }
  ]
}

Workouts

Detailed workout sessions with metrics

{
  "dataType": "Workouts",
  "exportDate": "2025-01-15T10:30:00Z",
  "exportVersion": "1.0",
  "timeWindow": { ... },
  "workouts": [
    {
      "date": "2025-01-15T07:00:00Z",
      "workoutType": "Running",
      "duration": 1920,
      "totalDistance": 5.12,
      "totalEnergyBurned": 385.0,
      "heartRate": {
        "average": 152.0,
        "max": 178.0,
        "min": 120.0
      },
      "cadence": 172.0,
      "elevationGain": 45.0,
      "sourceName": "Apple Watch"
    }
  ]
}

Durations are in seconds. Null fields indicate data was not recorded. Dates use ISO 8601 format. Category types (symptoms, cycle symptoms, flow, test results) carry a text level in valueLabel, while value holds its chart ordinal.

Time zones and timestamp format

Every timestamp in your CSV, JSON, and PDF exports is written in ISO 8601 format. By default vitalina uses your device time zone and includes its UTC offset, so a workout recorded at 8:39 in Central European Time looks like this:

2026-05-31T08:39:27+02:00	Other Workout	30:29		68	86	65	124			64.1	Marinas Watch

Prefer a single absolute reference - useful when combining data across time zones, or matching a clinic's records - you can switch to UTC (Zulu) under Settings → Time zone. The same reading then ends in a Z, for example 2026-05-31T06:39:27Z. The setting applies to all three export formats.

vitalina Time zone setting with Device time zone (Central European Time) selected and a UTC (Zulu) option, applying to CSV, JSON, and PDF exports

Every exportable metric (131)

vitalina can export 131 distinct Apple Health metrics across nine categories. Each is listed below with the unit it's exported in (metric, with the imperial unit after the slash where it differs). Search to find a specific metric, or browse by category - category names link to a step-by-step export guide where one exists.

Heart, circulatory, and respiratory measurements from iPhone, Apple Watch, and connected devices.

Heart Ratebpm
Resting Heart Ratebpm
Walking Heart Ratebpm
Heart Rate Variabilityms
Heart Rate Recoverybpm
AFib Burden%
Blood Pressure (Systolic)mmHg
Blood Pressure (Diastolic)mmHg
Blood Oxygen%
Blood Glucosemg/dL
Insulin DeliveryIU
Body Temperature°C / °F
Respiratory Ratebreaths/min
VO2 MaxmL/kg/min
Low Heart Rate Eventsevent
High Heart Rate Eventsevent
ECGµV

Daily movement, energy, and exercise rings.

Stepscount
Distancekm / mi
Flights Climbedcount
Active Energykcal
Basal Energykcal
Exercise Minutesmin
Stand Timemin

Mobility

9

Gait, balance, and walking-quality metrics used in physical therapy and rehab.

Walking Speedm/s / ft/s
Walking Steadiness%
Walking Asymmetry%
Step Lengthcm / in
Double Support %%
Stair Ascent Speedm/s / ft/s
Stair Descent Speedm/s / ft/s
Six-Minute Walk Distancem / ft
Number of Times Fallencount

Weight, composition, and body-size metrics for your dietician or GP.

Weightkg / lbs
Heightcm / ft/in
BMIcount
Body Fat Percentage%
Lean Body Masskg / lbs
Waist Circumferencecm / in

Nightly sleep sessions with stage breakdown. Exported with a dedicated schema.

Sleephr
Breathing DisturbancesiOS 18+count

Individual workout sessions with duration, distance, energy, and heart rate. Exported with a dedicated schema.

Workoutssession

Energy, macronutrients, vitamins, and minerals logged in the Health app or via third-party food trackers.

Dietary Energykcal
WatermL / fl oz
Proteing
Carbohydratesg
Fiberg
Sugarg
Total Fatg
Saturated Fatg
Monounsaturated Fatg
Polyunsaturated Fatg
Cholesterolmg
Sodiummg
Caffeinemg
Vitamin Amcg
Vitamin B1 (Thiamin)mg
Vitamin B2 (Riboflavin)mg
Vitamin B3 (Niacin)mg
Vitamin B5 (Pantothenic Acid)mg
Vitamin B6mg
Vitamin B7 (Biotin)mcg
Vitamin B9 (Folate)mcg
Vitamin B12mcg
Vitamin Cmg
Vitamin Dmcg
Vitamin Emg
Vitamin Kmcg
Calciummg
Chloridemg
Chromiummcg
Coppermg
Iodinemcg
Ironmg
Magnesiummg
Manganesemg
Molybdenummcg
Phosphorusmg
Potassiummg
Seleniummcg
Zincmg

Menstrual cycle, fertility, and symptom logs for your OB-GYN.

Menstrual Flowevent
Spottingevent
Cervical Mucus Qualityevent
Ovulation Testevent
Progesterone Testevent
Pregnancy Testevent
Lactationevent
Sexual Activityevent
Basal Body Temperature°C / °F
Abdominal Crampsseverity
Acneseverity
Bladder Incontinenceseverity
Bloatingseverity
Breast Painseverity
Fatigueseverity
Headacheseverity
Hot Flashesseverity
Lower Back Painseverity
Mood Changespresence
Nauseaseverity
Pelvic Painseverity
Sleep Changespresence
Vaginal Drynessseverity

Symptoms like fever, cough, and dizziness logged in Apple Health's General Symptoms section, each with the severity you recorded.

Chest Tightness or Painseverity
Shortness of Breathseverity
Rapid, Pounding, or Fluttering Heartbeatseverity
Skipped Heartbeatseverity
Dizzinessseverity
Faintingseverity
Coughingseverity
Wheezingseverity
Feverseverity
Chillsseverity
Night Sweatsseverity
Vomitingseverity
Diarrheaseverity
Constipationseverity
Heartburnseverity
Appetite Changesappetite
Dry Skinseverity
Hair Lossseverity
Body Acheseverity
Loss of Smellseverity
Loss of Tasteseverity
Memory Lapseseverity
Runny Noseseverity
Sinus Congestionseverity
Sore Throatseverity

State of Mind mood logs and Mindful Minutes meditation sessions.

Mindful Minutesmin
State of Mindstructured record

Export your own data

vitalina reads your Apple Health data locally on your iPhone and generates these CSV and JSON files in seconds - no account, no cloud upload. It's free to download and try.

Frequently asked questions

What file formats does vitalina export Apple Health data in?

vitalina exports your Apple Health data as PDF (a human-readable report with charts), CSV (for Excel, Google Sheets, and Numbers), and JSON (structured records for developers and data pipelines). CSV and JSON share the schemas documented on this page.

What columns are in a vitalina Apple Health CSV export?

Most metrics use the Health Records schema: Date (ISO 8601), Type, Value, Unit, Source, and Device. Sleep Analysis and Workouts have their own richer column sets - sleep includes per-stage durations and percentages, and workouts include distance, energy, heart-rate range, cadence, elevation, a numeric activity-type code, and the duration in plain seconds. ECG exports add a summary table and a waveform table with the full voltage trace.

Are durations in the JSON export in seconds or minutes?

All durations in the JSON export are in seconds. Null fields indicate the data was not recorded, and all dates use ISO 8601 format. In CSV, sleep and workout durations are formatted as h:mm or h:mm:ss for readability.

What does an empty cell in the CSV mean?

An empty cell means the data was not recorded for that entry - for example, a workout without a heart-rate sensor leaves the heart-rate columns blank. Most spreadsheet apps handle empty cells gracefully.

How many Apple Health metrics can vitalina export?

vitalina can export 131 distinct Apple Health metrics across nine categories: Vitals, Activity, Mobility, Body Measurements, Sleep, Workouts, Nutrition, Cycle Tracking, and Mental Health. Each is listed with its unit in the metric dictionary above.

Is the data encoded in a standard way?

Yes. Every CSV file is a single table with its header on line 1, RFC 4180 escaping, and UTF-8 encoding with a byte-order mark (BOM) so Excel detects the encoding automatically. The files parse in pandas and Python's csv module with zero preprocessing. JSON is pretty-printed with sorted keys, making it easy to diff, parse, and import into analysis tools like pandas or R.

Why does a CSV export sometimes arrive as a zip file?

Each .csv file holds exactly one table. When an export produces more than one table (an Export All report, or an ECG export with waveforms) or includes optional patient details, vitalina packages the files into one zip archive. A metadata.json inside identifies every table by a stable section id and row count, and carries the patient details separately from the data files. Single-metric exports without patient details remain a plain .csv.

What languages does vitalina support?

vitalina is fully localized in 7 languages - English, German, Spanish, French, Portuguese (Brazil), Japanese, Russian. The app interface and every Apple Health metric name are translated, so your exports come out in your language. This page is in English, but the app follows your device language with no setup required. For example, Heart Rate appears as:

LanguageHeart Rate
EnglishEnglishHeart Rate
GermanDeutschHerzfrequenz
SpanishEspañolFrecuencia cardíaca
FrenchFrançaisFréquence cardiaque
Portuguese (Brazil)Português (Brasil)Frequência cardíaca
Japanese日本語心拍数
RussianРусскийПульс

Keep reading

Other Apple Health export guides

Step-by-step tutorials for every metric vitalina can export.