Apple Health डेटा को वेबहुक पर भेजें
Apple Health का कोई वेब API नहीं है, इसलिए आपका डेटा वेबहुक तक तभी पहुँचता है जब आपके iPhone का कोई ऐप उसे भेजे। Marrow Health यह मुफ़्त में करता है: एक ऑटोमेशन आपके स्वास्थ्य मेट्रिक्स, वर्कआउट, स्ट्रेंथ सेट, फ़ूड डायरी, या लक्षण और मूड को किसी भी URL पर JSON या CSV में POST करता है, आपके चुने समय पर, ऐप बंद होने पर भी। नीचे सेटअप, पेलोड, और n8n, Home Assistant और एक सादे सर्वर के लिए चालू रिसीवर हैं। Marrow हम बनाते हैं।
ऑटोमेशन सेट करें
- Marrow Health में एक्सपोर्ट टैब खोलें, फिर स्वचालित, फिर नया ऑटोमेशन.
- अपना वेबहुक URL पेस्ट करें (HTTPS इस्तेमाल करें)। आपका रिसीवर जो भी हेडर जाँचता हो वे जोड़ें, जैसे
Authorizationबेयरर टोकन या n8n का हेडर-ऑथ की। - डेटा का प्रकार चुनें: स्वास्थ्य मेट्रिक्स, वर्कआउट, स्ट्रेंथ लॉग, पोषण डायरी, या लक्षण और मूड। एक ऑटोमेशन एक ही प्रकार भेजता है, और आप दस तक बना सकते हैं।
- JSON या CSV चुनें, तारीख़ों का दायरा (पिछली दौड़ के बाद से डिफ़ॉल्ट है) और यह कितनी बार चले, मिनट, घंटे या दिन में।
- इसे चालू करें और अभी चलाएं पर टैप करके पहला पेलोड भेजें, जबकि आप रिसीवर को देख रहे हों।
हर अनुरोध एक POST है, जिसमें Content-Type: application/json (या text/csv) और आपके हेडर होते हैं। हर रन, अपने रिस्पॉन्स कोड के साथ, ऐप में उस ऑटोमेशन के इतिहास में दिखता है।
क्या पहुँचता है
स्वास्थ्य मेट्रिक्स दैनिक योग के रूप में आते हैं, उस इकाई में जो units में लिखी है। हार्ट रेट हर दिन के औसत, न्यूनतम और अधिकतम के रूप में आती है, और नींद हर रात के रूप में उसके चरणों के साथ, घंटों में:
{"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"}]}
]}}
वर्कआउट, स्ट्रेंथ, पोषण और मूड के पेलोड, दैनिक योग की जगह रॉ सैम्पल, और CSV का ढाँचा ऑटोमेशन संदर्भ में हैं.
n8n में पाएँ
- एक Webhook नोड जोड़ें। HTTP Method को
POSTपर रखें और उसे एक पाथ दें, जैसेapple-health. - सीक्रेट के लिए Authentication को Header Auth पर रखें और वही हेडर नाम और मान Marrow के ऑटोमेशन में भी जोड़ें।
- Listen for test event पर क्लिक करें, फिर दो मिनट के भीतर Marrow में अभी चलाएं पर टैप करें। पेलोड एडिटर में दिख जाएगा।
- वर्कफ़्लो पब्लिश करें और Marrow को Production URL पर लगाएँ (वह जिसमें
/webhook/हो,/webhook-test/नहीं)। टेस्ट URL एक टेस्ट के बाद सुनना बंद कर देता है।
पेलोड body के नीचे होता है, इसलिए एक्सप्रेशन में आज के कदम {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} हैं। हर मेट्रिक को अलग आइटम की तरह सँभालने के लिए body.data.metrics पर एक Split Out नोड जोड़ें। n8n डिफ़ॉल्ट रूप से 16 MB तक के पेलोड लेता है, जो सालों के दैनिक योग के लिए काफ़ी है। प्रोडक्शन रन Executions में दिखते हैं, एडिटर में नहीं। (n8n Webhook दस्तावेज़)
Home Assistant में पाएँ
वेबहुक ट्रिगर /api/webhook/<webhook_id> पर POST लेता है। यह ऑटोमेशन ताज़ा कदम संख्या को input_number.steps_today नाम के नंबर हेल्पर में रखता है (इसे पहले बनाएँ, अधिकतम मान आपके सबसे अच्छे दिन से ऊपर रखकर):
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 बॉडी
trigger.jsonमें होती है, क्योंकि MarrowContent-Type: application/jsonभेजता है. local_onlyडिफ़ॉल्ट रूप से चालू होता है, जो सिर्फ़ आपके घर के नेटवर्क या Nabu Casa के क्लाउड वेबहुक URL से आए पोस्ट लेता है। जब फ़ोन इंटरनेट से आपके अपने HTTPS पते पर पोस्ट करे, तब इसेfalseकर दें।- वेबहुक ID ही अकेला सीक्रेट है, इसलिए उसे लंबा और बेतरतीब रखें।
(Home Assistant वेबहुक ट्रिगर के दस्तावेज़)
अपने सर्वर पर पाएँ
जो भी एंडपॉइंट HTTPS POST ले और 2xx से जवाब दे, वह चलेगा। यह वाला हर पेलोड को एक फ़ाइल में सहेज लेता है:
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()
इसे Cloudflare Tunnel, Tailscale Funnel या रिवर्स प्रॉक्सी के पीछे HTTPS पर रखें। अगर आपको फ़ाइलों के फ़ोल्डर की जगह ऐसा डेटाबेस चाहिए जिससे सवाल पूछे जा सकें, तो Marrow का सेल्फ़-होस्टेड मिरर वही रिसीवर है जो पहले से लिखा हुआ है, और AI एजेंट भी उससे पूछ सकते हैं।
ऐसे रिसीवर के तीन नियम जो डेटा कभी नहीं खोता
- आख़िरी वाला जीतता है। हर मान को मेट्रिक और दिन की कुंजी से रखें और दोबारा आने पर ऊपर से लिख दें। पिछली दौड़ के बाद से जान-बूझकर पिछले दो दिन फिर भेजता है, क्योंकि Apple Health किसी दिन के खत्म होने के बाद भी उसमें डेटा भरता रहता है।
- पहले रॉ बॉडी सहेजें, फिर उसे पार्स करें। पार्सिंग की किसी गड़बड़ी से आपका डेटा कभी नहीं जाना चाहिए।
- जल्दी जवाब दें। Marrow आपके तय किए टाइमआउट तक (डिफ़ॉल्ट रूप से 60 सेकंड) इंतज़ार करता है, और नाकाम रन को अपनी अगली बारी पर पिछली सफल विंडो से फिर कोशिश करता है।
यह कब चलता है?
जब भी iOS Marrow को चलने दे: Apple Health से सिंक के बाद, आपके खोलने पर, और बैकग्राउंड रिफ़्रेश के दौरान, जब आपका चुना हुआ अंतराल बीत चुका हो। बैकग्राउंड रिफ़्रेश कब होगा, यह iOS तय करता है, इसलिए दिन भर लॉक पड़ा फ़ोन अगली बार अनलॉक होने पर भेजता है, और पिछली दौड़ के बाद से बीच के अंतराल को भर देता है।
दूसरे तरीके
- Health Auto Export भी Apple Health डेटा को वेबहुक पर पोस्ट करता है, और उसके मेट्रिक्स JSON का ढाँचा Marrow जैसा ही है। उसके ऑटोमेशन के लिए Premium टियर चाहिए।
- Apple Shortcuts हेल्थ सैम्पल पढ़कर उन्हें Get Contents of URL से पोस्ट कर सकते हैं, तय समय पर चलने वाले पर्सनल ऑटोमेशन में। यह मुफ़्त है, यह Health डेटा तभी पढ़ सकता है जब फ़ोन अनलॉक हो, और हर मेट्रिक आपको खुद बनाना और सँभालना होता है।
- Apple की export.zip एक बार का पूरा बैकअप है, लगातार चलने वाली फ़ीड नहीं। उसे CSV में बदलने के लिए हमारा ब्राउज़र में चलने वाला कन्वर्टर इस्तेमाल करें.