Markdown to Notion
Paste Markdown — notes, a README, an answer from ChatGPT — and see it as Notion blocks. Copy it as formatted text to paste into a page, or take the block JSON or Notion Markdown for the Notion API.
At a glance
- Turns Markdown into Notion blocks and shows them in a preview, each tagged with its Notion block type (
heading_2,to_do,callout…). - Three ways out: formatted text to paste into a Notion page, block objects (JSON) for the Notion API, and Notion’s own Markdown for the API’s
markdownparameter. - Follows Notion’s API reference, version 2026-03-11: four heading levels, the 72 code-block languages, and the request limits — text is cut at 2,000 characters, arrays at 100 items, nesting at two levels, and more than 100 blocks become several requests.
- The block JSON was checked against the request types of Notion’s official JavaScript SDK.
- Reads GitHub-flavoured Markdown — tables, task lists, strikethrough, bare links — plus maths (
$…$,$$…$$, and the\( … \)and\[ … \]that chat assistants write). - GitHub alerts (
> [!NOTE]) become callouts and<details>sections become toggles. - Says what Notion cannot take — relative links and images, footnotes, raw HTML, code languages Notion does not list — instead of dropping it silently.
- Can send the page to Notion for you: your browser calls Notion’s API directly with your own token, which is not stored and never reaches this site.
- The conversion itself runs in your browser — nothing is uploaded unless you press Send, and then only to Notion.
Step by step
How to convert Markdown to Notion
- 1
Add your Markdown
Paste it into the left pane, or click Open file to load a .md file.
- 2
Check the preview
Each block is shown with its Notion type. Read any note below the panes — it tells you about links or images that need attention.
- 3
To paste by hand
Click Copy for Notion, open a Notion page and press Ctrl+V (⌘V on a Mac).
- 4
To use the API
Choose API blocks (JSON) or Notion Markdown, pick Append to a page or New page under Options, and copy or download the body.
- 5
Send it
Open Send it to Notion from here, paste your token and press Send to Notion — or run the cURL line shown under the result yourself.
Features
Everything you need, nothing you don’t
See it before you send it
The preview draws headings, to-dos, toggles, callouts, tables and code roughly as Notion does, with the block type beside each one.
Ready for the API
Get the body for appending to a page or creating a new one, split into as many requests as Notion’s limits need, with the matching cURL line.
Made for AI answers
Tables, nested lists, code blocks and LaTeX written as \( … \) or \[ … \] come through as tables, lists, code and equations.
Limits handled for you
Long paragraphs and code are cut into 2,000-character pieces, lists nested too deep are moved up, and long tables are split with their heading row repeated.
Nothing lost quietly
A relative link, a local image or a footnote is listed below the result with what happened to it and how to keep it.
Send it in one click
Paste a Notion token and press Send to create a new page or add to an existing one. Or take the JSON and send it your own way.
How Markdown maps to Notion blocks
| Markdown | Notion block | API type |
|---|---|---|
# Heading to #### Heading | Heading 1 to 4 | heading_1 … heading_4 |
- item, 1. item | Bulleted or numbered list | bulleted_list_item, numbered_list_item |
- [ ] task, - [x] done | To-do | to_do |
> quote | Quote | quote |
> [!NOTE] and other GitHub alerts | Callout | callout |
<details><summary>…</summary> | Toggle | toggle |
| Fenced code with a language | Code | code |
$$ … $$ | Equation | equation |
| A table | Table | table with table_row children |
--- | Divider | divider |
 | Image | image (external) |
**bold**, *italic*, ~~strike~~, ` code , link, $x$` | Text styles | rich text annotations, links and inline equations |
Which output to use
- Copy for Notion — for pasting by hand. It puts ordinary formatted text on the clipboard, as copying from a web page does. Notion-only blocks have no clipboard form, so a callout is pasted as a quote and an equation as code; the API outputs create the exact block.
- API blocks (JSON) — for code, Zapier, Make, n8n or any tool that calls the block endpoints. Use the *Append* body with
PATCH /v1/blocks/{id}/children, or the *New page* body withPOST /v1/pages. - Notion Markdown — for the API’s newer
markdownparameter. It is Notion’s “enhanced markdown”: tabs for nesting,<callout>,<details>and<table>tags, and Notion’s escaping rules. One request can create up to 5,000 blocks.
The limits it works within
| Limit in Notion’s API | What the tool does |
|---|---|
| 2,000 characters in one piece of text | Cuts longer text into pieces inside the same block |
| 100 items in any array | Continues a longer block in the next one; splits tables over 100 rows and repeats the heading row |
| 100 blocks per request | Writes several requests, to be sent in order |
| Two levels of nesting per request | Moves deeper blocks up a level and says how many |
| 1,000 blocks and 500 KB per request | Starts a new request before either is reached |
| 1,000 characters in an equation | Keeps a longer one as LaTeX code |
Good to know
- Notion only links to full web addresses. Fill in Base address for relative links to turn
./page.mdandimages/a.pnginto complete URLs. - Images must already be online at a public https:// address; the API reference lists .png, .jpg, .gif, .svg, .bmp, .heic and .tif for external images. Upload local images in Notion itself.
- Front matter at the top of a file is left out; its
titlebecomes the page title for a new page. Otherwise the first#heading does. - A line break inside a paragraph is a space, as in any Markdown renderer. End a line with two spaces or
<br>for a real line break. - Sending is optional. If you use it, your browser sends the blocks and your token straight to api.notion.com; this site has no server that could see them, and the token is forgotten when you close the page.
FAQ
Frequently asked questions
How do I paste Markdown into Notion so it keeps its formatting?
What is the “API blocks (JSON)” output for?
children array — ready to send to PATCH /v1/blocks/{page_id}/children or POST /v1/pages, or to paste into the HTTP step of an automation tool.Why did my content come out as several requests?
What happens to lists nested many levels deep?
Can it send the page to Notion for me?
Does it work with ChatGPT or Claude output?
\( … \) or \[ … \] are converted to Notion tables, lists, code blocks and equations.Which Notion API version does the JSON follow?
Where do I get a Notion token?
Is my text uploaded?
Keep going
Related tools
Markdown Live Previewer
Write Markdown with a live preview: GitHub tables, task lists, alerts and highlighted code. Export to HTML or PDF — free, private, runs in your browser.
Markdown to HTML Converter
Convert Markdown to clean HTML online: GitHub tables, task lists and highlighted code, as a snippet or full page, minified or not. Batch files, no upload.
JSON Formatter & Validator
Format, validate, minify and repair JSON online. Get the exact line and column of every error, a collapsible tree view and sorted keys — private, in-browser.
JSON to YAML Converter
Convert JSON to YAML and YAML to JSON online. Quotes yes, no and 0755 so every parser reads them the same, keeps numbers exact and never uploads your data.
XML to JSON Converter
Convert XML to JSON and JSON to XML online. Keeps attributes, arrays and leading zeros intact, shows exact error lines and never uploads your data.
DNS Lookup
Free DNS lookup: check A, AAAA, CNAME, MX, NS, TXT, SOA and CAA records of any domain, see SPF and DMARC, and do reverse DNS for an IP address.
Last updated Report a problem or suggest a feature