notion-uploader-downloader

Bidirectional sync between Markdown and Notion. Upload .md files with images to Notion pages/databases, append to existing pages, or download Notion content back to markdown. Supports rich formatting, tables, code blocks, GitHub-flavored markdown, and recursive page hierarchy downloads with YAML frontmatter for round-trip sync.

16 stars

Best use case

notion-uploader-downloader is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Bidirectional sync between Markdown and Notion. Upload .md files with images to Notion pages/databases, append to existing pages, or download Notion content back to markdown. Supports rich formatting, tables, code blocks, GitHub-flavored markdown, and recursive page hierarchy downloads with YAML frontmatter for round-trip sync.

Teams using notion-uploader-downloader 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-uploader-downloader/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/notion-uploader-downloader/SKILL.md"

Manual Installation

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

How notion-uploader-downloader Compares

Feature / Agentnotion-uploader-downloaderStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Bidirectional sync between Markdown and Notion. Upload .md files with images to Notion pages/databases, append to existing pages, or download Notion content back to markdown. Supports rich formatting, tables, code blocks, GitHub-flavored markdown, and recursive page hierarchy downloads with YAML frontmatter for round-trip sync.

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 Uploader/Downloader - Orchestrator (Tier 2)

**PDA Tier**: 2 (Decision Tree & Routing Logic)
**Token Budget**: ~600 tokens
**Purpose**: Classify intent and route to appropriate Tier 3 workflow guides

## Intent Classification Decision Tree

Classify user intent into ONE category and load the corresponding Tier 3 guide:

### 1. UPLOAD Intent 📤
**Triggers**: "upload", "publish", "save to notion", "create page", mentions .md file path
**User Goal**: Send markdown file TO Notion
**Route**: `guides/workflows/upload-workflow.md` (+1,250 tokens)
**Validation**: Markdown file path must be provided

### 2. DOWNLOAD Intent 📥
**Triggers**: "download", "export", "backup", Notion URL provided, "get from notion"
**User Goal**: Extract content FROM Notion (single page)
**Route**: `guides/workflows/download-workflow.md` (+850 tokens)
**Validation**: Page ID or Notion URL must be provided

### 2b. RECURSIVE DOWNLOAD Intent 📥🔄
**Triggers**: "download all", "recursive", "all child pages", "entire hierarchy", "whole section", "backup everything", "download tree"
**User Goal**: Extract a page AND all its child pages recursively
**Route**: `guides/workflows/recursive-download-workflow.md` (+1,100 tokens)
**Validation**: Page ID or Notion URL must be provided
**Output**: Folder structure with mapping.json, YAML frontmatter in each file

### 3. UPDATE/APPEND Intent ➕
**Triggers**: "update", "append", "add to", mentions "page-id" with .md file
**User Goal**: Add content to EXISTING Notion page
**Route**: `guides/workflows/update-workflow.md` (+1,100 tokens)
**Validation**: Both markdown file AND page ID required

### 4. CONFIGURATION Intent ⚙️
**Triggers**: "setup", "configure", "install", "token not found", "how do I set up"
**User Goal**: Initial setup or configuration help
**Route**: `guides/setup/configuration-guide.md` (+700 tokens)
**Auto-trigger**: If NOTION_TOKEN or NOTION_PARENT_PAGE not found

### 5. TROUBLESHOOTING Intent 🔧
**Triggers**: "error", "failed", "not working", "404", "object_not_found", "broken"
**User Goal**: Fix an error or issue
**Route**: `guides/troubleshooting/error-resolution.md` (+950 tokens)
**Auto-trigger**: If script execution fails

### 6. TECHNICAL REFERENCE Intent 📚
**Triggers**: "how does", "what elements", "supported features", "mappings", "can it handle"
**User Goal**: Understand capabilities or technical details
**Route**: Load specific reference based on question:
- Element mappings → `references/MAPPINGS.md` (+515 tokens)
- Quick commands → `references/QUICK_START.md` (+320 tokens)
- Technical details → `references/IMPLEMENTATION_SUMMARY.md` (+1,090 tokens)

