Automatiseringar: dina data, skickade enligt schema
Marrow kan skicka en fil med din hälsodata med POST till vilken URL du vill, i den takt du vill, direkt från telefonen. Den här sidan är referensen: hur du ställer in en, hur varje payload ser ut och hur du skriver något som tar emot den.
Färdiga uppsättningar för n8n, Zapier, Make, Home Assistant, Google Sheets och InfluxDB finns under anslutningar.
Alla Marrow-guider: MCP · Spegel på egen server · Automatiseringar · Filer · Support
Vad en automatisering är
Ett sparat jobb i Exportera, Automatisk: en typ av data, ett format, ett datumintervall, en URL, en takt. Marrow bygger filen från sitt verifierade lager och skickar den med POST till URL:en med appen stängd, efter varje sparad synkning och vid varje uppdatering i bakgrunden, så snart takten har gått ut. Ingenting passerar oss: telefonen pratar direkt med din endpoint.
Så ställer du in en
- Fliken Exportera, Automatisk: slå på den och sedan Ny automatisering. När den skapas från ett verktygs sida (n8n, Zapier, Home Assistant och resten under anslutningar) får automatiseringen verktygets namn och berättar vid varje fält vad verktyget vill ha där.
- Adress: den https-URL den ska skicka POST till. Rubriker: alla som din mottagare behöver (en
Authorization-bearer-token, enX-Gitlab-Token, vad som helst). När verktyget inte behöver några finns Lägg till rubrik under Fler alternativ. - Data: Hälsomätvärden, Träningspass, Styrkelogg, Kostdagbok eller Symtom och humör, som JSON eller CSV. En automatisering bär en typ, så gör en för varje typ du vill ha. Varje en som är på räknas som en anslutning: Gratis har 1 anslutning på åt gången, Marrow Pro upp till 10, AI:er och servrar inräknade.
- Takt: var så många minuter, timmar eller dagar. Datumintervallet, aggregeringen och tidsgränsen finns under Fler alternativ.
- Kör nu skickar en första payload så att du kan kontrollera mottagaren innan du väntar på schemat.
Datumintervall
- Sedan senaste körningen (standard): allt sedan den senaste lyckade körningen, minus två dagars överlappning. HealthKit fortsätter fylla på en dag efter att den har tagit slut, så överlappningen skickar om nyligen avslutade dagar. Behåll det senaste värdet per mätvärde och dag hos dig, så är upprepningarna ofarliga. En mottagare som låg nere en tid får varje missad dag vid den första körning som lyckas.
- Idag, Senaste 7 / 30 / 90 dagarna, Senaste året: fasta rullande fönster som skickas om i sin helhet vid varje körning. Välj dem när du hellre vill ha en ögonblicksbild som läker sig själv än bara ändringarna sedan sist.
Payloadens form
Hälsomätvärden (dagssummor, JSON)
Samma struktur som Health Auto Exports mätvärden (en lista metrics med name, units och data med qty), så en mottagare som skrivits för den appen behöver bara små ändringar: datumen här är vanliga dagar, inte tidsstämplar, och payloads för träningspass och styrka nedan är Marrows egna. Värdena är i den lagrade enhet som anges i units (kg, m, mL, degC, kcal, count). Puls kommer som varje dags Avg, Min och Max i slag per minut, och sömn som varje natt med sina stadier i timmar. Räkna om hos dig om du vill ha brittiska eller amerikanska mått.
{"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"}]}
]}}
Råprover (grupperingen Råprover) skickar varje prov med start- och sluttid i stället för en dagssumma. CSV-mätvärden kommer som den breda tabell som beskrivs på filsidan.
Träningspass
{"data": {"workouts": [
{"activity": "Running", "start": "2026-09-11T18:43:41Z", "end": "2026-09-11T19:13:53Z",
"duration_min": 30.2, "kcal": 512, "distance_mi": 3.06, "avg_hr": 174, "source": "Apple Watch"}
]}}
Styrkelogg
Varje arbetsset (uppvärmningsset utelämnas), plus framsteg per övning och volym per muskelgrupp. Vikterna är i den enhet du valde i Inställningar, Enheter. Fältet unit säger vilken. Varje sets set_type är work, failure eller drop, och ett set har också rir när du loggade repetitioner kvar. set_credits räknar de set som tillgodoräknas en muskelgrupp, i bråkdelar när en övning tränar flera grupper.
{"data": {"unit": "lb",
"sets": [{"time": "2026-09-11T17:02:00Z", "session": "Push day", "exercise": "Bench Press",
"set": 1, "weight": 185, "reps": 8, "est_1rm": 229.6, "set_type": "work"}],
"exercises": [{"exercise": "Bench Press", "best_est_1rm": 229.6,
"sessions": [{"date": "2026-09-11T17:02:00Z", "sets": 3, "top_weight": 185, "top_reps": 8, "est_1rm": 229.6, "volume": 3885}]}],
"muscle_groups": [{"group": "Chest", "volume": 3108.0, "set_credits": 2.4}]
}}
Kostdagbok
{"data": {"days": [
{"day": "2026-09-11", "entries": [
{"meal": "breakfast", "name": "Oatmeal", "grams": 250, "kcal": 300,
"protein_g": 10, "carbs_g": 54, "fat_g": 5, "logged_at": "2026-09-11T12:10:00Z",
"nutrients": {"dietary_fiber": 8.0, "dietary_sugar": 1.2}}
]}
]}}
Skriva en mottagare
Allt som tar emot en HTTPS POST och svarar 2xx fungerar: en webhook-tjänst, en serverlös funktion, ett skript på en hemmaserver. Tre regler gör den robust:
- Senaste vinner. Spara värden med (mätvärde, dag) eller postens egen identitet som nyckel och skriv över vid upprepning. Fönstren överlappar med flit.
- Arkivera råinnehållet först. Tolka det sedan. Ett fel i tolken ska aldrig kosta dig data.
- Svara snabbt. Marrow väntar upp till den tidsgräns du ställer in (standard 60 s) och markerar annars körningen som misslyckad. Misslyckade körningar görs om vid nästa tick i takten, från det senaste lyckade fönstret.
En mottagare i Python på tolv rader som arkiverar varje anrop:
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()
Lägg den bakom HTTPS (en Cloudflare Tunnel, Tailscale Funnel eller vilken omvänd proxy som helst) och peka automatiseringen mot den. Om du hellre vill ha en kopia du kan söka i än en mapp med filer är spegeln på egen server just den mottagaren, redan skriven.
Bra att veta
- Automatiseringar körs bara när iOS låter appen köra: efter en sparad synkning, vid uppdatering i förgrunden och under uppdatering i bakgrunden. En telefon som ligger låst hela dagen skickar när den låses upp nästa gång. Fönstret sedan senaste körningen täcker glappet.
- Varje körning loggas i automatiseringens Aktivitetslogg (Fler alternativ) med sitt resultat, så en felaktig URL syns i appen och inte bara på din server.
- Duplicera en automatisering för att återanvända dess rubriker för en annan typ.
Felsökning
Testa med Kör nu. Raden under den berättar vad som hände, och Fler alternativ, Aktivitetslogg sparar de senaste 30 körningarna med samma rad. Slå på Meddela vid körning (Fler alternativ) för att få en avisering för varje körning medan du kontrollerar.
| Vad Marrow visar | Vad du gör |
|---|---|
En sammanfattning av vad som skickades, till exempel 12 diary entries | Levererad: mottagaren svarade 2xx. Om inget syns hos den, se de sista raderna nedan. |
Server answered 401 eller 403 | Mottagaren vill ha en rubrik, eller så är den du lade till fel. Kontrollera dess namn och värde, inklusive Bearer och mellanslaget efter det. |
Server answered 404 | Fel adress, eller så lyssnar inte mottagaren. I n8n, använd Production URL och aktivera arbetsflödet. Kontrollera om en sökväg saknas i slutet. |
Server answered 405 | Adressen tar inte emot en POST. Peka mot den endpoint som är avsedd för inkommande data. |
Server answered 413 | Payloaden är för stor för mottagaren. Välj ett kortare datumintervall, färre mätvärden eller Dagssummor i stället för Råprover. |
Server answered 500 eller en annan 5xx | Mottagaren föll på handläggningen. Titta i dess egen logg. Arkivera råinnehållet först och tolka det sedan. |
| The request timed out | Mottagaren tog längre tid än tidsgränsen. Svara först och jobba efteråt, eller höj Timeout under Fler alternativ (upp till 300 s). |
| The App Transport Security policy requires the use of a secure connection | Adressen är vanlig http på internet. Använd https. iOS låter Marrow använda vanlig http bara i ditt eget nätverk. |
| A server with the specified hostname could not be found | Ett stavfel i adressen, eller ett namn som bara ditt hemnätverk känner till. Kontrollera det i Safari på telefonen. |
No valid URL - set an https endpoint first | Adressen är tom eller börjar inte med https:// (eller http:// i ditt eget nätverk). |
Nothing to export in this range | Inga data av den typen i datumintervallet. Välj ett längre intervall under Fler alternativ, eller logga något först. |
- Levererad, men ingenting kommer fram. Vissa mottagare svarar 200 även när de släpper datan. Home Assistant gör det med ett felaktigt webhook-id, och receptet för Apps Script gör det med en felaktig
?key=. Zapier och Make visar ingenting förrän du laddar ett exempel i deras editor. Kontrollera mottagarens egen historik eller logg. - Körningar kommer sent eller inte alls. iOS väljer tidpunkten för körningar i bakgrunden: efter en synkning, när du öppnar Marrow och under uppdatering i bakgrunden. Låt Appuppdatering i bakgrunden vara på för Marrow (Inställningar, Allmänt, Appuppdatering i bakgrunden). Lågenergiläge håller tillbaka körningar i bakgrunden, och en telefon som ligger låst skickar när den låses upp nästa gång. Sedan senaste körningen hämtar ikapp vid nästa körning som lyckas.
- En mottagare i ditt hemnätverk. Marrow behöver åtkomst till lokalt nätverk för att nå den: Inställningar, Integritet och säkerhet, Lokalt nätverk. Tryck på Kör nu en gång med Marrow öppen så att iOS kan fråga. I bakgrunden nekar iOS utan att fråga tills du har svarat.
- Svepte bort den. Efter att du har svept bort Marrow i appväxlaren kanske iOS inte väcker den i bakgrunden igen förrän du öppnar den.
- Samma dagar kommer två gånger. Med flit: Sedan senaste körningen skickar om de två sista dagarna, eftersom Apple Health fortsätter fylla på dem. Behåll det senaste värdet per mätvärde och dag.
- Den går inte att slå på. Varje automatisering som är på räknas som en anslutning. Gratis har 1 anslutning på åt gången, Marrow Pro upp till 10: AI:er, servrar och automatiseringar tillsammans. Slå av en annan först.
- Enheterna ser fel ut. Mätvärden kommer i de lagrade enheter som anges i
units(kg, m, mL, degC, kcal). Styrkeset följer Inställningar, Enheter, och fältetunitsäger vilken.
Lösningar för ett verktyg i taget finns på dess sida: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, valfri URL.