Apple Health to Obsidian: Sync Your Health Data Into a Personal Knowledge Base, HealthSave
To get Apple Health data into your Obsidian vault, export it as JSON from HealthSave, move it into your vault, and convert it into Dataview-ready markdown tables with a ten-line script. Everything stays on your devices, your notes stay yours, and you get the same charts and queries you would in a dedicated health app, but inside the knowledge base you already use.
Why people want this
If you keep a daily note in Obsidian, you have probably wanted a date-stamped entry for last night's HRV, your resting heart rate this morning, how your sleep stages compared to last week, or whether that workout actually moved your weekly distance. Apple Health has the numbers; Obsidian has the notes; the gap is moving the data from one to the other without breaking your flow.
The good news is that the gap is small. HealthSave exports the same JSON Apple Health already aggregates, and Obsidian reads plain markdown. A short script between them is the entire pipeline.
Pick a path: iCloud, Shortcuts, or a Mac script
| Path | Best for | Effort | Frequency |
|---|---|---|---|
| iCloud Drive drop | Anyone with a vault on iCloud | Lowest | Manual or on a Shortcut schedule |
| iOS Shortcut | iPhone-only users who want it automatic | Low | Daily, weekly, on-demand |
| Mac script over a shared folder | People who already script on their Mac | Medium | Whatever cron / launchd says |
All three use the same HealthSave export. The difference is who runs the conversion step and how often.
Step 1, Export from HealthSave
- Install HealthSave free and grant read-only Health access.
- Open the Export tab. Pick the metrics you want (heart rate, HRV, sleep, steps, weight, workouts) and the date range. Free covers the last 7 days; Pro ($24.99 one-time, Family Sharing) unlocks your full multi-year history — and that is the real reason to import into Obsidian.
- Choose JSON. It is the cleanest format to parse, and every metric arrives as its own row, so sleep stages, workout numbers, and blood pressure components are all in there (the JSON guide has the exact schema).
- Tap Export. The file lands in a temp file; the iOS share sheet hands it off wherever you decide.
Step 2, Get it into your vault
The two practical iOS-to-vault handoffs:
- Save to iCloud Drive from the share sheet. If your vault is in iCloud, point HealthSave at a folder like
iCloud Drive/Obsidian/Vault/Health/inbox/. The JSON shows up on every device that has the vault within a minute or two. - Run an iOS Shortcut on a daily or weekly schedule. The Shortcut receives the JSON from HealthSave via the share sheet (or pulls it from iCloud), runs a small JavaScript step to convert it to markdown, and writes the file into your vault at the right path.
On a Mac, you can skip iCloud entirely: have HealthSave AirDrop the JSON to your Mac, or point iCloud Drive at a folder the Mac script also watches.
Step 3, Convert JSON to Dataview-ready markdown
This is the smallest script that is genuinely useful. One file per metric per year, with a YAML frontmatter so Dataview can index it, and a Markdown table so it renders without any plugin.
// convert.js, drop into your vault root, run after each export.
// usage: node convert.js /path/to/healthsave_export.json
const fs = require('fs');
const path = require('path');
const VAULT = process.env.HOME + '/Documents/Obsidian/Vault';
const METRICS = ['heart_rate', 'step_count', 'heart_rate_variability', 'sleep_total'];
const data = JSON.parse(fs.readFileSync(process.argv[2], 'utf8'));
const grouped = {};
for (const row of data) {
if (!METRICS.includes(row.metric)) continue;
const year = row.date.slice(0, 4);
grouped[year] ??= {};
grouped[year][row.metric] ??= [];
grouped[year][row.metric].push(row);
}
for (const [year, byMetric] of Object.entries(grouped)) {
const out = path.join(VAULT, 'Health', year);
fs.mkdirSync(out, { recursive: true });
for (const [metric, rows] of Object.entries(byMetric)) {
const lines = [
'---',
`metric: ${metric}`,
`year: ${year}`,
`samples: ${rows.length}`,
'tags: [health, dataview]',
'---',
'',
`# ${metric.replaceAll('_', ' ')} — ${year}`,
'',
'| Date | Value | Unit | Source |',
'| --- | --- | --- | --- |',
];
for (const r of rows) {
lines.push(`| ${r.date} | ${r.value} | ${r.unit} | ${r.source} |`);
}
fs.writeFileSync(path.join(out, `${metric}.md`), lines.join('\n'));
}
}
console.log('wrote', Object.keys(grouped).length, 'year files');
Re-run it whenever you want fresh numbers. It is idempotent: it overwrites the same files, so nothing duplicates.
Step 4, A dashboard note you can open every morning
Drop this into Health/Dashboard.md in your vault. With the Dataview plugin, the tables populate from the year files the script wrote.
---
title: Health dashboard
tags: [health, dashboard, dataview]
---
# Today
\`\`\`dataview
TABLE rows[0].sleep, rows[0].hrv, rows[0].steps, rows[0].rhr
FROM #dataview AND "Health"
WHERE year = date(today).year
SORT metric ASC
\`\`\`
# Last 30 days, resting heart rate
\`\`\`dataview
TABLE date, value
FROM "Health/2026"
WHERE metric = "heart_rate" AND date >= date(today) - dur(30 days)
SORT date ASC
\`\`\`
Charts inside Obsidian
Three honest ways to render charts from the same data, in increasing complexity:
- Obsidian Bases (built-in, 2026+): a spreadsheet-like view of any folder. Filter by metric and date range; no extra plugin. Best first stop.
- Charts plugin: render the Dataview query as a line or bar chart. Works on the table output, so you do not need to maintain a separate data file.
- Excalidraw: hand-draw the trends you actually care about. Slow, but useful for the few metrics that matter.
None of them require leaving your vault or giving a third party access to your data.
Honest limits
- Pro is required for full history. Free exports the last 7 days; Pro ($24.99 one-time, Family Sharing, no subscription) unlocks your full Apple Health history, which is the point of importing into Obsidian.
- iOS Shortcuts and iCloud sync are not instant. An automation that runs daily at 7 AM will land your numbers in the vault by 7:10 AM, not 7:00:00.001. Build your morning routine around that.
- HealthSave is iOS only. If your data lives in Android Health Connect, this is the wrong guide.
- Obsidian Bases and Dataview are optional. The plain Markdown tables in the year files already render in Obsidian's default preview; the plugins just make queries nicer.
- Your vault is your vault. Whether it lives on iCloud, Dropbox, Git, or a Synology, HealthSave hands the JSON to the share sheet and the rest is your decision.
Alternatives, briefly
If Obsidian is overkill and you only want a glance, two shorter paths exist:
- Push to Home Assistant instead and surface metrics as entities on a dashboard tile. See the Apple Health to Home Assistant guide.
- Push to a CSV in iCloud Drive and forget about it. Open in Numbers once a week. The simplest possible answer; not Obsidian, but no script either.
FAQ
Can I get Apple Health into Obsidian automatically?
Yes. The cleanest path on iOS is HealthSave exports JSON to iCloud Drive via the share sheet, then an iOS Shortcut picks it up and converts it to markdown tables in your vault. On a Mac, a small Python script that runs on a schedule does the same thing over any shared folder.
What format is easiest to import into Obsidian, JSON or CSV?
JSON. HealthSave's JSON export is a clean array of sample objects with predictable fields; one short script turns it into year-file tables that Obsidian, Dataview, and Bases all index without complaints. CSV works if you'd rather eyeball the raw data first.
Do I need HealthSave Pro?
For the last 7 days, no, JSON export is free. For your full multi-year history (the real reason to import into Obsidian), you need Pro: a one-time $24.99 with Family Sharing, no subscription.
Does the data leave my iPhone or Mac?
No. Everything stays on your devices: HealthSave reads Apple Health on-device, writes JSON to your Files app, iCloud, or a local folder; a Shortcut or a local script moves it into your vault. No cloud service in the middle.
Is there an Obsidian plugin that reads Apple Health directly?
There are community plugins in that direction, but they require giving the plugin HealthKit access, which is fragile because iOS controls HealthKit authorization at the app level, not the plugin level. The export-and-import path through HealthSave is reliable because HealthSave is a real HealthKit-aware app.
What does the resulting markdown look like?
Either a year file per metric (e.g. Heart Rate 2026.md) with a Markdown table and YAML frontmatter for Dataview, or a daily note with metrics appended as frontmatter. The first is better for trend queries; the second is better for journaling alongside the data.
Can I chart inside Obsidian?
Yes. Dataview produces live tables; the Charts plugin renders them as line/bar/area; Obsidian Bases (built-in, 2026+) gives you a spreadsheet-like view with filters and formulas. All read directly off the markdown tables your script writes.
HealthSave is not a medical device. It is for informational purposes only and does not diagnose, treat, cure, or prevent any disease or condition. The accuracy of any health data depends on your wearable device and its sensors.
Related guides
- Apple Health export to JSON — the JSON schema reference for the script above.
- Analyze Apple Health data with AI — the other JSON consumer (ChatGPT, Claude, local LLM).
- Build a personal Apple Health dashboard without a subscription — the broader decision tree.
- Push live Apple Health metrics into Home Assistant — the home-automation sibling of this guide.
- Build a custom REST API over your Apple Health data — query the data over HTTP if a file drop is not enough.
- Apple Health data for self-hosters — the homelab pipeline end to end.
- Apple Health for the quantified self — the meta-intent page that puts Obsidian, AI, dashboards, and self-hosted destinations side by side.
- Export HRV and sleep data from Apple Health — the two metrics most people care about in a daily note.
- Apple Health for runners — the workouts, VO2 max, HRV, and running-dynamics hub; useful if your daily note is a training log.
- Apple Health for cyclists — the rides, FTP, cycling power, and cadence hub; useful if your daily note is a training log.
Get HealthSave
Free to download, no account. Export to JSON in a couple of taps, run the script, open your vault.
Download HealthSave on the App Store