Notion integration for OpenClaw. Manage pages, databases, and blocks via AI agent.
OpenClaw skill for managing Notion workspaces via AI agents. Provides CLI commands for pages, databases, blocks, and search.
Create a Notion Integration:
Set environment variable:
export NOTION_TOKEN=your_integration_token_here
Share pages/databases with your integration:
All commands use the pattern:
uv run {baseDir}/scripts/notion.py <command> [options]
Create a page:
uv run {baseDir}/scripts/notion.py page create \
--parent <parent_page_id> \
--title "My New Page" \
--content "Initial paragraph content"
Get a page:
uv run {baseDir}/scripts/notion.py page get <page_id>
Update a page:
uv run {baseDir}/scripts/notion.py page update <page_id> \
--title "Updated Title"
Delete (archive) a page:
uv run {baseDir}/scripts/notion.py page delete <page_id>
List child pages:
uv run {baseDir}/scripts/notion.py page list --parent <page_id>
Query a database:
# Simple query
uv run {baseDir}/scripts/notion.py db query <db_id>
# With filter
uv run {baseDir}/scripts/notion.py db query <db_id> --filter Name=Todo
# With sort
uv run {baseDir}/scripts/notion.py db query <db_id> --sort Priority:desc
Add page to database:
uv run {baseDir}/scripts/notion.py db add <db_id> \
--props '{"Name":{"title":[{"text":{"content":"Task"}}]},"Status":{"select":{"name":"Done"}}}'
List all databases:
uv run {baseDir}/scripts/notion.py db list
Append paragraph:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type paragraph \
--text "This is a paragraph"
Append to-do:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type todo \
--text "Task to complete" \
--checked
Append heading:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type heading1 \
--text "Section Title"
Append code block:
uv run {baseDir}/scripts/notion.py block append <page_id> \
--type code \
--text "print('Hello, World!')" \
--language python
List child blocks:
uv run {baseDir}/scripts/notion.py block children <block_id>
Search workspace:
# Search all
uv run {baseDir}/scripts/notion.py search "project plan"
# Search only pages
uv run {baseDir}/scripts/notion.py search "meeting notes" --type page
# Search only databases
uv run {baseDir}/scripts/notion.py search "tasks" --type database
The CLI handles common errors:
NOTION_TOKEN not set — Set the environment variableInvalid NOTION_TOKEN — Check your integration tokenResource not found — Page/database doesn't exist or integration lacks accessPermission denied — Share the resource with your integrationhttps://api.notion.com/v12022-06-28NOTION_TOKENrequests library only (no Notion SDK)Create a meeting notes page:
uv run {baseDir}/scripts/notion.py page create \
--parent <workspace_root_id> \
--title "Meeting Notes - 2026-03-10" \
--content "Attendees: Team"
Add task to project database:
uv run {baseDir}/scripts/notion.py db add <project_db_id> \
--props '{"Name":{"title":[{"text":{"content":"Fix bug #123"}}]},"Status":{"select":{"name":"In Progress"}},"Priority":{"select":{"name":"High"}}}'
Build a structured page:
PAGE_ID=$(uv run {baseDir}/scripts/notion.py page create --parent <parent> --title "Report" | jq -r .id)
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type heading1 --text "Executive Summary"
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type paragraph --text "Key findings..."
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type heading2 --text "Details"
uv run {baseDir}/scripts/notion.py block append $PAGE_ID --type todo --text "Review findings"
uv run {baseDir}/scripts/notion.py --help
uv run {baseDir}/scripts/notion.py page --help
uv run {baseDir}/scripts/notion.py db --help
uv run {baseDir}/scripts/notion.py block --help
ZIP package — ready to use