Notion → Obsidian
Move a Notion workspace into a local Obsidian vault while preserving page content, attachments, links, database meaning, ownership decisions, and a testable archive of what cannot become plain files.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Notion
- Polished pages and databases let teams build flexible workspaces without code
- Flexible documents make it easy to capture and organize team knowledge
- Offline use, export fidelity, and large-workspace governance remain weak points
- Structure, links, permissions, and rich blocks often degrade during export
Obsidian
- Local Markdown files, backlinks, and plugins provide durable personal knowledge ownership
- Flexible documents make it easy to capture and organize team knowledge
- Real-time collaboration, permissions, and managed team administration are limited
- Structure, links, permissions, and rich blocks often degrade during export
Obsidian: Local Markdown files, backlinks, and plugins provide durable personal knowledge ownership. This removes a major source-side concern: Offline use, export fidelity, and large-workspace governance remain weak points.
What you lose: Polished pages and databases let teams build flexible workspaces without code. What you inherit: Real-time collaboration, permissions, and managed team administration are limited.
Know the shape of the move.
This timeline assumes
- Profile: one workspace with at most 10,000 pages, 20 GB of attachments, 100 databases, and no requirement to reproduce Notion as a multi-user application.
- You can export every in-scope teamspace and private page, including pages owned by people who may leave.
- Obsidian will store ordinary files locally; sync, backup, publication, and collaboration are separate choices.
- The entire workspace is imported together so Obsidian can reconcile internal links.
- The source remains read-only during verification rather than being deleted immediately.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Page text and basic formatting | clean | high | Headings, paragraphs, lists, links, and common blocks convert well through the official importer. | Test complex pages and retain the original export beside the vault snapshot. |
| Internal page links | partial | critical | Links can be reconciled when all content is imported together; excluded pages and duplicate names can leave broken or ambiguous links. | Import the full scope in one run and scan every unresolved link. |
| Attachments and images | partial | critical | Files can import, but expired URLs, nested export archives, duplicate names, and oversized assets can cause gaps. | Use the complete export, expand nested zips, compare file manifests, and open a stratified sample. |
| Databases | partial | critical | API import can create a folder and Obsidian Base, but only the primary view is supported and not every property or relation behaves identically. | Inventory every view, property, filter, sort, relation, and rollup; preserve CSV snapshots and rebuild critical views. |
| Database views | lost | high | Notion exports only the current or default view, not every saved view; form views are not exported. | Document each view with screenshots and filters, export alternate views deliberately, then recreate required views as Bases or queries. |
| Relations, rollups, and formulas | partial | critical | Linked data sources are not imported and some formula functions are unsupported; file export preserves less database semantics than API import. | Prefer API import for databases, create test cases for computed values, and redesign unsupported relationships explicitly. |
| Comments, discussions, and mentions | lost | high | Collaborative discussion context does not become ordinary Markdown notes. | Resolve open decisions, copy critical discussion into the page body, and export an audit archive if required. |
| Permissions, guests, and private sharing | lost | critical | Filesystem access and Obsidian Sync sharing do not inherit Notion page permissions. | Classify sensitive content before import, split vaults where needed, and define destination access independently. |
| Page history and restore points | lost | high | Notion version history does not become Git or Obsidian history. | Keep a dated raw export and establish versioned vault backups before editing. |
| Callouts and unsupported blocks | partial | medium | Notion Markdown export can represent callouts as HTML and complex embeds or widgets may degrade. | Use the Obsidian-recommended HTML export for file import, then search for raw HTML, embeds, and unsupported markers. |
| Templates, buttons, forms, and automations | lost | high | Notion application behavior does not transfer as files. | Replace only approved workflows with Obsidian templates, plugins, scripts, or an external system. |
| Notion AI and live integrations | lost | medium | AI history, synced databases, live embeds, webhooks, and third-party integrations are not portable workspace content. | Inventory integrations, preserve required outputs, and choose explicit replacements. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Page title | Markdown filename and heading | transform | Resolve filesystem-invalid characters, duplicate titles, and path length before import. |
| Page body | Markdown note body | automatic | Inspect unsupported blocks and embedded HTML. |
| Page URL or ID | source_id frontmatter | transform | Keep a stable source identifier for reconciliation. |
| Parent page | folder path or parent link | transform | Choose whether hierarchy is physical folders, links, or both. |
| Internal mention | Obsidian wikilink | automatic | Works best when all referenced pages are imported together. |
| Database row | Markdown file in database folder | automatic | API import can also create a corresponding .base file. |
| Database property | frontmatter property | transform | Validate dates, people, multi-select values, relations, and nulls. |
| Database view | Obsidian Base view | manual | Only the primary Notion view is imported; recreate other views. |
| Attachment | Vault attachment file and relative link | automatic | Verify binary count, size, hash, and link target. |
| Comments and permissions | No destination | unsupported | Archive or replace them outside the note conversion. |
Make the move recoverable.
Create the source-of-truth backup
Capture every in-scope page, database, file, relationship reference, and access decision before the workspace freezes.
- Inventory teamspaces, private pages, guests, databases, views, integrations, public pages, and content owners.
- Export the full workspace and each critical alternate database view; use HTML for the Obsidian file-import route and retain CSV/database evidence.
- Wait for the workspace export, which Notion says can take up to 30 hours, then download before its seven-day link expires.
- Expand and inventory nested archives without modifying the raw download.
- Capture permissions, comments that contain decisions, formulas, relation diagrams, and screenshots of critical views.
Proof to capture: A manifest reconciles workspace page and attachment totals, critical databases and views, owners, raw archive hashes, and every excluded item.
Path normalization
Create portable filenames without collisions or path-length failures.
- Define invalid-character and duplicate-title rules.
- Preserve each Notion page ID in frontmatter or a manifest.
- Fail on silent overwrites.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Database semantics ledger
Separate portable data from Notion-only behavior.
- List every property, type, view, relation, rollup, and formula.
- Map it to frontmatter, Base configuration, manual workflow, or archive.
- Test computed values on representative rows.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Link and asset audit
Find unresolved pages, files, embeds, and external dependencies.
- Scan Markdown links, wikilinks, HTML, and asset paths.
- Compare attachment hashes and sizes.
- Classify every unresolved target.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
The export omits inaccessible pages
Known pages or teamspaces are absent from the manifest.
- Consequence
- The missing knowledge may be unrecoverable after account closure.
- Mitigation
- Have owners share or export their private content before the freeze.
Stop if: Any in-scope owner or teamspace is not represented.
Database meaning is flattened
Rows exist but filters, relations, rollups, or formulas no longer answer the operational question.
- Consequence
- A visually complete vault produces wrong decisions.
- Mitigation
- Verify behavior, not only row counts.
Stop if: Any critical database calculation or workflow lacks an approved replacement.
Sensitive pages inherit broad filesystem access
Private and shared Notion pages land in the same synced vault.
- Consequence
- Confidential information is exposed.
- Mitigation
- Classify and split vaults before importing.
Stop if: Destination access cannot reproduce the approved audience.
Path limits or duplicate names overwrite files
Importer logs collisions, missing targets, or truncated paths.
- Consequence
- Pages or attachments disappear silently.
- Mitigation
- Use stable IDs and a collision report.
Stop if: Any output file lacks a one-to-one source mapping.
The local vault has no durable backup
The only copy is one laptop or one sync provider.
- Consequence
- A local failure destroys the migrated knowledge base.
- Mitigation
- Establish versioned, tested backups before editing.
Stop if: A restore drill cannot rebuild the vault on another machine.
Do the work in this order.
- Days 1–2 · scope
Scope and classify
6–10 hours active2 days elapsedOwner responses waiting- Inventory content, owners, permissions, databases, views, integrations, and public links.
- Choose API import or HTML-file import per content class.
Depends on: Workspace owner and content-owner access
Stop / go checkpointFreeze the scope?
Go when: Every in-scope and excluded area has an owner and reason.
Stop when: Private or regulated content has no destination access design.
- Days 3–4 · export
Export and manifest
4–7 hours active1–2 days elapsedWorkspace export can take up to 30 hours waiting- Create workspace and critical-view exports.
- Download, hash, expand nested zips, and build page and asset manifests.
Depends on: Approved scope
Stop / go checkpointIs the archive complete?
Go when: Counts and named critical items reconcile.
Stop when: The export link expires, a teamspace is missing, or an archive is corrupt.
- Days 5–6 · pilot
Representative pilot
6–9 hours active2 days elapsedAPI rate limiting when used waiting- Import a copy containing simple, nested, database-heavy, attachment-heavy, and restricted examples.
- Approve naming, hierarchy, property, and attachment rules.
Depends on: Complete raw export, Empty test vault
Stop / go checkpointApprove conversion rules?
Go when: Representative content and behavior pass with documented exceptions.
Stop when: Critical relations, formulas, permissions, or assets have no safe disposition.
- Days 7–9 · full-import
Full import
6–10 hours active1–3 days elapsedImporter and API processing waiting- Freeze Notion editing.
- Import all in-scope content into a new vault in one run.
- Save logs and reconcile page, database-row, and asset counts.
Depends on: Approved pilot, Source freeze
Stop / go checkpointStart repair?
Go when: Every source item maps to an output, archive, or approved exclusion.
Stop when: Silent overwrites, missing archives, or unexplained count gaps appear.
- Days 10–12 · repair
Repair and rebuild
5–9 hours active2–3 days elapsedOwner review waiting- Repair links, paths, HTML, embeds, and attachments.
- Rebuild critical database views, formulas, templates, and replacement workflows.
- Apply vault access boundaries.
Depends on: Reconciled import
Stop / go checkpointCut over daily use?
Go when: Blocking knowledge paths and operational databases work for their owners.
Stop when: A critical workflow still depends on editable Notion data.
- Days 13–14 · cutover
Read-only cutover and restore drill
3–5 hours active2 days elapsedBackup replication waiting- Make Notion read-only and point users to Obsidian.
- Restore the vault on a clean machine.
- Complete the verification report and archive the source export.
Depends on: Passed repair gate, Destination backup
Stop / go checkpointClose migration?
Go when: Restore, access, links, assets, databases, and owner sign-off pass.
Stop when: The vault cannot be restored or sensitive access is broader than approved.
Cut over with a way back.
Cutover
Make the verified Obsidian vault the editable source of truth while retaining Notion as a read-only reference.
- Announce the exact Notion edit-freeze timestamp.
- Take a final export or API delta and rerun the controlled import into the release vault.
- Reconcile and sign the manifest before allowing edits.
- Enable the approved sync, backup, and access configuration.
- Replace workspace links and operating instructions with vault paths.
- Set Notion content read-only and preserve redirects or notices on public pages.
Proof to capture: The release vault restores on a clean machine, approved users reach the correct content, and all blocking verification evidence is attached.
Rollback
Resume controlled editing in Notion without losing changes made after the Obsidian cutover.
- Freeze Obsidian edits and snapshot the vault.
- List files changed since cutover and assign each to a content owner.
- Reopen Notion editing only for approved owners.
- Apply reviewed destination changes back to Notion manually.
- Restore old links and announce the rollback boundary.
Proof to capture: Notion contains all approved post-cutover changes and is again the only editable source while the vault is preserved read-only.
- Critical pages or assets are missing
- Sensitive access is broader than approved
- A critical database produces incorrect results
- The vault cannot be restored
- Broken-link rate exceeds the agreed threshold
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | Page reconciliation | Match the source manifest to vault files by stable page ID or mapping record. | Every in-scope page is imported, archived, or explicitly excluded. | Page reconciliation CSV. | |
V-02Blocking | Binary integrity | Compare attachment count, size, and hashes; open a stratified sample. | All critical files match and no unexplained binary is missing. | Asset manifest and sample log. | |
V-03Blocking | Internal link resolution | Scan all Markdown, wikilinks, HTML references, and embeds. | No unresolved critical link; all others classified. | Link-check report. | |
V-04Blocking | Row and property fidelity | Compare counts and representative values for every critical database. | Rows and mapped properties reconcile exactly. | Database comparison workbook. | |
V-05Blocking | Views, formulas, and relations | Run owner-approved scenarios against rebuilt Bases and workflows. | Each critical operational question returns the approved result. | Scenario results and owner sign-off. | |
V-06Blocking | Access boundaries | Test accounts from each role against sensitive vaults and sync shares. | No user can access content outside the approved classification. | Access test matrix. | |
V-07 | Representative rendering | Review simple, nested, callout-heavy, table-heavy, and embed-heavy notes. | Meaning is preserved; known visual changes are accepted. | Before-and-after review sheet. | |
V-08Blocking | Clean-machine restore | Restore the vault and required configuration from backup on another machine. | Notes, assets, links, plugins, and access configuration work without the source machine. | Restore log and vault hash. |
Remove the scaffolding safely.
Safe after: All owners sign off, the clean-machine restore passes, and the vault has been the source of truth for at least 30 days.
- Preserve the raw Notion archive and final reconciliation under the retention policy.
- Revoke temporary Notion integrations and API tokens.
- Remove duplicate plaintext exports from Downloads and shared drives.
- Keep Notion read-only through the agreed retention period before cancelling paid seats.
- Document vault backup, sync, plugin, ownership, and recovery responsibilities.
- Schedule quarterly broken-link, backup-restore, and access reviews.
When the plan met reality.
First-hand accounts are preferred. Vendor case studies are labeled, and every note below is an editorial paraphrase—follow the link for the full context.
Azan exported a Notion knowledge base as HTML and converted it with Obsidian Importer. The Markdown output needed cleanup, particularly for larger databases. Attempts to reproduce Notion database structure with Dataview felt cumbersome, so the author eventually simplified the workflow around Obsidian Tasks rather than rebuilding the source system feature for feature.
- Budget manual cleanup for large databases even when the official importer completes without a hard failure.
- Decide which database behaviors are truly essential before recreating Notion structures with Obsidian plugins.
- The content moved, but the database experience did not transfer as a native equivalent.
- Adopting a simpler destination-native task workflow proved more sustainable than imitating Notion with queries.
Built to be reviewed.
Tested 2026-07-19. Next scheduled review: 2026-10-19.
- Notion: export your contentAccessed 2026-07-19
- Obsidian: import from NotionAccessed 2026-07-19
- Obsidian Importer pluginAccessed 2026-07-19