MetricPull

A simple, free Apple Health export utility

  • Privacy: All processing on-device. Read-only HealthKit access. No accounts, no analytics, no tracking.

the problem

Apple Health collects a wealth of data, but getting it out in a usable format is painful. The native export dumps everything into a massive XML file. Third-party apps either overwhelm you with features you don't need, or produce messy output that requires cleanup before you can actually use it.


the solution

A simple, free utility that lets you build exactly the export you want. Pick your metrics, pick your date format, get a clean CSV. No subscriptions, no premium tiers, no features you'll never use.

You tell the app what you want. It gives you exactly that.


how it works

The app has two main screens accessible via a segmented toggle at the bottom:

  1. Export — build and export CSV files from Health data
  2. Quick Metrics — at-a-glance dashboard with charts and stat cards for any health metric

export

built-in presets

Six ready-to-use export templates:

Preset Columns Included
Weight Tracker date, weight
Daily Activity date, steps, active_calories, distance
Heart Health date, resting_hr, hrv, walking_hr_avg
Sleep Analysis date, sleep_hours, time_in_bed, rem_sleep, deep_sleep, core_sleep
Full Dashboard date, weight, steps, resting_hr, sleep_hours, active_calories
AI Weight Coach Export date, weight, active_calories, steps, sleep_hours

Each preset opens the export configuration screen where users can adjust settings before exporting.

custom export builder

Build a completely custom export by selecting any combination of the 25 supported health metrics:

  • Metric selection — metrics organized by category (Body, Activity, Heart, Sleep, Vitals) with collapsible sections and selection count badges
  • Column ordering — drag-to-reorder when 2+ metrics are selected
  • Save as preset — save any custom configuration for one-tap reuse, with a confirmation overlay on save

configuration options

All exports (preset or custom) support the following:

  • Last 7 Days
  • Last 14 Days
  • Last 30 Days
  • Last 60 Days
  • Last 90 Days
  • Year to Date
  • All Time (starts from earliest available data; empty rows are suppressed)
  • Custom (manual start/end date pickers)

The selected date range is saved with user presets so it persists correctly on reload.

  • MM/DD/YYYY
  • YYYY-MM-DD
  • DD/MM/YYYY
  • DD-MM-YYYY
  • Imperial (lbs, miles, °F)
  • Metric (kg, km, °C)
  • Daily — one row per day (default)
  • Weekly — one row per calendar week
  • Monthly — one row per calendar month

When aggregation is weekly or monthly, a footer explains: “Values like weight and heart rate are averaged per week/month. Values like steps and calories are summed.”

Weekly options:

  • Start date
  • Date range (e.g., “01/06 – 01/12/2026”)
  • Week number (e.g., “Week 2, 2026”)

Monthly options:

  • Start date
  • Month name (e.g., “Jan 2026”)
  • Year-month (e.g., “2026-01”)

preview before export

Load a preview showing the CSV header plus 5 data rows before exporting. The preview auto-clears whenever any configuration setting changes, so you always see current output.

export and share

One tap to generate. The iOS share sheet lets you save to Files, AirDrop, email, save to iCloud Drive, or share to any app that accepts files. Everything happens on-device — your health data never leaves your phone.

saved presets

  • User presets appear in a “My Presets” section at the top of the Export screen
  • Swipe-to-delete on saved presets
  • Presets store the full configuration: metrics, date range, date format, units, aggregation, date label style, and column order

empty row handling

CSV export skips rows where every metric value is empty. This prevents exports from containing thousands of blank rows when “All Time” is selected but data only exists for recent periods. Rows with partial data (e.g., weight recorded but not steps) are still included — only fully empty rows are skipped.

example output

date weight
01/01/2026 173.5
01/02/2026 172.4
01/03/2026 172.9
01/04/2026 171.8
01/05/2026 171.4

Clean output: one row per day, proper formatting, empty cells for missing data—imports directly into Excel, Numbers, Google Sheets, Python, or R. Designed to paste directly into AI conversations for health analysis.


quick metrics

A dedicated dashboard for viewing at-a-glance insights about any health metric.

  • Horizontally scrollable category pills at the top: Body, Activity, Heart, Sleep, Vitals
  • Tapping a category expands a list of metrics in that category
  • Tapping a metric selects it and loads its stats; selected metric shows a checkmark

Segmented picker (lbs/kg) in the top-right toolbar. Toggles between Imperial and Metric for all values on screen.

  • Line chart built with Swift Charts
  • Blue line with circle markers showing daily values
  • Gray line showing 7-day rolling average overlay
  • Toggle between 7-day and 30-day chart views
  • Displayed in a rounded card
  • This Week vs Last Week — rolling 7-day windows (not calendar weeks). “Last week” = 8–14 days ago, “this week” = last 7 days. Shows both averages with date ranges and a delta arrow (green if favorable, red if unfavorable, direction per-metric). Last week on left, this week on right.
  • 7-Day Average — rolling average of the last 7 days
  • 30-Day Average — rolling average of the last 30 days
  • Min / Max (Last 7 Days) — minimum and maximum values with the dates they occurred
  • Trend — compares 7-day average to 30-day average using absolute per-metric thresholds. Shows “Trending down over 30 days”, “Trending up over 30 days”, or “Stable over 30 days” with a colored arrow.

For sum-based metrics (steps, active calories, resting calories, distance, flights climbed, exercise minutes, stand hours), today’s incomplete data is excluded from all calculations — date windows shift back by one day so only complete days are used. Average-based metrics (weight, heart rate, etc.) include today since a single reading is still valid.

supported health metrics (25 total)

Body

Metric CSV Column Aggregation
Weight weight Average
Body Fat % body_fat_pct Average
BMI bmi Average
Lean Body Mass lean_body_mass Average

Activity

Metric CSV Column Aggregation
Steps steps Sum
Distance (Walk/Run) distance Sum
Flights Climbed flights_climbed Sum
Active Calories active_calories Sum
Resting Calories resting_calories Sum
Exercise Minutes exercise_minutes Sum
Stand Hours stand_hours Sum

Heart

Metric CSV Column Aggregation
Resting Heart Rate resting_hr Average
Walking HR Average walking_hr_avg Average
Heart Rate Variability (HRV) hrv Average
Cardio Fitness (VO2 Max) vo2_max Average

Sleep

Metric CSV Column Aggregation
Time Asleep sleep_hours Total
Time in Bed time_in_bed Total
REM Sleep rem_sleep Total
Deep Sleep deep_sleep Total
Core Sleep core_sleep Total

Sleep metrics use HKCategoryType. Overnight sessions are attributed to the correct calendar date — sessions starting after 6 PM are attributed to the following day.

Vitals

Metric CSV Column Aggregation
Blood Pressure (Systolic) bp_systolic Average
Blood Pressure (Diastolic) bp_diastolic Average
Blood Oxygen blood_oxygen Average
Respiratory Rate respiratory_rate Average
Body Temperature body_temperature Average

unit conversions

Metric HealthKit Unit Imperial Metric
Weight, Lean Body Mass kg lbs (×2.20462) kg
Distance meters miles (÷1609.344) km (÷1000)
Body Temperature °C °F (×9/5 + 32) °C
Stand Hours minutes hours (÷60) hours (÷60)

All other metrics display in their native HealthKit units regardless of unit preference.


screenshots