From apple-notes-pack
Exports Apple Notes to Markdown, JSON, HTML files, and SQLite databases using macOS osascript and bash. Converts internal HTML to Markdown for backups, app exports, or searchable archives.
How this skill is triggered — by the user, by Claude, or both
Slash command
/apple-notes-pack:apple-notes-core-workflow-bThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Export Apple Notes to portable formats: Markdown, JSON, HTML files, and SQLite databases. Apple Notes stores content as HTML internally — these workflows convert it to developer-friendly formats.
Export Apple Notes to portable formats: Markdown, JSON, HTML files, and SQLite databases. Apple Notes stores content as HTML internally — these workflows convert it to developer-friendly formats.
osascript -l JavaScript -e '
const Notes = Application("Notes");
const allNotes = Notes.defaultAccount.notes();
const exported = allNotes.map(n => ({
id: n.id(),
title: n.name(),
body: n.body(),
folder: n.container().name(),
created: n.creationDate().toISOString(),
modified: n.modificationDate().toISOString(),
}));
JSON.stringify(exported, null, 2);
' > apple-notes-export.json
echo "Exported $(jq length apple-notes-export.json) notes to apple-notes-export.json"
#!/bin/bash
# scripts/notes-to-markdown.sh
OUTPUT_DIR="${1:-./notes-export}"
mkdir -p "$OUTPUT_DIR"
osascript -l JavaScript -e '
const Notes = Application("Notes");
const notes = Notes.defaultAccount.notes();
notes.map(n => JSON.stringify({
title: n.name(),
body: n.body(),
folder: n.container().name(),
})).join("\n---SEPARATOR---\n");
' | while IFS= read -r line; do
if [ "$line" = "---SEPARATOR---" ]; then continue; fi
title=$(echo "$line" | jq -r '.title' 2>/dev/null)
body=$(echo "$line" | jq -r '.body' 2>/dev/null)
folder=$(echo "$line" | jq -r '.folder' 2>/dev/null)
# Convert HTML to basic Markdown
md_body=$(echo "$body" | sed 's/<h1>/# /g; s/<\/h1>//g; s/<h2>/## /g; s/<\/h2>//g; s/<p>//g; s/<\/p>/\n/g; s/<br>/\n/g; s/<li>/- /g; s/<\/li>//g; s/<[^>]*>//g')
safe_title=$(echo "$title" | tr '/:' '-' | head -c 100)
mkdir -p "$OUTPUT_DIR/$folder"
echo -e "# $title\n\n$md_body" > "$OUTPUT_DIR/$folder/$safe_title.md"
done
echo "Export complete: $OUTPUT_DIR"
# Using apple-notes-to-sqlite (pip install apple-notes-to-sqlite)
pip install apple-notes-to-sqlite
apple-notes-to-sqlite export notes.db
# Or build your own with JXA + sqlite3
osascript -l JavaScript -e '
const Notes = Application("Notes");
const notes = Notes.defaultAccount.notes();
const rows = notes.map(n =>
`INSERT INTO notes (title, body, folder, created) VALUES (${JSON.stringify(n.name())}, ${JSON.stringify(n.body())}, ${JSON.stringify(n.container().name())}, ${JSON.stringify(n.creationDate().toISOString())});`
).join("\n");
rows;
' > /tmp/notes-inserts.sql
sqlite3 notes.db << 'SQL'
CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, title TEXT, body TEXT, folder TEXT, created TEXT);
.read /tmp/notes-inserts.sql
SELECT COUNT(*) || ' notes imported' FROM notes;
SQL
# Search across all exported notes
osascript -l JavaScript -e '
const Notes = Application("Notes");
const query = "project plan";
const results = Notes.defaultAccount.notes().filter(n => {
const body = n.body().toLowerCase();
const name = n.name().toLowerCase();
return body.includes(query) || name.includes(query);
});
results.map(n => `${n.name()} (${n.container().name()})`).join("\n");
'
| Error | Cause | Solution |
|---|---|---|
| Slow export | Thousands of notes | Export in batches by folder |
| HTML artifacts in Markdown | Complex formatting | Use a proper HTML-to-MD library (turndown) |
| Missing attachments | Images not exported | Attachments need separate export path |
| Encoding issues | Unicode in note titles | Use safe filename sanitization |
For common errors, see apple-notes-common-errors.
npx claudepluginhub fleet-to-force/claude-code-plugins-plus --plugin apple-notes-pack7plugins reuse this skill
First indexed Jul 10, 2026
Showing the 6 earliest of 7 plugins
Exports Apple Notes to Markdown, JSON, HTML files, and SQLite databases using macOS osascript and bash. Converts internal HTML to Markdown for backups, app exports, or searchable archives.
Manages Apple Notes on macOS — list, search, read, create, append, move, delete, and export notes locally via AppleScript. Runs against Notes.app with no cloud API.
Manages Apple Notes on macOS: create, search, read, update, delete, organize notes and folders. Uses MCP tools for safe formatting.