To get live Apple Health metrics into Home Assistant, HealthSave Pro background-syncs your HealthKit data to a server you run, and those metrics show up as Home Assistant entities you can automate. There's no cloud bridge in the middle — the data goes from your iPhone to your own infrastructure. This guide is the real setup, including the latency you need to design around.
I'm Umut, the developer, and an HA user myself. I'll tell you where this is great and where it isn't.
The architecture (and why there's no shortcut)
The flow is: iPhone (Apple Health) → HealthSave Pro background sync → your server → Home Assistant entities. The key honesty up front: there is no hosted backend. "Self-hosted" means you stand up and run the receiving server and your own Home Assistant instance. HealthSave doesn't host anything for you — which is the point if you care about your data staying on your hardware.
The second honesty: background sync is best-effort, roughly 1–5 minutes end to end. It is not a real-time stream. Build automations that tolerate a few minutes of latency; do not build anything time-critical or safety-critical on this path.
What you need
- HealthSave Pro (one-time $24.99, no subscription; Family Sharing included). HA integration, background sync, and the REST API are Pro features.
- A server you run to receive the synced data — a NUC, Mac mini, Synology, Raspberry Pi, or a Proxmox VM. The source-available HealthSave Observatory backend is the reference receiver; technical users can also build their own.
- A self-hosted Home Assistant instance on your LAN.
Setup
- Stand up the receiving server on your network and note its LAN IP and port.
- In HealthSave: Settings → Server Sync → set the Server URL to your server (e.g.
http://your-server-ip:8000; iOS won't sync tolocalhost), optionally set an API key, and enable background sync. - Connect Home Assistant to that server so your chosen metrics — heart rate, resting HR, steps, sleep, SpO2 — surface as HA entities/sensors.
- Confirm entities are updating in HA before you wire automations to them. Remember the ~1–5 minute refresh.
Example automation (latency-tolerant by design)
A realistic, useful one: a recovery-aware morning routine. When you get up, HA reads last night's resting heart rate and HRV (synced from Apple Health) and adjusts the morning scene — softer lights and a slightly warmer thermostat on a high-resting-HR "rough night," a brighter, brisker scene on a well-recovered morning. This works precisely because it doesn't care whether the data arrived 30 seconds or 4 minutes ago.
What I'd avoid on this path: anything that needs to fire the instant your heart rate crosses a threshold. The best-effort latency makes it wrong for alerts or safety triggers — treat these as ambient automations.
Free vs Pro
| Capability | Tier |
|---|---|
| On-device dashboard, CSV/JSON export | Free |
| Background sync to your server | Pro |
| Home Assistant integration | Pro |
| REST API access | Pro |
Honest limits
- You run the server and HA. No hosted bridge exists; this is a self-hoster's setup.
- Best-effort ~1–5 min sync, not real-time. Ambient automations only.
- Pro-gated ($24.99 one-time).
- iOS only, reads Apple Health; data must already be in HealthKit.
- Accuracy is your wearable's — HA gets whatever your device recorded, as-is.
HealthSave is not a medical device. It is for informational purposes only and does not diagnose, treat, cure, or prevent any disease or condition. Do not build medical or safety-critical automations on this data; the accuracy of health data depends on your wearable device and its sensors.
Related
- Apple Health data for self-hosters — the full homelab pipeline with Grafana and the REST API.
- Apple Health's export is unusable XML — get clean CSV.
- HealthSave FAQ.
Get HealthSave
Download free, then unlock background sync, the REST API, and Home Assistant with a one-time Pro purchase.
Download HealthSave on the App Store
By Umut — developer of HealthSave. I built HealthSave because I wanted my own Apple Health data out of its silo and into my homelab. I use it every day.