Export your entire OneNote library to Obsidian-compatible Markdown. Images, attachments, checkboxes, structure — everything comes with you.
pip install onenote-to-obsidian
No Azure AD app registration. No client secrets. No admin consent. Just install and run.
Images, PDFs, file attachments, checkboxes, tables, embedded content. Nothing left behind.
Re-run anytime — only new or changed pages get exported. Crash mid-way? Pick up where you left off.
Notebooks, sections, section groups — your hierarchy becomes clean folders in Obsidian.
YAML frontmatter with created/modified dates, source tags, and OneNote IDs on every page.
Talks only to Microsoft Graph API and your local disk. Tokens cached with owner-only permissions.
pip install onenote-to-obsidian
Open a link, enter a code.
No app registration needed.
onenote-to-obsidian
| OneNote | Markdown |
|---|---|
| Images |  |
| File attachments | [file.pdf](attachments/file.pdf) |
| Checkboxes | - [ ] todo / - [x] done |
| Embedded content | [Embedded](url) |
| Headers, bold, italic, tables, links | Standard Markdown |
| Absolute positioning CSS | Removed (clean output) |
| onenote-to-obsidian | Manual copy-paste | OneNote OOXML export | |
|---|---|---|---|
| No registration needed | ✅ | N/A | N/A |
| Images & attachments | ✅ | Manual | Partial |
| Resume / incremental | ✅ | ❌ | ❌ |
| Checkboxes | ✅ | ❌ | ❌ |
| Section groups | ✅ | N/A | ✅ |
| YAML frontmatter | ✅ | ❌ | ❌ |
| Automation-friendly | ✅ | ❌ | Partial |
Personal accounts work out of the box. Work/school accounts may need a custom client ID — just run --setup and follow the prompts.
Progress is saved automatically. Re-running picks up exactly where it stopped. File deduplication survives crashes too.
No. The tool talks only to Microsoft Graph API and writes to your local filesystem. Tokens are cached with owner-only file permissions.
Yes. Only new or modified pages are exported. Use --reset-state to force a full re-export.
Python 3.10 or newer. Works on macOS, Windows, and Linux.