If you run a homelab and want your Apple Health metrics in your own Grafana, Home Assistant, and an API you control, HealthSave is built for exactly that. With a one-time Pro unlock, the iOS app background-syncs your HealthKit data to a server you run, exposes a private REST API, and can push live metrics into Home Assistant. There is no hosted cloud in the middle — the destination is always a box you own.
I'm Umut. I built HealthSave because this is my own use case: I wanted Apple Watch data flowing into my homelab next to everything else I self-host. This page is the pipeline I actually run, including where it's rough.
The pipeline, end to end
Here's the shape of it:
iPhone (Apple Health)
└─ HealthSave Pro ──(background auto-sync, ~1–5 min)──▶ your server
├─▶ Grafana panels
├─▶ Home Assistant entities
└─▶ private REST API (your scripts)
Apple Health is the on-ramp; your hardware is the destination. The app reads HealthKit on-device and, with Pro, pushes batches to a server URL you set. Nothing routes through a HealthSave server, because there isn't one.
Step 1 — Get the data flowing off the phone
In the app: Settings → Server Sync, set the Server URL to your server (e.g. http://your-server-ip:8000), optionally add an API key, and tap sync. Two things worth knowing up front:
- iOS won't sync to
localhost— point it at the LAN IP or hostname of the box running the backend. - Background sync is best-effort, roughly 1–5 minutes end to end. It is not a real-time stream. Design anything downstream to tolerate that latency.
Step 2 — Stand up the backend (the source-available Observatory)
You need something on the other end to receive the batches. The optional companion backend, HealthSave Observatory (the datahub project), is source-available under the Elastic License 2.0 — you can self-host it freely on a laptop, NUC, Mac mini, Synology, or a Proxmox VM. It's a FastAPI + TimescaleDB stack you bring up with Docker, and it ships Grafana dashboards out of the box plus a private read API.
The iOS app speaks a frozen v1 contract to it (POST /api/apple/batch), so the wire format is stable. If you'd rather build your own receiver, you can — the protocol/client layer is permissively licensed (Apache-2.0) precisely so anything can speak the format.
Honest architecture note: there is no hosted backend. "Self-host" means you run and maintain the server, the database, backups, and any reverse proxy yourself. If you don't want to operate a server, the standalone export workflow (CSV/JSON to a file) is the simpler path.
Step 3 — Grafana panels over your own history
Once data lands in TimescaleDB, the bundled Grafana dashboards give you SQL-backed exploration: resting heart rate over months, HRV trends, sleep duration, steps — your real longitudinal record, not a 90-day window. Because it's your Postgres, you can write your own panels and queries against it.
Step 4 — Home Assistant entities and automations
HealthSave Pro can push live health metrics into a self-hosted Home Assistant instance, turning metrics like heart rate, steps, and sleep into HA entities. From there they're just sensors — you can build automations on them.
A realistic example, given the latency: a recovery-aware morning scene that reads last night's resting HR and HRV and adjusts lighting/thermostat when you get up. That tolerates a few minutes of lag. What I would not build is anything safety-critical or sub-minute on this path — the ~1–5 minute, best-effort nature means it's for ambient automations, not alarms.
Step 5 — The private REST API for your own scripts
Pro unlocks REST API access so your scripts, notebooks, and tools can query your body data from the server you run. This is the part self-hosters care about most: your data, queryable, on your terms, behind your own auth — feed it into a Jupyter notebook, a cron job, or a future local agent.
What's free vs Pro for this workflow
| Capability | Tier |
|---|---|
| On-device dashboard, CSV/JSON export | Free |
| 7-day export history | Free |
| Background auto-sync to your server | Pro |
| REST API access | Pro |
| Home Assistant integration | Pro |
| Full 30/90-day trends, PDF, unlimited export history | Pro |
Pro is a one-time $24.99 purchase with Family Sharing — no subscription. For a self-hoster, that's the whole automation layer unlocked once.
Honest limits for this audience
- You run the server. No managed/hosted option exists. Budget time for setup, backups, and a reverse proxy if you expose it.
- Sync is best-effort ~1–5 min, not instant — fine for dashboards and ambient automations, wrong for real-time triggers.
- iOS only today. Android Health Connect capture is on the Observatory roadmap but not shipped.
- The Observatory core is Elastic 2.0 (source-available): self-host freely, but you may not offer it to third parties as a managed service.
- Accuracy depends on your wearable. The pipeline faithfully moves whatever your device recorded; it doesn't validate sensors.
HealthSave is not a medical device. It is for informational purposes only and does not diagnose, treat, cure, or prevent any disease or condition. Privacy claims of zero data collection apply to the iOS app; self-host sync sends your data to your own server.
Related
- Push live Apple Health metrics into Home Assistant — the HA setup in detail.
- Apple Health's export is unusable XML — get real CSV instead.
- How HealthSave handles your data — what leaves the device and what doesn't.
Get HealthSave
Download free, try the export, then unlock the homelab stack with a one-time Pro purchase when you're ready to wire it into your server.
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.