Skip to content
JustTools

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.

Sends to Notion only if you ask Free · no sign-up

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 markdown parameter.
  • 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. 1

    Add your Markdown

    Paste it into the left pane, or click Open file to load a .md file.

  2. 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. 3

    To paste by hand

    Click Copy for Notion, open a Notion page and press Ctrl+V (⌘V on a Mac).

  4. 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. 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

MarkdownNotion blockAPI type
# Heading to #### HeadingHeading 1 to 4heading_1 … heading_4
- item, 1. itemBulleted or numbered listbulleted_list_item, numbered_list_item
- [ ] task, - [x] doneTo-doto_do
> quoteQuotequote
> [!NOTE] and other GitHub alertsCalloutcallout
<details><summary>…</summary>Toggletoggle
Fenced code with a languageCodecode
$$ … $$Equationequation
A tableTabletable with table_row children
---Dividerdivider
![alt](https://…)Imageimage (external)
**bold**, *italic*, ~~strike~~, ` code , link, $x$`Text stylesrich 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 with POST /v1/pages.
  • Notion Markdown — for the API’s newer markdown parameter. 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 APIWhat the tool does
2,000 characters in one piece of textCuts longer text into pieces inside the same block
100 items in any arrayContinues a longer block in the next one; splits tables over 100 rows and repeats the heading row
100 blocks per requestWrites several requests, to be sent in order
Two levels of nesting per requestMoves deeper blocks up a level and says how many
1,000 blocks and 500 KB per requestStarts a new request before either is reached
1,000 characters in an equationKeeps 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.md and images/a.png into 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 title becomes 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?

Paste the Markdown here, click Copy for Notion and paste into your page with Ctrl+V. The clipboard then holds the headings, lists, to-dos, tables, quotes and code as formatted text, the same as when you copy them from a web page. For callouts, toggles and equations exactly as written, send the page through the API instead.

What is the “API blocks (JSON)” output for?

Notion’s API builds pages from block objects. This output is that JSON — the 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?

Notion accepts at most 100 blocks in one request. Longer documents are split into parts; send them in order, each to the same page. Use the arrows above the result to move between parts.

What happens to lists nested many levels deep?

One request can carry two levels of children. Blocks nested deeper are moved up to the second level, in the same order, and the note below the result says how many. The Notion Markdown output has no such limit.

Can it send the page to Notion for me?

Yes. Open Send it to Notion from here, paste a Notion token and choose a new page or an existing one. Your browser calls Notion’s API directly; the token is not saved anywhere. If you would rather not paste a token into a web page, copy the JSON and send it yourself.

Does it work with ChatGPT or Claude output?

Yes — that is a common use. Copy the answer as Markdown and paste it here. Tables, nested lists, code and maths written as \( … \) or \[ … \] are converted to Notion tables, lists, code blocks and equations.

Which Notion API version does the JSON follow?

Version 2026-03-11, the current one when this tool was written, which added a fourth heading level. If your tool only knows three, set Heading levels to *Up to 3* under Options.

Where do I get a Notion token?

In Notion’s developer portal, under Personal access tokens: create a token with the Notion API capability and copy it. With such a token, leaving the parent page blank creates a private page in your workspace. A token from an internal connection also works, after you add that connection to the page under ••• → Connections.

Is my text uploaded?

Not unless you press Send. The conversion runs in your browser, and this site has no server that receives your text. When you do send, the blocks go from your browser to Notion and nowhere else.

Keep going

Browse every tool

Last updated Report a problem or suggest a feature