Bidirectional Markdown ↔ Notion converter with CLI tools.
# With uv (recommended for CLI tools)
uv tool install marknotion
# Or with pip
pip install marknotion- Go to Notion Integrations
- Click "New integration"
- Give it a name (e.g., "marknotion")
- Select capabilities: Read, Update, Insert content
- Copy the "Internal Integration Token"
export NOTION_TOKEN="secret_xxxxx..."Or create a .env file in your project:
NOTION_TOKEN=secret_xxxxx...
In Notion, open the page you want to access, click "..." menu → "Connections" → Add your integration.
# Update an existing page
md2notion README.md --page "https://notion.so/My-Page-abc123..."
# Create a new child page
md2notion guide.md --parent "abc123..." --title "User Guide"# Print to stdout
notion2md "https://notion.so/My-Page-abc123..."
# Save to file
notion2md abc123... -o exported.md# Search all (pages and databases)
notion-search "project"
# Search only databases (useful for finding database IDs)
notion-search "tracker" --type database
# Search only pages
notion-search "notes" --type page
# Limit results
notion-search project -n 5Output includes type, ID, and clickable URL:
[Database] Projects
ID: 1d73963f-ce05-8183-9af4-000b16a57189
URL: https://www.notion.so/1d73963fce05813bac29eba023f0dd25
[Page] Meeting Notes
ID: abc123de-f456-7890-1234-56789012abcd
URL: https://www.notion.so/Meeting-Notes-abc123def4567890123456789012abcd
from marknotion import markdown_to_blocks, blocks_to_markdown, NotionClient
# Convert Markdown to Notion blocks
blocks = markdown_to_blocks("# Hello\n\nWorld")
# Convert Notion blocks to Markdown
md = blocks_to_markdown(blocks)
# Use NotionClient for API operations
client = NotionClient() # Uses NOTION_TOKEN env var
client.update_page_content_from_markdown(page_id, markdown)- Headings (h1-h3)
- Paragraphs
- Bold, italic, strikethrough, inline code
- Links
- Bullet lists, numbered lists
- Code blocks (with language)
- Blockquotes
- Horizontal rules
MIT