Apple Health's built-in Export All Health Data creates an XML archive. For Google Sheets, Health.md can read authorized data on your iPhone and write daily CSV files. This guide imports those files on a computer; it does not convert an existing XML archive or connect Sheets directly to Apple Health.
Health.md includes 5 free export actions, followed by a single lifetime unlock. You do not need a Mac to create the manual iPhone export. Use a computer and a Google account for the browser-based Sheets steps below.
Step 1: Export one day as CSV
- Install Health.md on the iPhone with your Apple Health data and authorize the categories you want to read.
- Select CSV and Summary for daily totals. Choose Steps for this exercise, or Sleep for the sleep variation below.
- Set the export date format to YYYY-MM-DD for the date conversion below. Preview one known day, then export to a writable folder in Files.
- Make the daily CSV available on your computer through your chosen file provider or transfer method. If setup is incomplete, follow your first iPhone export.
A longer range produces one CSV file per day, not one combined spreadsheet. Each file has the header Date,Category,Metric,Value,Unit,Timestamp. The Value column is mixed-type: metadata and capture status appear alongside numbers, and selected data can add times, booleans, identifiers, or quoted JSON. Filter Category, Metric, and Unit before numeric analysis.
Keep your original CSV files. Detailed Time-Series adds selected samples and intervals; do not add those readings to daily summary totals or mix daily files with weekly/monthly rollups.
Before uploading: choose the destination deliberately
This guide uses a local folder export followed by a file upload to Google Sheets. Health.md builds that folder export on the device, with no Health.md server copy by default. Google stores the file and spreadsheet you import under its own terms. A synced folder follows its provider's rules too. Try the synthetic daily CSV sample, which contains fictional measurements and metadata, before uploading your own records.
This workflow does not use the separate opt-in, single-owner Health.md Cloud pilot. That pilot retains only API exports intentionally uploaded to it, has no public signup and no automatic device sync, and is not generally available. See the privacy policy and retention boundaries.
Step 2: Import and combine daily files
- On a computer, create a blank spreadsheet in Google Sheets. For this recipe, use File → Settings → Locale → United States before importing; the export's numeric text uses a decimal point. The formulas below use English function names and comma separators. Google's spreadsheet settings guide explains locale and function language.
- Choose File → Import → Upload, then select the synthetic sample or your first daily CSV. Use Replace spreadsheet only in this new, empty workbook; it replaces the open spreadsheet's contents. Set the separator to Comma, import, and name the tab Raw data.
- Inspect the six headers and a few source rows. Sheets can recognize numbers and dates during import, so compare them with the original CSV before analyzing. Some summary rows have five fields and omit Timestamp; that last cell should remain empty. Quoted commas or newlines must stay inside their original cells.
- To append the remaining daily files into one Raw data table, import each file using Insert new sheets. Copy its data rows below the last populated row in Raw data, keeping all six columns in order. Skip the imported header row, so the combined table has only one header. These temporary import tabs are not separate pivot sources.
- Check that all exported dates reached Raw data. Keep one intended version of each daily file; re-exports of the same day can duplicate totals. Keep rollups and unrelated files out of this table.
Google documents the CSV import options and separators and the Upload workflow. This is a manual snapshot: later exports on your phone do not appear in Sheets until you import them.
Step 3: Build a weekly steps table
- Select Raw data's populated range and use Data → Create a filter. Keep only
Category=Activity,Metric=Steps, andUnit=count. Copy only the visible matching rows into a new Steps tab, with all six columns and one header. Inspect the copied rows to confirm every row matches all three filters. Remove the raw sheet's filter when finished. See Google's filter instructions. - Check the Steps table for duplicate dates. There should be at most one daily total per Date. If there are two, investigate overlapping exports and keep the intended copy rather than summing both.
- If Date in column A imported as text, use this formula in a temporary spare column for each such row:
=DATE(VALUE(LEFT(A2,4)),VALUE(MID(A2,6,2)),VALUE(RIGHT(A2,2))). It reconstructs the specified YYYY-MM-DD text. Copy the converted dates, then Paste special → Values only back into the matching column A cells and format them as Date. Leave already recognized date values alone. Check the displayed dates against the original CSV. Other export date formats need a different conversion. - Add column G called Numeric value. Enter
=IF(D2="","",VALUE(D2))in G2 and fill down through the selected rows. The blank guard preserves missing cells. Check errors and the original text; do not replace failed conversions or missing values with zero. Changing the whole mixed Value column's number format cannot turn metadata into measurements. - Add column H called Week starting. Enter
=A2-WEEKDAY(A2,2)+1, fill down, and format that column as Date. Each label is the Monday that starts the week. These formulas follow Google's VALUE, DATE, and WEEKDAY references. - Select the entire Steps table, including both helper columns and all imported dates. Choose Insert → Pivot table and place it on a new sheet. In the pivot editor, add Week starting under Rows and Numeric value under Values. Set the summary to AVERAGE for average daily steps over recorded days, or SUM for recorded weekly totals. Google's pivot table guide explains source ranges and fields.
With the synthetic sample, filtering leaves one steps row: 2026-03-15, 12500 steps. Its Monday label is 2026-03-09. This single day checks your setup; import multiple dates for a useful weekly view.
A weekly average covers only dates with recorded numeric values. Missing days are not zero-step days, and an incomplete week is not a full seven-day record. If a pivot counts rows instead of showing the intended values, inspect the numeric helper cells and the selected summary function.
For a sleep trend, repeat the workflow in a separate Sleep tab with Category = Sleep, Metric = Total Duration, and Unit = seconds. Convert only those numeric duration rows, then add Hours with =IF(G2="","",G2/3600). The synthetic sample's 27900.0 seconds = 7.75 hours. Sleep Stage rows are not additional daily totals. A session belongs to the local date it started; see the Apple Health sleep export guide for choosing the right day.
Step 4: Add a chart and keep it current
For a simple daily chart, copy the Steps tab's Date and Numeric value columns into adjacent columns on a new Chart data tab, using Values only. Keep one header row, sort both columns together by Date, and select the populated range. Choose Insert → Chart, then a line chart in the chart editor. Use Date for the horizontal axis and label the series Steps. For sleep, use Date and Hours instead. Google's chart instructions cover the data range and chart type.
After importing more daily files, rebuild the filtered analysis copy, extend the helper formulas, and expand the pivot source range to include the new rows. Sheets updates a pivot when its source cells change, but it cannot include rows outside its configured range. Rebuild the manual Chart data copy and expand the chart's range too. Appending Raw data alone does not update those copied sheets.
Troubleshooting
- Everything is in one column: re-import with Comma as the separator.
- Numbers or dates look wrong: compare the CSV and Sheets cells, check the spreadsheet locale, and inspect the conversion before continuing. Formatting text as Date alone does not parse it.
- Totals look too large: check duplicated dates, repeated headers, mixed units, rollups, and sample rows added to daily summaries.
- A day or metric is absent: check the export date, selected metrics, source records, and authorization. An absent row does not establish zero or identify a specific permission state. See export troubleshooting.
- New days do not appear: check the analysis copy, helper formulas, pivot source range, and chart range. Uploads are snapshots, not live synchronization.
For the CSV contract and other spreadsheet apps, see Apple Health to CSV. If you prefer a desktop workbook, follow Apple Health to Excel. For Apple's native XML archive and other export methods, see how to export Apple Health data.