Send Apple Health-data til en webhook
Apple Health har ingen web-API, så dine data når kun en webhook, når en app på din iPhone sender dem. Marrow Health gør det gratis: en automatisering sender dine sundhedsmålinger, træninger, styrkesæt, kostdagbog eller symptomer og humør med POST til en hvilken som helst URL, som JSON eller CSV, efter den tidsplan du vælger, mens appen er lukket. Nedenfor finder du opsætningen, indholdet og fungerende modtagere til n8n, Home Assistant og en almindelig server. Vi laver Marrow.
Opsæt automatiseringen
- Åbn fanen Eksporter i Marrow Health, derefter Automatiseret og så Ny automatisering.
- Indsæt din webhook-URL (brug HTTPS). Tilføj de headers, din modtager tjekker, fx et bearer-token i
Authorizationeller en n8n-nøgle til header-godkendelse. - Vælg slags data: Sundhedsmålinger, Træninger, Styrkelog, Kostdagbog eller Symptomer og humør. Én automatisering sender én slags, og du kan have op til ti.
- Vælg JSON eller CSV, datointervallet (Siden seneste kørsel er standard), og hvor ofte den kører, i minutter, timer eller dage.
- Slå den til, og tryk på Kør nu for at sende det første indhold, mens du holder øje med modtageren.
Hver anmodning er en POST med Content-Type: application/json (eller text/csv) og dine headers. Hver kørsel med sin svarkode står i automatiseringens historik i appen.
Hvad der kommer frem
Sundhedsmålinger kommer som daglige totaler i den enhed, der står i units. Puls kommer som hver dags gennemsnit, minimum og maksimum, og søvn som hver nat med sine faser, i timer:
{"data": {"metrics": [
{"name": "body_mass", "units": "kg",
"data": [{"date": "2026-09-11", "qty": 81.3}]},
{"name": "step_count", "units": "count",
"data": [{"date": "2026-09-11", "qty": 8746}]},
{"name": "heart_rate", "units": "bpm",
"data": [{"date": "2026-09-11", "Avg": 71, "Min": 52, "Max": 148}]},
{"name": "sleep_analysis", "units": "h",
"data": [{"date": "2026-09-11", "totalSleep": 7.2, "asleep": 7.2, "deep": 1.1, "rem": 1.6, "core": 4.3, "awake": 0.2,
"sleepStart": "2026-09-10 23:36:00 -0400", "sleepEnd": "2026-09-11 07:02:00 -0400"}]}
]}}
Indholdet for træning, styrke, ernæring og humør, rå prøver i stedet for daglige totaler og CSV-opbygningen står i referencen til automatiseringer.
Modtag det i n8n
- Tilføj en Webhook-node. Sæt HTTP Method til
POST, og giv den en sti, fxapple-health. - Til en hemmelighed sætter du Authentication til Header Auth og tilføjer samme headernavn og værdi i Marrow-automatiseringen.
- Klik på Listen for test event, og tryk derefter på Kør nu i Marrow inden for to minutter. Indholdet vises i editoren.
- Udgiv workflowet, og peg Marrow på Production URL (den med
/webhook/, ikke/webhook-test/). Test-URL'en holder op med at lytte efter en test.
Indholdet ligger under body, så dagens skridt er {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} i et udtryk. Tilføj en Split Out-node på body.data.metrics for at behandle hver måling som sit eget element. n8n tager som standard imod indhold op til 16 MB, hvilket rummer flere års daglige totaler. Kørsler i produktion vises under Executions, ikke i editoren. (n8n Webhook docs)
Modtag det i Home Assistant
En webhook-trigger tager imod POST på /api/webhook/<webhook_id>. Denne automatisering gemmer det seneste skridttal i en talhjælper kaldet input_number.steps_today (opret den først med et maksimum over din bedste dag):
automation:
- alias: "Apple Health from Marrow"
triggers:
- trigger: webhook
webhook_id: "pick-a-long-random-id"
allowed_methods:
- POST
local_only: false
actions:
- action: input_number.set_value
target:
entity_id: input_number.steps_today
data:
value: >-
{{ ((trigger.json.data.metrics
| selectattr('name', 'eq', 'step_count') | first).data
| last).qty }}
- JSON-indholdet ligger i
trigger.json, fordi Marrow senderContent-Type: application/json. local_onlyer slået til som standard, hvilket kun tager imod indlæg fra dit hjemmenetværk eller en webhook-URL via Nabu Casa Cloud. Sæt den tilfalse, når telefonen sender via internettet til din egen HTTPS-adresse.- Webhook-ID'et er den eneste hemmelighed, så gør det langt og tilfældigt.
(Dokumentation til webhook-trigger i Home Assistant)
Modtag det på din egen server
Ethvert endpoint, der tager imod en HTTPS POST og svarer med 2xx, virker. Dette her arkiverer alt indhold i en fil:
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
class H(BaseHTTPRequestHandler):
def do_POST(self):
body = self.rfile.read(int(self.headers.get("Content-Length", 0)))
with open(f"marrow-{int(time.time())}.json", "wb") as f:
f.write(body)
self.send_response(200)
self.end_headers()
HTTPServer(("0.0.0.0", 8798), H).serve_forever()
Sæt den bag HTTPS med en Cloudflare Tunnel, Tailscale Funnel eller en reverse proxy. Hvis du hellere vil have en database, du kan forespørge, end en mappe med filer, er Marrows selvhostede spejl netop den modtager, allerede skrevet, og AI-agenter kan også forespørge den.
Tre regler for en modtager, der aldrig mister data
- Den seneste vinder. Gem hver værdi med måling og dag som nøgle, og overskriv ved gentagelse. Siden seneste kørsel sender bevidst de sidste to dage igen, fordi Apple Health bliver ved med at udfylde en dag, efter den er slut.
- Gem den rå tekst først, og læs den så. En fejl i læsningen må aldrig koste dig data.
- Svar hurtigt. Marrow venter op til den timeout, du har sat (60 sekunder som standard), og prøver en mislykket kørsel igen fra det seneste vellykkede tidsrum ved næste omgang.
Hvornår kører den?
Når som helst iOS lader Marrow køre: efter synkronisering med Apple Health, når du åbner den, og under opdatering i baggrunden, så snart det valgte interval er gået. iOS bestemmer, hvornår opdatering i baggrunden sker, så en telefon, der ligger låst hele dagen, sender, næste gang den låses op, og Siden seneste kørsel dækker hullet.
Andre måder at gøre det på
- Health Auto Export sender også Apple Health-data til webhooks, og dens JSON med målinger har samme opbygning som Marrows. Dens automatiseringer kræver Premium-niveauet.
- Apple Genveje kan læse sundhedsprøver og sende dem med Get Contents of URL i en personlig automatisering på et fast tidspunkt. Det er gratis, den kan kun læse Health-data, mens telefonen er låst op, og du bygger og vedligeholder hver måling selv.
- Apples export.zip er en engangssikkerhedskopi af det hele, ikke en strøm. Vil du gøre en til CSV, så brug vores konverter i browseren.