Website review
This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.
What is Notion To MD?
Notion To MD is a free, open-source Node.js library that fetches Notion pages and converts them into Markdown, HTML, plain text, or custom formats. It is built for developers rather than end users: instead of a point-and-click export button, you write code that pulls content from Notion and transforms it through a configurable plugin system.
Its practical value shows up in publishing workflows. A typical use: a team drafts documentation or blog posts in Notion, then a build script converts those pages to Markdown and feeds them into a static site generator such as Next.js, Hugo or Eleventy. The page evidence also names CMS and backend integration (WordPress, Webflow) and automated multi-destination publishing as intended uses.
What it covers, per the site:
- Block conversion for text, lists, images, code blocks, callouts and databases.
- Media handling strategies — download, upload or buffer Notion images and files, with links updated and cleanup managed.
- Extensibility through renderer, exporter, block, annotation, database-property and frontmatter transformers, plus context variables and templates.
- Guides and a plugin catalogue for common tasks such as turning Notion properties into frontmatter or comments into Markdown footnotes.
The trade-off is control versus convenience. If you need a one-off export of a few pages, a simpler exporter will be faster. If you need repeatable, customized output inside a build pipeline, this library's plugin depth is the reason to choose it — at the cost of writing and maintaining Node.js code.
A useful next step: open the Getting Started guide and run a single test page through the default renderer, then check whether its Markdown output matches what your target site expects before investing in custom plugins.
Can I use Notion To MD to publish Notion pages to a static site generator like Next.js or Hugo?
Yes. Notion To MD is a Node.js library that fetches Notion pages and converts them to Markdown or HTML, which fits naturally into a static site build step for Next.js, Hugo, Eleventy or similar generators. The page explicitly names Next.js, Hugo and Eleventy as integration targets.
How it fits a static site workflow
The usual pattern is to run the converter during your build (or a scheduled pre-build job), write the resulting Markdown or HTML files into your content directory, then let the generator build the site as normal. Media handling matters here: the library documents download, upload and buffer strategies for Notion images and files, and can rewrite links and clean up after itself, so you don't ship broken image URLs.
| Need | What the library offers |
|---|---|
| Plain Markdown content | Core conversion of blocks: text, lists, images, code, callouts, databases |
| HTML output | Supported as an output format |
| Custom output | Plugin system for renderers, exporters and block transformers |
| Frontmatter for Hugo/Next.js | Dedicated frontmatter transformers, including converting Notion properties |
| Media in the repo or CDN | Download/upload/buffer strategies with link rewriting |
Practical considerations
- Frontmatter is the main integration point. Hugo and Next.js both need titles, dates, slugs and tags in a specific shape. The documented frontmatter transformers and database property transformers are where you map Notion properties to your generator's expectations.
- Build-time vs. runtime. For Hugo, conversion almost always happens before
hugoruns. For Next.js, you can either pre-generate Markdown or call the library in a data-fetching layer; pre-generating is simpler to debug. - Media strategy is the biggest trade-off. Downloading assets into your repo keeps builds self-contained but grows the repo; uploading to your own storage keeps the repo small but adds a dependency and cleanup work.
A concrete next step
Take one representative Notion page with an image, a code block and a database, run it through the converter with a frontmatter transformer, and inspect the output against your generator's content requirements. If the Markdown and frontmatter look right, script the full export and wire it into your build command. For comparison, Notion itself exports Markdown but without the programmatic pipeline control described here.
How does Notion To MD handle images and other media when converting pages to Markdown?
Notion To MD handles media through configurable "media strategies" rather than a single fixed behavior. When the converter encounters an image or file block, the chosen strategy decides whether the asset is downloaded locally, uploaded elsewhere, kept as a direct link, or buffered in memory, and the Markdown output is rewritten to point at the resulting location. The library also manages cleanup of temporary or downloaded files as part of that process. Because the strategy is a plugin-level setting, you can match it to where the Markdown will live: local files for a Git-based docs repo, uploaded URLs for a CMS, or direct links for quick previews.
Practical implications
- Self-contained repos: Downloading media keeps images versioned alongside your Markdown, but grows repository size and requires handling binary files in your build.
- CMS or hosted docs: Uploading media to your own storage or a CDN keeps the Markdown lightweight and avoids broken relative paths, at the cost of extra credentials and upload steps.
- Fast previews or drafts: Direct links are the simplest option, but they depend on Notion's URLs staying valid, which is fragile for long-term publishing.
Choosing a strategy
| Destination | Sensible default | Trade-off |
|---|---|---|
| Static site / Git repo | Download locally | Repo bloat, but portable and offline-friendly |
| CMS or documentation platform | Upload to your storage | More setup, but stable public URLs |
| Internal drafts, quick checks | Direct links | Zero effort, but links may expire |
A concrete example: a team publishing Notion docs to a Next.js site would download images into the repo's public folder during the build, so the site stays self-contained. If the same content also feeds a WordPress instance via the CMS integration, an upload strategy pointing at the site's media library avoids duplicating assets.
Next step: check the media strategy catalogue and the "Mastering Media Handling" blog entry in the documentation to see which strategy fits your pipeline before configuring the converter.
How do I customize the Markdown output with renderer or exporter plugins?
Customize output by writing a renderer plugin for block-level formatting and an exporter plugin for the final document shape. The page describes renderer plugins, exporter plugins, block transformers, annotation transformers, database property transformers, and frontmatter transformers, so you can intercept at several stages rather than post-processing a finished string.
Renderer plugins: change how blocks become Markdown
- Renderer plugin: maps a Notion block type to Markdown. Use this when a callout, code block, or database needs different syntax.
- Block transformers: adjust block content before rendering. Useful for normalizing headings or wrapping sections.
- Annotation transformers: control inline styling such as bold, italics, and links.
- Database property transformers: decide how Notion database properties appear in the output.
A concrete example: a docs team wants callouts rendered as blockquotes with a label. A renderer plugin for the callout block does this once, consistently, instead of find-and-replace on every export.
Exporter plugins: change the whole document
Exporter plugins shape the final output, including frontmatter and page references. The page lists frontmatter transformers and page reference handling, so if you need YAML metadata for a static site generator, that belongs at the exporter/frontmatter layer, not in block renderers.
Use this decision rule:
- Only one block type looks wrong → renderer plugin.
- Inline formatting is wrong → annotation transformer.
- Metadata or page links are wrong → exporter or frontmatter transformer.
Practical scenario
A developer publishing Notion pages to a static site could combine a renderer plugin for custom callouts, a frontmatter transformer for titles and dates, and the built-in media strategies to download images and rewrite links. The page notes media strategies for downloading, uploading, or buffering files with automatic link updates and cleanup.
Start with the plugin catalogue and the "create renderer plugin from scratch" guide on Notion To MD, then test against a page containing every block type you use before rolling it into a build pipeline.
Can Notion To MD convert Notion database properties into frontmatter?
Yes. Notion To MD documents frontmatter transformers as part of its conversion pipeline, and one of its published guides covers converting Notion properties to frontmatter in v4. In practice, that means database properties can be carried into the YAML-style metadata block at the top of a Markdown file rather than being lost or flattened into body text.
What this enables
- Static site publishing: A "Status" or "Tags" property in a Notion database can drive filtering, sorting or draft flags in a generator such as Hugo or Eleventy.
- Consistent metadata: Properties map to frontmatter fields once, so every exported page follows the same schema instead of being hand-edited.
- Custom field names and shapes: The transformer plugin layer is where you decide how a Notion property type (select, multi-select, date, relation) becomes a frontmatter value.
Practical caveat
Mapping is not automatic in every case. Notion property types differ in structure—a multi-select is an array, a date is an object, a relation is a list of page references—so you should decide in advance how each type should appear in frontmatter and configure the transformer accordingly. A quick test export of one representative database page is the fastest way to confirm the output matches what your site's build expects.
For comparison, Notion itself exports Markdown but gives limited control over how database properties are shaped, while Notion To MD is aimed at developers who need that control inside a Node.js pipeline.
How do I automate a publishing workflow that pulls Notion content into a CMS or documentation platform?
Use a small Node.js job that fetches Notion pages with Notion To MD, converts them to Markdown, and hands the output to your CMS or docs build. The library is built for exactly this: it fetches and transforms Notion pages into Markdown, HTML, or custom formats, and its plugin system lets you reshape blocks, frontmatter, and media handling.
A workable pipeline
- Trigger — run on a schedule (cron) or on a Notion webhook/CI event. Start with a schedule; it is simpler to debug.
- Fetch and convert — pull the pages you want and render them to Markdown. Use page references so internal Notion links become links in your target site.
- Normalize — map Notion database properties to frontmatter (title, slug, tags, publish date) so your CMS can route and index pages.
- Handle media — choose a strategy: download images into your repo, upload them to your asset host, or keep direct URLs. Downloading gives you stable links; direct URLs are simplest but depend on Notion's links staying valid.
- Publish — write files into your static site's content folder (Next.js, Hugo, Eleventy) or call your CMS API.
- Verify — fail the job if a required property is missing or a page renders empty, so broken content never ships.
Choosing the destination
| Destination | Best fit | Trade-off |
|---|---|---|
| Static site generator | Docs or blogs rebuilt from Git | Content lives in the repo; edits require a rebuild |
| Headless CMS API | Editors need a web UI and previews | Extra API layer and auth to maintain |
| Docs platform | Versioned product documentation | May constrain Markdown extensions |
Practical cautions
Keep a mapping between Notion page IDs and published URLs so updates overwrite rather than duplicate. Treat "draft" and "published" as explicit database properties, not as folder conventions. If your team writes in Notion daily, run the conversion in CI on every merge so content changes are reviewed like code.
As a next step, convert one representative page with images, a database, and nested lists, then inspect the Markdown before wiring up the CMS. That single test exposes most of the configuration you will need.
User reviews (0)