Agent skill
julien-ref-notion-markdown
Complete markdown guide for Universal Notion Uploader. Covers 14 element types (headings, callouts, highlights, toggles, embeds, columns, databases), upload modes, and API constraints.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/julien-ref-notion-markdown
SKILL.md
Markdown Structuring Guide for Universal Notion Uploader
Guide for LLMs generating markdown destined to be uploaded to Notion via the Universal Notion Uploader parser.
Parser Architecture
MarkdownParser (pages): AdmonitionParser, RichTextParser, TableParser, ImageParser DatabaseParser: YAML frontmatter â Notion databases with relations
Supported Elements
1. Headings (H1-H3 Only)
# Heading 1
## Heading 2
### Heading 3
Notion API: heading_1, heading_2, heading_3
Limitations: Maximum 3 levels. H4+ NOT supported by Notion.
Workaround for H4+: Use bold paragraph
**Pseudo-Heading 4**
Content of the section...
Collapsible Headings
##+ Collapsible Section
Content under this heading.
Will collapse/expand in Notion.
## Next Section (stops collapsible)
Syntax: #+, ##+, ###+ followed by title
Notion API: heading_X with is_toggleable: true and nested children
2. Rich Text (Inline Formatting)
**bold** or __bold__
*italic* or _italic_
`code inline`
~~strikethrough~~
[links](https://example.com)
**[bold link](url)**
*[italic link](url)*
=={highlighted text}==
=={colored text}==blue
- Combine freely:
**bold *and italic*** - Parser handles overlaps automatically
- Auto-chunking if text > 2000 chars (API limit)
Highlights (Colored Backgrounds)
=={default yellow}==
=={blue text}==blue
=={red warning}==red
=={green success}==green
Colors: yellow (default), blue, red, green, purple, pink, gray, orange, brown
3. Callouts (4 Syntaxes Supported)
GitHub GFM (PREFERRED)
> [!NOTE]
> This is an important note.
> Can contain multiple lines.
Types: NOTE, TIP, IMPORTANT, WARNING, CAUTION, DANGER, INFO, EXAMPLE
Python-Markdown
!!! note "Optional Title"
Indented content.
MyST Markdown
:::note Optional Title
Content without indentation.
:::
Docusaurus
:::tip
Content directly.
:::
Type â Emoji Mapping:
| Type | Emoji | Color |
|---|---|---|
| NOTE | đ | blue_background |
| TIP | đĄ | yellow_background |
| IMPORTANT | â | purple_background |
| WARNING | â ī¸ | orange_background |
| CAUTION | đ¨ | red_background |
| DANGER | đĨ | red_background |
| INFO | âšī¸ | blue_background |
| EXAMPLE | đ | gray_background |
DO NOT mix syntaxes in the same callout.
4. Lists
Unordered Lists
- Item 1
- Item 2
- Nested item (indentation)
- Item 3
Variants: -, *, +
Ordered Lists
1. First item
2. Second item
1. Nested item
3. Third item
Task Lists (To-Do)
- [ ] Uncompleted task
- [x] Completed task
- [X] Also completed (uppercase supported)
Notion API: to_do block with checked: true/false
Rich text works in list items:
- **Bold item** with *italic*
- [ ] Task with `inline code`
- Item with [link](url)
5. Code Blocks
```python
def hello():
print("Hello world")
- **Always specify language** after ` ``` `
- If unknown language, use `plain text`
- No rich text in code blocks (raw text only)
- Long code (>2000 chars) auto-chunked
---
### 6. Tables
```markdown
| Name | **Status** | Count |
| ---- | ---------- | ----- |
| foo | *active* | 42 |
| bar | inactive | 0 |
Rich text in cells: Bold, italic, code inline, links supported
Recommendations:
- Prefer ⤠10 columns for readability (warning beyond)
- No strict technical limit
- Structure: Header row â Separator row â Data rows
7. Blockquotes
> This is a normal quote.
> Can contain multiple lines.
Distinction with callouts:
> Simple blockquote â Notion quote block
> [!NOTE] Callout â Notion callout block
Rich text supported in quotes.
8. Images
External Images (URLs)

Local Images

- Relative paths resolved from
base_dirconfig - Local images require upload (slower)
- Alt text recommended but not displayed in Notion (API limitation)
9. Toggle Blocks (Collapsible Sections)
<details>
<summary>Click to expand</summary>
Hidden content here.
Can contain **any markdown**: lists, code, tables.
</details>
Notion API: toggle block with nested children
- Opening tag:
<details>(case-insensitive) - Summary line:
<summary>Title</summary>(line 2) - Closing tag:
</details> - Supports nested markdown including nested toggles
10. Embeds
<!-- embed: https://www.youtube.com/watch?v=VIDEO_ID -->
<!-- embed: https://figma.com/file/xxx -->
Notion API: embed or video block
Supported: YouTube, Vimeo, Figma, Google Maps, Google Drive, CodePen, GitHub Gist, Miro
11. Column Layouts
<!-- columns: 2 -->
**Left Column**
Content here.
---column---
**Right Column**
More content.
<!-- /columns -->
Notion API: column_list with column children
Supported: 2, 3, 4+ columns (Notion auto-sizes equally)
12. Dividers (Horizontal Rules)
---
***
___
Notion API: divider block
13. Internal Links
See [[Other Document]] for details.
Link to [[Specific Section#heading]].
Feature: resolve_internal_links: true in config
Behavior:
[[Page Name]]â Resolved to Notion page link after upload- Two-pass upload: First upload all pages, then resolve links
- Unresolved links become plain text
14. Databases from Markdown
Create Notion databases from markdown files with YAML frontmatter.
Database File Structure
---
type: database
name: My Database
icon: đ
description: Database description
properties:
Name:
type: title
Status:
type: select
options:
- Todo
- In Progress
- Done
Date:
type: date
Count:
type: number
Active:
type: checkbox
Related:
type: relation
database: Other Database Name
---
| Name | Status | Date | Count | Active |
|------|--------|------|-------|--------|
| Item 1 | Todo | 2025-01-15 | 42 | true |
| Item 2 | Done | 2025-01-16 | 0 | false |
Supported Property Types
Basic: title (required), rich_text, number, checkbox, date
Selection: select, multi_select
Links: url, email, phone_number
Relations: relation, rollup, formula (computed)
Database Relations
Link databases together:
properties:
Category:
type: relation
database: Categories DB # Name of target database
Registry: Parser maintains database registry for relation resolution.
Upload Modes
Configure in upload_config.yaml:
MIXED (Recommended for docs)
mode: "mixed"
- Root page = Index with folder headings
- Each
.mdfile = child page - Navigation footers on all pages
HIERARCHICAL (Folder preservation)
mode: "hierarchical"
- Folders â Notion pages
- Files â Sub-pages
- Recreates exact folder structure
SEQUENTIAL (Linear reading)
mode: "sequential"
- All files at same level
- Prev/Next navigation between pages
- Good for tutorials
Configuration Features
features:
table_of_contents: true # Add TOC at top
page_navigation: true # Add prev/next footers
image_upload: true # Upload local images
resolve_internal_links: true # Convert [[links]]
flush_before_upload: false # Delete existing content first
Parsing Order (Priority)
- Tables (multi-line, high priority)
- Code blocks (multi-line)
- Callouts (multi-line, 4 syntaxes)
- Images (single line)
- Headings (H1-H3)
- Task lists (
- [ ]/- [x]) - BEFORE unordered lists - Unordered lists (
-,*,+) - Ordered lists (
1.,2.) - Blockquotes (
> text) - Paragraphs (fallback)
NOT Supported
Footnotes ([^1]), Definition lists, HTML inline, Emoji shortcodes (:smile:), H4-H6 headings, Nested blockquotes (>>), Indented code blocks
Patterns to Avoid
| Pattern | Problem | Solution |
|---|---|---|
#### H4 |
Not supported | Use ### H3 or **Bold text** |
| >12 columns | Hard to read | Split tables |
Callout without > |
Breaks parsing | Every line needs > prefix |
| Code without language | Suboptimal | Always specify language |
LLM Pre-Upload Checklist
- Headings max H3 (no H4+)
- Callouts use valid syntax (prefer GFM)
- Tables compact (⤠10 columns recommended)
- Code blocks have language specified
- Task lists use
- [ ]and- [x] - Images use URLs or valid paths
- Rich text in paragraphs/lists/tables/tasks
- No HTML inline
- No unsupported syntax (footnotes, definition lists)
Related Skills
- julien-ref-doc-production: Use for documentation structure before uploading to Notion
Didn't find tool you were looking for?