Invia i dati di Apple Health a un webhook
Apple Health non ha un'API web, quindi i tuoi dati arrivano a un webhook solo quando un'app sul tuo iPhone li invia. Marrow Health lo fa gratis: un'automazione invia in POST le tue metriche di salute, gli allenamenti, le serie di forza, il diario alimentare, o sintomi e umore a qualsiasi URL, in JSON o CSV, con la cadenza che scegli e con l'app chiusa. Qui sotto trovi la configurazione, il payload e dei ricevitori funzionanti per n8n, Home Assistant e un semplice server. Marrow lo facciamo noi.
Configura l'automazione
- In Marrow Health apri la scheda Esporta, poi Automatico, poi Nuova automazione.
- Incolla l'URL del tuo webhook (usa HTTPS). Aggiungi le intestazioni che il tuo ricevitore controlla, come un token bearer
Authorizationo una chiave header-auth di n8n. - Scegli il tipo di dati: Metriche di salute, Allenamenti, Registro forza, Diario alimentare oppure Sintomi e umore. Un'automazione invia un solo tipo, e puoi averne fino a dieci.
- Scegli JSON o CSV, l'intervallo di date (Dall'ultima esecuzione è quello predefinito) e la frequenza, in minuti, ore o giorni.
- Attivala e tocca Esegui ora per inviare un primo payload mentre guardi il ricevitore.
Ogni richiesta è una POST con Content-Type: application/json (o text/csv) e le tue intestazioni. Ogni esecuzione, con il suo codice di risposta, compare nella cronologia dell'automazione nell'app.
Che cosa arriva
Le metriche di salute arrivano come totali giornalieri, nell'unità indicata in units. La frequenza cardiaca arriva come media, minimo e massimo di ogni giorno, e il sonno come ogni notte con le sue fasi, in ore:
{"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"}]}
]}}
I payload di allenamenti, forza, alimentazione e umore, i campioni grezzi al posto dei totali giornalieri e il formato CSV sono nel riferimento delle automazioni.
Riceverlo in n8n
- Aggiungi un nodo Webhook. Imposta HTTP Method su
POSTe dagli un percorso, per esempioapple-health. - Per un segreto, imposta Authentication su Header Auth e aggiungi lo stesso nome e valore di intestazione all'automazione di Marrow.
- Clicca Listen for test event, poi tocca Esegui ora in Marrow entro due minuti. Il payload compare nell'editor.
- Pubblica il workflow e punta Marrow sul Production URL (quello con
/webhook/, non/webhook-test/). L'URL di test smette di ascoltare dopo un test.
Il payload è sotto body, quindi i passi di oggi sono {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} in un'espressione. Aggiungi un nodo Split Out su body.data.metrics per trattare ogni metrica come un elemento a sé. n8n accetta di default payload fino a 16 MB, sufficienti per anni di totali giornalieri. Le esecuzioni in produzione compaiono in Executions, non nell'editor. (documentazione del Webhook di n8n)
Riceverlo in Home Assistant
Un trigger webhook riceve la POST su /api/webhook/<webhook_id>. Questa automazione salva l'ultimo conteggio dei passi in un helper numerico chiamato input_number.steps_today (crealo prima, con un massimo superiore al tuo giorno migliore):
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 }}
- Il corpo JSON è in
trigger.jsonperché Marrow inviaContent-Type: application/json. local_onlyè attivo di default, quindi accetta invii solo dalla tua rete domestica o da un URL webhook cloud di Nabu Casa. Impostalo sufalsequando il telefono invia via internet al tuo indirizzo HTTPS.- L'ID del webhook è l'unico segreto, quindi fallo lungo e casuale.
(Documentazione dei trigger webhook di Home Assistant)
Riceverlo sul tuo server
Va bene qualsiasi endpoint che accetti una POST HTTPS e risponda 2xx. Questo archivia ogni payload in un file:
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()
Mettilo dietro HTTPS con un Cloudflare Tunnel, Tailscale Funnel o un reverse proxy. Se preferisci un database interrogabile a una cartella di file, il mirror self-hosted di Marrow è proprio quel ricevitore già pronto, e gli agenti IA possono interrogarlo.
Tre regole per un ricevitore che non perde mai dati
- Vince l'ultimo. Salva ogni valore con chiave metrica più giorno e sovrascrivilo se si ripete. Dall'ultima esecuzione reinvia apposta gli ultimi due giorni, perché Apple Health continua a completare un giorno anche dopo la sua fine.
- Salva prima il corpo grezzo, poi analizzalo. Un errore di parsing non deve mai costarti dei dati.
- Rispondi in fretta. Marrow aspetta fino al timeout che imposti (60 secondi di default) e, se un'esecuzione fallisce, la riprova al turno successivo dall'ultima finestra riuscita.
Quando viene eseguita?
Ogni volta che iOS lascia girare Marrow: dopo la sincronizzazione con Apple Health, quando lo apri e durante l'aggiornamento in background, una volta trascorso l'intervallo che hai scelto. È iOS a decidere quando avviene l'aggiornamento in background, quindi un telefono lasciato bloccato tutto il giorno invia al successivo sblocco, e Dall'ultima esecuzione copre il vuoto.
Altri modi per farlo
- Anche Health Auto Export invia i dati di Apple Health ai webhook, e il suo JSON delle metriche ha la stessa struttura di quello di Marrow. Le sue automazioni richiedono il livello Premium.
- Comandi rapidi di Apple può leggere i campioni di salute e inviarli con Get Contents of URL, in un'automazione personale a un orario stabilito. È gratuito, può leggere i dati di Salute solo a telefono sbloccato, e ogni metrica devi crearla e mantenerla tu.
- L'export.zip di Apple è un backup completo una tantum, non un flusso. Per trasformarlo in CSV usa il nostro convertitore nel browser.