## Resource Catalog (Tier 3 - Load On-Demand ONLY)

**Loading Policy**: NEVER load proactively. Load ONLY when routed above.

### Workflow Guides (`guides/workflows/`)
| Guide | Tokens | When to Load |
|-------|--------|--------------|
| `upload-workflow.md` | ~1,250 | Upload Intent (#1) |
| `download-workflow.md` | ~850 | Download Intent (#2) |
| `recursive-download-workflow.md` | ~1,100 | Recursive Download Intent (#2b) |
| `update-workflow.md` | ~1,100 | Update Intent (#3) |

### Setup Guides (`guides/setup/`)
| Guide | Tokens | When to Load |
|-------|--------|--------------|
| `configuration-guide.md` | ~700 | Configuration Intent (#4) or config error |
| `first-time-setup.md` | ~600 | User explicitly asks for setup walkthrough |

### Troubleshooting (`guides/troubleshooting/`)
| Guide | Tokens | When to Load |
|-------|--------|--------------|
| `error-resolution.md` | ~950 | Troubleshooting Intent (#5) or script failure |

### Reference Docs (`references/`)
| Guide | Tokens | When to Load |
|-------|--------|--------------|
| `MAPPINGS.md` | ~515 | Questions about supported elements |
| `QUICK_START.md` | ~320 | Questions about command syntax |
| `IMPLEMENTATION_SUMMARY.md` | ~1,090 | Deep technical questions |

## Token Budget Management

**Current Request Status**:
- ✅ Tier 1 (Metadata): ~150 tokens (loaded)
- ✅ Tier 2 (This Orchestrator): ~600 tokens (loaded)
- ⏳ Tier 3: 0 tokens (awaiting intent classification)
- **Remaining Budget**: 9,250 tokens for Tier 3 resources

**Loading Rules**:
1. Load EXACTLY ONE workflow guide for current intent
2. Load reference guides ONLY when workflow explicitly requires OR user asks technical question
3. Load troubleshooting ONLY on errors or explicit user request
4. Track cumulative tokens after each load
5. Warn if total exceeds 8,000 tokens

## Skill Integration Points

**PlantUML Skill** (`/Users/richardhightower/.claude/skills/plantuml`):
- **When**: Markdown contains ```puml or ```plantuml code blocks
- **Action**: MUST invoke PlantUML skill FIRST before upload
- **Script**: `python scripts/process_markdown_puml.py <file.md> --format png`
- **Output**: Use transformed `*_with_images.md` for upload
- **Reason**: Notion doesn't natively render PlantUML

## Error Handling & Fallback Logic

**Missing NOTION_TOKEN**:
→ Route to Configuration Intent (#4)

**Missing NOTION_PARENT_PAGE** (and no --parent-id/--database-id/--page-id):
→ Route to Configuration Intent (#4)

**Script Execution Fails**:
→ Route to Troubleshooting Intent (#5)

**Unknown/Ambiguous Intent**:
→ Use AskUserQuestion tool to clarify, then re-classify

**Resource Not Found** (guide file missing):
→ Apologize, explain PDA structure may be incomplete, ask user what they need

## Quick Reference (Non-Expandable)

**Core Scripts**:
- `scripts/notion_upload.py` - Upload markdown to Notion
- `scripts/notion_download.py` - Download single Notion page to markdown
- `scripts/notion_download_recursive.py` - Recursively download page + children
- `scripts/notion_utils.py` - Shared utilities (token/parent discovery)

**Configuration**:
- File: `.env.notion` (NOTION_TOKEN=..., NOTION_PARENT_PAGE=...)
- Search Path: Current dir → Parent dirs → Environment variables

**Python Requirements**:
- Version: Python 3.8+
- Install: `pip install -r scripts/requirements.txt`
- Dependencies: requests, python-dotenv

---

## PDA Compliance Checklist

- ✅ Decision tree with 6 clear intents
- ✅ Explicit routing to Tier 3 resources
- ✅ Token budgets documented for all resources
- ✅ Lazy loading policy (no proactive loads)
- ✅ No embedded workflows or comprehensive guides
- ✅ Error handling with fallback routing
- ✅ Integration points identified (PlantUML)
- ✅ Resource catalog with load conditions
- ✅ Token tracking instructions
- ✅ Under 100 lines (target: ~95 lines)

Related Skills

youtube-downloader

16
from diegosouzapw/awesome-omni-skill

Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.

notion-meeting-intelligence

16
from diegosouzapw/awesome-omni-skill

Prepares meeting materials by gathering context from Notion, enriching with Claude research, and creating both an internal pre-read and external agenda saved to Notion. Helps you arrive prepared with comprehensive background and structured meeting docs.

notion-management

16
from diegosouzapw/awesome-omni-skill

Complete guide for working with Notion API in Node.js/JavaScript projects. Use when creating, updating, fetching, or managing Notion pages, databases, and properties. Includes proper handling of rich text, database schemas, multi-select fields, dates, and complex content structures. Triggers on tasks like "create a Notion page," "update database properties," "add content to Notion," or "manage Notion workflows."

notion-knowledge-capture

16
from diegosouzapw/awesome-omni-skill

Transforms conversations and discussions into structured documentation pages in Notion. Captures insights, decisions, and knowledge from chat context, formats appropriately, and saves to wikis or databases with proper organization and linking for easy discovery.

notion-content

16
from diegosouzapw/awesome-omni-skill

Create content records in Notion database after publishing articles. Use when user provides article title and publishing links (zhihu, weixin, baidu, sohu, toutiao, x.com). Auto-detects platform from URL, fills publish date. Trigger on "/notion-content", "notion记录", "内容入库", or when user says they published an article with links.

core-platform-notion-reviewer

16
from diegosouzapw/awesome-omni-skill

Core Platform Team의 Notion 문서를 문서 타입(테크스펙/시스템설계/시스템소개/액션아이템/아이디어)과 17개 품질 기준에 따라 리뷰하고 개선안을 제안합니다. Notion MCP를 통해 문서 읽기/수정/검색을 수행합니다. 사용자가 Notion 문서 리뷰, 문서 품질 검사, Notion 페이지 개선 요청을 할 때 사용하세요.

notion-template-business

16
from diegosouzapw/awesome-omni-skill

Expert in building and selling Notion templates as a business - not just making templates, but building a sustainable digital product business. Covers template design, pricing, marketplaces, market...

Media Uploader - R2/S3 with video download

16
from diegosouzapw/awesome-omni-skill

Upload files or download videos from popular platforms (YouTube, Vimeo, Bilibili, etc.) and upload to Cloudflare R2, AWS S3, or any S3-compatible storage with secure presigned download links.

notion

16
from diegosouzapw/awesome-omni-skill

Integrate with Notion for knowledge management and collaboration. Use when you need to: (1) create and update Notion pages and databases, (2) search and query database content, (3) manage page properties and relations, or (4) organize workspace content and structure.

notion-automation

16
from diegosouzapw/awesome-omni-skill

Automate Notion tasks via Rube MCP (Composio): pages, databases, blocks, comments, users. Always search tools first for current schemas.

advanced-video-downloader

16
from diegosouzapw/awesome-omni-skill

Download and transcribe videos from YouTube, Bilibili, TikTok and 1000+ platforms. Use when user requests video download, transcription (转录/字幕提取), or converting video to text/markdown. Supports quality selection, audio extraction, playlist downloads, cookie-based authentication, and AI-powered transcription via SiliconFlow API (免费转录).

aitmpl-downloader

16
from diegosouzapw/awesome-omni-skill

Download Claude Code templates from aitmpl.com (GitHub API). Use PROACTIVELY to search and install agents, commands, skills, mcps, settings, hooks, and plugins.