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.

8 stars

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

$curl -o ~/.claude/skills/notion-export/SKILL.md --create-dirs "https://raw.githubusercontent.com/cdeistopened/skill-stack/main/public/skills/notion-export/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/notion-export/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How notion-export Compares

Feature / Agentnotion-exportStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

Transcribe YouTube videos and playlists using Gemini Flash

web-scrape

8
from cdeistopened/skill-stack

Scrape web pages to clean markdown with optional AI summaries

voice-tyler-cowen

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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

8
from cdeistopened/skill-stack

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.