Holocene

Support

Holocene reads a CSV or JSON file and writes the readings into Apple Health — showing you exactly what it found first, and letting you take the whole import back out again whenever you want.

Getting help

Email holocene@shaizi.fr. Please say which iPhone and iOS version you are on, and — if a file would not import — paste the first few rows of it. Do not send health readings you would rather keep private; the row structure is what matters, and you can replace the values with made-up ones.

The file format

One row is one reading. Columns may be in any order, and the common spellings other apps use are understood.

type,start,end,value,unit,source
heart_rate,2026-08-18T22:41:00Z,,58,bpm,Chest strap
sleep,2026-08-18T23:10:00Z,2026-08-19T01:40:00Z,deep,,Chest strap
steps,2026-08-18T08:00:00Z,2026-08-18T18:00:00Z,8000,count,Phone

JSON works too — an array of objects with the same fields.

What can be imported

typeWritten to Health asUnitNeeds an end time
heart_rateHeart Ratecount/min, bpmno
resting_heart_rateResting Heart Ratecount/min, bpmno
hrv_sdnnHeart Rate Variability (SDNN)ms, sno
spo2Blood Oxygenfraction, %no
respiratory_rateRespiratory Ratecount/minno
body_temperatureBody TemperaturedegC, degFno
stepsStep Countcountyes
active_energyActive Energykcal, kJyes
sleepSleep Analysisa stageyes

Sleep stages: inBed, awake, core, deep, rem, asleep.

Times

ISO-8601 is the safe form: 2026-08-18T22:41:00Z, or with an offset, 2026-08-19T00:41:00+02:00. Unix timestamps work. A bare date such as 2026-08-18 is read as midnight in your time zone, and Holocene tells you it made that assumption.

Common problems

“Row 14: unknown unit …”

The unit column holds something Holocene cannot map with certainty. The message lists the units that type accepts. It refuses rather than guessing, because a wrong unit puts a wrong number in your health record.

“'12,345' is ambiguous”

A comma before exactly three digits could be a decimal comma or a thousands separator — twelve thousand, or twelve point three. Use a dot for the decimal point, or remove the separator.

“… covers a window, so it needs an end time”

Steps, active energy and sleep are measured over a period, not at an instant. Give both a start and an end.

“… is outside the plausible range”

The value is impossible for that measurement — a heart rate of 1200, or a temperature that is really a deviation from a baseline rather than an absolute reading.

I imported the same file twice

Nothing is duplicated. Each reading carries a key made from its source, type and time, so a second import of the same file changes nothing, and a corrected file replaces what was there.

Removing an import

Open the History tab, tap the import, and choose Remove These Samples from Health. To take back everything at once, use Remove Everything Holocene Wrote at the bottom of that tab.

Holocene can only ever delete samples it wrote itself. Readings from other apps, from a watch, or entered by hand in the Health app cannot be touched by it.

Privacy

Your health data never leaves your device. Holocene contains no networking code, has no account, and asks only for permission to write to Health — never to read it. The full policy is at holocene.shaizi.fr/privacy.