notion-export
Export markdown files to Notion with proper rich text formatting. Use when staging articles, drafts, or documentation in Notion. Handles bold, italic, links, headers, bullets, numbered lists, and code blocks.
Best use case
notion-export is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Export markdown files to Notion with proper rich text formatting. Use when staging articles, drafts, or documentation in Notion. Handles bold, italic, links, headers, bullets, numbered lists, and code blocks.
Teams using notion-export should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/notion-export/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How notion-export Compares
| Feature / Agent | notion-export | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Export markdown files to Notion with proper rich text formatting. Use when staging articles, drafts, or documentation in Notion. Handles bold, italic, links, headers, bullets, numbered lists, and code blocks.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Notion Export Converts local markdown files to Notion pages with full rich text formatting preserved. ## Quick Start ```bash # Create new page under a parent python3 ~/.claude/scripts/notion_markdown.py draft.md --parent-id <page_id> --title "My Article" # Update existing page (replaces content) python3 ~/.claude/scripts/notion_markdown.py draft.md --update <page_id> # Search for a parent page python3 ~/.claude/scripts/notion_markdown.py draft.md --search "Guest Contributors" ``` ## When to Use - Staging article drafts for team review - Exporting documentation to Notion workspace - Syncing local markdown files to Notion - When Notion MCP server is disconnected ## Supported Formatting | Markdown | Notion | |----------|--------| | `**bold**` | Bold text | | `*italic*` | Italic text | | `[text](url)` | Link | | `` `code` `` | Inline code | | `# H1` | Heading 1 | | `## H2` | Heading 2 | | `### H3` | Heading 3 | | `- bullet` | Bulleted list | | `1. numbered` | Numbered list | | `> quote` | Quote block | | ``` code block ``` | Code block | | `---` | Divider | ## Requirements - Python 3 with `requests` library - Notion API key in `.mcp.json` or `NOTION_API_KEY` environment variable ## Finding Page IDs Page IDs can be found: 1. In the Notion URL: `notion.so/Page-Name-abc123def456` → `abc123def456` 2. Using `--search "query"` to find pages by name 3. From previous exports/creates ## Examples ### Stage an article draft ```bash python3 ~/.claude/scripts/notion_markdown.py \ "Studio/SEO Content/drafts/my-article.md" \ --parent-id "3d9f18f9-03a9-4374-ae5c-a57e85427060" \ --title "[DRAFT] My Article Title" ``` ### Update after edits ```bash python3 ~/.claude/scripts/notion_markdown.py \ "Studio/SEO Content/drafts/my-article.md" \ --update "2fdafe52-ef59-81dc-b1ac-e79b40c2d40d" ``` ## Common Parent Pages | Purpose | Page ID | |---------|---------| | OpenEd Content Engine | `3d9f18f9-03a9-4374-ae5c-a57e85427060` | ## Troubleshooting **"No Notion API key found"** - Check `.mcp.json` has `notion.env.NOTION_API_KEY` configured - Or set `NOTION_API_KEY` environment variable **Formatting not appearing** - Check markdown syntax is correct (no spaces in `** bold **`) - Links must be `[text](url)` format, not bare URLs **Page not updating** - Verify page ID is correct (use --search to find) - Check API key has edit permissions for the page
Related Skills
x-viral-template-miner
When the user wants to find proven-to-travel post templates in their niche and adapt them to their own product. Also use when the user mentions "what's going viral in my space", "what are competitors posting", "copy a viral post", "trending on X", "post ideas", "template mining", or "what to post this week". This is trend hunting, not plagiarism — the output is a template the user fills with their own assets.
x-linkedin-content-relay
When the user has X (Twitter) content that performed well and wants to relay it to LinkedIn 1-2 weeks later with reframing. Also use when the user mentions "repost to LinkedIn", "LinkedIn version of my tweet", "X to LinkedIn", "delayed repost", "LinkedIn for non-tech audience", or "LinkedIn relay". Also use when the user's ICP is non-tech and X is secondary — LinkedIn is the primary channel and this skill produces the content.
x-launch-video-structure
When the user is planning, scripting, or editing a product launch video for X (Twitter) and needs the structure. Also use when the user mentions "launch video", "demo video", "product launch on X", "60 second demo", "how to structure a launch", or "my launch video isn't working". Produces a beat-by-beat timing sheet, not copy.
x-account-warmup
When a user wants to grow an X (Twitter) account from zero before a product launch, or asks how to get first followers, warm up the algorithm, hit ~500-1,000 followers, or prepare an account to make a launch video land. Also use when the user mentions "new X account", "warm up my Twitter", "first 1000 followers", "building in public strategy", "X growth", or "engagement before launch".
skill-stack-thumbnails
Generate blog post thumbnails for Skill Stack using the brand aesthetic. Follows an iterative workflow - brainstorm concepts, get approval, generate with Gemini API.
youtube-ingest
Transcribe YouTube videos and playlists using Gemini Flash
web-scrape
Scrape web pages to clean markdown with optional AI summaries
voice-tyler-cowen
Write in Tyler Cowen's style - matter-of-fact, understated, treats enormous ideas as obvious observations. Read the passages. Absorb the flatness. Channel the HOW, not the content.
voice-trung-phan
Generate tweets and threads in the style of Trung Phan. Not just voice — captures his humor mechanics, format taxonomy, topic selection filter, and structural patterns. Use for trend-reactive tweets, meme commentary, and business/culture threads.
voice-levine-berry
Write in a combined Matt Levine + Wendell Berry voice. Levine's dry logic-walking and parenthetical humor for the analytical sections. Berry's meditative patience for the human ones. Read the passages. Absorb the rhythm. Channel the HOW, not the content.
voice-dan-koe
Write long-form essays and newsletters in Dan Koe's voice — philosophical depth made accessible, staccato rhythm with expansive passages, confident authority, zero hedging. Structured as a teaching conversation with bad-AI/correction/good-version rounds reverse-engineered from his actual articles. Use for newsletters, X articles, blog essays, or any long-form content that needs to blend philosophy with practical frameworks.
skill-extractor
Extract actionable Claude Code skills from raw source material — transcripts, conversations, workflows, expertise dumps. This skill identifies repeatable, promptable workflows embedded in content and scores them by leverage. Use when processing a corpus (podcast transcripts, blog posts, course material) to discover what skills could be built from it.