Export your Apple Notes to HTML, Markdown, or PDF — preserving folder hierarchy, formatting, and structure.
- macOS (required — Apple Notes is only available on macOS)
- Node.js v18 or later
- npm v9 or later
- Apple Notes with at least one account configured
- Automation permissions: macOS will prompt you to grant the app permission to control Apple Notes on first run. You must allow this for the export to work.
brew install nodegit clone https://github.com/routineco/apple-notes-exporter.git
cd apple-notes-exporter
npm install
npm startThis launches the Electron app, which will guide you through the export process.
You can also run the core AppleScript independently:
osascript scripts/list.applescriptThe application follows a two-phase approach to work around AppleScript's slow performance (listing 10,000 notes can take ~20 hours):
- Scan & export — Browse the full note hierarchy and export all notes as HTML to the app data directory in a single pass.
- Select & convert — Pick the notes you want, choose an output format (HTML, Markdown, or PDF), and export them to a directory of your choice.
| Format | Description |
|---|---|
| HTML | Original note content as-is |
| Markdown | Converted from HTML via node-html-markdown |
Converted from HTML via jspdf |
Apple Notes content is not directly accessible in a structured form. While the Notes app offers a body() method through scripting interfaces, it only exposes simplified HTML. Many important semantics — such as hyperlinks and checklists — are not included in the HTML or RTF generated by standard means.
We explored multiple approaches to extract note content with full semantic fidelity:
Direct extraction from Apple Notes' SQLite database. Unreliable after Apple transitioned to iCloud, as data is scattered across multiple databases.
Accessing notes via note.body() returns simplified HTML, but <li> tags provide no distinction between bullet, numbered, and checklist items. Hyperlinks and checkbox state are omitted.
Converting HTML to RTF via textutil retrieves slightly richer content from macOS internals, but hyperlinks are still flattened and checklists become generic glyphs.
A native Swift app using ScriptingBridge to extract NSAttributedString representations. Even at this level, Apple Notes does not expose .link attributes or .presentationIntents for checklists.
AppleScript provides the most reliable and automatable method for exporting. It accesses all visible notes, folders, and accounts, producing consistent HTML output — though it still cannot detect hyperlinks or checklist state.
