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.
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.
Which integration path?
Three ways to get Apple Health data into your home automation, depending on what you're optimizing for:
| Path | Best for | What you run |
|---|---|---|
| Direct HA push (this guide) | Live sensor.healthsave_* entities with the least moving parts | Just Home Assistant — HealthSave pushes straight to it |
| Observatory hub | Full history, Grafana dashboards, and a REST API over the same data | The self-hosted Observatory server (Docker Compose) |
| MQTT bridge | Alerting and automations in any MQTT-connected system | A broker + the Observatory bridge, or a community backend that publishes MQTT natively |
They're not exclusive — plenty of setups start with the direct push and add the hub later for history. All three ride the same sync engine and the same latency truth above.
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 open-core HealthSave Observatory project is the reference receiver; its protocol and SDK layers are open source, and technical users can also build their own receiver.
- 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 |
Troubleshooting: entities that flap to "unavailable"
The most common complaint, and it's usually not a bug: HealthKit data arrives in bursts, not a steady trickle. Your watch syncs a clump of samples, then nothing for a while. If Home Assistant's staleness window for an entity is shorter than the gap between bursts, HA flips it to unavailable in between, so a perfectly healthy metric looks broken. Two fixes:
- Widen the staleness window for the affected sensors so a normal quiet gap doesn't expire them. Heart rate aggregates and HRV especially need generous windows because they update less often than steps.
- Design automations to read the last known value, not to trigger on a fresh push. Treat the entity as a slowly-moving state, not an event stream.
If an entity never populates at all, the data isn't reaching the server yet, confirm the app's last sync succeeded (Settings → Server Sync), and remember iOS won't sync to localhost; it needs your server's LAN IP or hostname.
Beyond the native integration: MQTT and Node-RED
If you'd rather not wire HA to the server directly, the Observatory bridge can republish your metrics over MQTT with Home Assistant MQTT discovery, so the same heart-rate and sleep data shows up as entities automatically, and Node-RED or any other MQTT client can subscribe to the same topics. It's the same best-effort latency, just a different transport. The Apple Health to MQTT guide walks through the broker setup.
"There are already a couple of unstable and unreliable apps out there"
That's a real pre-purchase question we received, quoted verbatim — and if you've been burned by a flaky health-to-HA bridge before, it deserves a straight answer rather than a marketing one.
The honest mechanics: the unreliable part of every app in this category is the same — iOS decides when background work runs, not the app. Anything promising you a real-time stream from an iPhone is overpromising. HealthSave's design accepts that constraint instead of fighting it: best-effort sync (roughly 1–5 minutes end to end), automations designed to be latency-tolerant, and an immediate foreground sync whenever you open the app.
What we can say from the track record: the sync pipeline's data integrity has held even when other things broke. During a display bug earlier this year (a blank system sheet on launch — documented in the troubleshooting guide, fixed in 1.5.4), affected users' Grafana dashboards and Home Assistant entities kept receiving data the entire time. The failure was cosmetic; the pipeline didn't drop samples. And when a self-hosted backend rejects a batch, HealthSave stops that metric rather than silently skipping past it — conservative by design, with a two-tap recovery.
If you want to try before relying on it: the export features are free — install it, watch it read your data, and upgrade to Pro only when you want the sync.
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.
FAQ
Does HealthSave send my Apple Health data through a cloud to reach Home Assistant?
No. Background sync goes from your iPhone to a server you run, and Home Assistant reads from that server. There is no hosted bridge and no HealthSave cloud in the path, the data stays on your hardware.
How fresh are the Home Assistant entities?
Best-effort, roughly 1–5 minutes from watch to HA. It is not a real-time stream. Build ambient, latency-tolerant automations on these entities, not alerts or anything safety-critical.
Why do my HealthSave entities show "unavailable" between syncs?
HealthKit data arrives in bursts. If an entity's staleness window is shorter than the gap between syncs, Home Assistant marks it unavailable until the next push. Widen the staleness window for those sensors, and read the last known value rather than triggering on a fresh update.
Is the Home Assistant integration free?
No. Home Assistant integration, background sync, and the REST API are Pro features, a one-time $24.99 purchase with Family Sharing, no subscription. The on-device dashboard and CSV/JSON export are free.
Can I use MQTT or Node-RED instead of the native integration?
Yes. The Observatory bridge can republish your metrics over MQTT with Home Assistant discovery, so they appear as entities automatically and Node-RED can subscribe to the same topics. See the Apple Health to MQTT guide.
Can I get my medications into Home Assistant for reminders?
Yes, on iOS 26+ — Apple opened the Medications API to third-party apps in iOS 26, and HealthSave exports your medication list and dose events, which means dose-taken data can reach your automations like any other metric. See the medications export guide. Treat it as informational, not as a medical safety system.
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 guides
- Backends that speak HealthSave, the official hub, community servers, and how to build your own.
- Publish Apple Health metrics over MQTT, the MQTT/Node-RED version of this setup.
- Put your Apple Health history into Grafana, dashboards over the same synced data.
- Build a custom REST API over your Apple Health data, query the metrics HA reads.
- Back up 10+ years of history, so your automations have real baselines.
- Apple Health data for self-hosters, the full homelab pipeline end to end.
- 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