Import Word Documents to Notion via Markdown (Step-by-Step)
Notion has a native Word importer. It mostly works on simple documents — and falls apart on anything with tables, nested lists, footnotes, or careful heading structure. The result: imported docs that look right in preview but turn into broken blocks the moment you try to edit them. There's a better path: Word → Markdown → Notion. Markdown is Notion's native lingua franca; every Markdown construct maps cleanly to a Notion block. Here's the workflow that actually preserves your formatting.
Why Markdown beats Notion's native Word import
Notion stores everything as block trees: paragraph blocks, heading blocks, list blocks, toggle blocks, table blocks, code blocks. Markdown maps to those blocks one-to-one — H1 becomes a Heading 1 block, - item becomes a Bulleted List Item block, a fenced code block becomes a Code block with the right language.
Word's internal format doesn't map cleanly. When Notion imports .docx directly, it has to interpret Word styles, paragraph spacing, list numbering, table cells, and embedded objects — and the heuristics frequently get it wrong. Common failures: H2-styled paragraphs become plain paragraphs, nested lists flatten, tables become plain text, code samples lose their monospace styling, footnotes vanish entirely.
Going through Markdown removes the ambiguity. The .md file is explicit: this line is a heading, this block is a table. Notion's Markdown import has nothing to guess at.
Step 1: Convert the Word document to Markdown
Use the MDisBetter Word to Markdown converter: drop the .docx, click Convert, download the .md. Takes about 30 seconds.
For multiple files, you can either run them through the web tool one at a time (still fast for under 20 docs) or install Pandoc locally for batch — see convert multiple Word documents for the bash one-liner.
Step 2: Open the .md and review
Before importing, open the .md in a text editor and skim. You're looking for:
- Heading levels (H1, H2, H3 — should match the original)
- Lists with proper indentation
- Tables in pipe syntax with correct column counts
- Code blocks with language hints (```python, ```bash)
- Image references like  — these need handling separately, see Step 4
If anything looks wrong, run the .docx through the web tool a second time, or use Pandoc as an alternative — sometimes one converter handles a quirky doc better than the other. See MDisBetter vs Pandoc.
Step 3: Import into Notion
In Notion:
- Open the page where you want the import to land (or create a new one)
- Click the three-dot menu in the top-right corner
- Select Import
- Choose Markdown & CSV
- Pick your .md file
- Notion creates a new sub-page with the imported content
The import takes 1-3 seconds. Open the resulting page and verify: headings should be Notion heading blocks (not plain text), lists should be proper bullet/numbered list blocks (try Tab/Shift-Tab to confirm nesting works), tables should be Notion table blocks (not text), code blocks should be code blocks (not paragraphs).
Step 4: Handle images
Markdown image references like  need the image file to actually exist for Notion to render it. Three options:
Option A: Inline upload after import
If your Word doc had only a few images, easiest is to import the .md without images, then drag-drop each image into the Notion page where it belongs. Slower but simplest.
Option B: Host images first, rewrite paths
Upload images to a host (Imgur, Cloudinary, your own S3 bucket, GitHub raw), then rewrite the .md to point at the public URLs:
sed -i '' 's|!\[\(.*\)\](\(.*\)\.png)||g' document.mdNotion fetches the images during import.
Option C: Use Pandoc with embedded images
Convert with Pandoc and let it base64-embed images directly into the Markdown:
pandoc -f docx -t gfm --embed-resources document.docx -o document.mdThe resulting .md is large (images are inlined as data URIs) but self-contained. Notion's Markdown import accepts data URIs.
Step 5: Polish
Even with clean Markdown, you'll want a few minutes of cleanup in Notion:
- Toggle headings: Convert long sections to toggle headings (Notion's collapsible block) for cleaner navigation
- Callouts: Convert important notes to callout blocks with an emoji icon
- Database conversion: If your Word doc had a table that's really structured data (a list of items with attributes), convert it to a Notion database for filtering and views
- Cover image and icon: Add a page cover and icon to make the imported page feel native
Common pitfalls
Lists with mixed numbered and bulleted items
Word allows lists where the same level mixes numbered and bulleted items, often inadvertently. Markdown forces consistency per level. The conversion picks one — usually whichever the first item used. Review nested lists carefully and adjust by hand if needed.
Multi-column layouts
Word's multi-column layouts don't have a Markdown equivalent. Pandoc and the MDisBetter web tool both flatten them to single-column reading order. If your Word doc relied on parallel columns for meaning, you'll need to restructure manually in Notion (using two side-by-side columns via the / menu).
Embedded Excel ranges
If your Word doc embedded a chunk of an Excel spreadsheet via OLE, the conversion will either skip it or convert it to a static image. To preserve the data, copy the Excel range separately to .csv and import as a Notion database.
Footnotes and endnotes
Pandoc preserves footnotes as GFM footnote syntax. Notion's Markdown import doesn't natively render this — footnotes appear as inline text in brackets. To make them work as Notion footnotes, manually convert each to a Notion comment or a synced block at the bottom of the page.
Comments and track changes
Word comments are dropped by both Pandoc (default settings) and the MDisBetter web tool. Track changes are accepted (final version is converted; revision history is dropped). If you need to preserve comments, run Pandoc with --track-changes=all and the comments appear inline as marked text — then convert each to a Notion comment manually.
Bulk import
For migrating a folder of Word docs into Notion:
- Use Pandoc to bulk-convert to .md (see convert multiple Word documents)
- Zip all the .md files together
- In Notion, Import → Markdown & CSV → select the zip — Notion creates one page per .md file
For a polished bulk import where each doc gets proper frontmatter (title, tags, dates), see the YAML frontmatter pattern in the Obsidian migration guide — Notion respects YAML frontmatter for the title field.
What this beats
The Markdown path beats Notion's native .docx import on every dimension:
| Feature | Native .docx import | Word → MD → Notion |
|---|---|---|
| Headings | Often demoted to plain text | Preserved correctly |
| Lists | Nesting often flattens | Nesting preserved |
| Tables | Often becomes plain text | Real Notion table block |
| Code blocks | Lost | Real Notion code block with language |
| Images | Inlined but sometimes broken | Cleanly placed |
| Editability | Often locked-feeling | Fully native blocks |
Other source formats into Notion
Notion's Markdown import accepts any well-formed .md, not just from Word. PDFs, web pages, audio transcripts — convert to Markdown first, import the same way:
- PDF to Markdown → Notion
- URL to Markdown → Notion (cleaner than Notion's native web clipper)
- Audio to Markdown → Notion (great for meeting notes)
Setting up a Notion database for converted docs
If you're importing many Word docs and want to track them as a database (for filtering, sorting, status tracking), set up the database first:
- In Notion, create a new database with properties: Title (default), Source (select: Word/PDF/URL), Imported (date), Status (select: New/Reviewed/Archived), Tags (multi-select)
- For each .md file, import as a sub-page of this database (not as standalone pages)
- Notion creates one row per imported doc with the title pre-filled
- Manually fill in Source, Status, Tags as you review
This turns a flat import into a queryable knowledge base. Combine with Notion's filters to surface unreviewed imports, recently-added docs, or specific tag combinations.
Embedding converted docs into existing pages
Sometimes you don't want a new page — you want the converted Word content as a section inside an existing Notion page. Two approaches:
Approach A: import then move blocks
Import the .md as a new page (creates a sub-page), then select all blocks in the sub-page, copy, paste into the destination page. Notion preserves the block structure on paste.
Approach B: paste Markdown directly
Open your destination Notion page, paste the .md content directly into the page editor. Notion auto-detects Markdown syntax and converts to native blocks on the fly. This works for shorter docs (under ~5,000 words). For larger docs, the page editor may be slow or truncate; use Approach A.
Round-tripping (Notion to Word)
If you ever need to send a Notion page back to a Word user: export the Notion page as Markdown (Settings → Export → Markdown), then convert to Word with Pandoc:
pandoc -f gfm -t docx page.md -o page.docxRound-tripping isn't lossless (Notion-specific blocks like databases, callouts, embeds don't map cleanly to Word), but it works for primarily text-based pages. Don't make it routine — pick one tool as the source of truth and stick with it.
Recommendation
Skip Notion's native Word import. Convert through Markdown — every time. The path is: web tool for one-offs, Pandoc for bulk, then Markdown import in Notion. The result is fully native Notion pages with intact structure, ready to edit. For a related workflow comparison, see Obsidian migration — same converters, different destination. Both Notion and Obsidian benefit equally from the Markdown intermediate; the structural cleanliness of GFM as the canonical exchange format is what makes the workflow durable.