← Back to Skills Marketplace
moikapy

Notion Enhanced

by Moikapy · GitHub ↗ · v0.1.0
cross-platform ✓ Security Clean
2631
Downloads
4
Stars
11
Active Installs
1
Versions
Install in OpenClaw
/install openclaw-notion-skill
Description
Integrate with Notion workspaces to read pages, query databases, create entries, and manage content. Perfect for knowledge bases, project tracking, content calendars, CRMs, and collaborative documentation. Works with any Notion page or database you explicitly share with the integration.
README (SKILL.md)

Notion Integration

Connect your Notion workspace to OpenClaw for seamless knowledge management and project tracking.

When to Use This Skill

Use Notion when the user wants to:

  • Add items to a database (backlog, todos, tracking)
  • Create new pages in a database or as children of existing pages
  • Query/search their Notion workspace for information
  • Update existing pages (status, notes, properties)
  • Read page content or database entries

Setup

1. Create Notion Integration

  1. Go to notion.so/my-integrations
  2. Click New integration
  3. Name it (e.g., "OpenClaw")
  4. Select your workspace
  5. Copy the Internal Integration Token (starts with secret_)
  6. Save this token securely in OpenClaw config or environment: NOTION_TOKEN=secret_...

2. Share Pages with Integration

Important: Notion integrations have NO access by default. You must explicitly share:

  1. Go to any page or database in Notion
  2. Click ShareAdd connections
  3. Select your "OpenClaw" integration
  4. The skill can now read/write to that specific page/database

3. Get Database/Page IDs

From URL:

  • Database: https://www.notion.so/workspace/XXXXXXXX?v=... → ID is XXXXXXXX (32 chars)
  • Page: https://www.notion.so/workspace/XXXXXXXX → ID is XXXXXXXX

Note: Remove hyphens when using IDs. Use the 32-character string.

Core Operations

Query Database

Retrieve entries from any database you've shared.

// Using the Notion skill via exec
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${databaseId}`
});

// With filters (example: status = "In Progress")
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${databaseId} --filter '{"property":"Status","select":{"equals":"In Progress"}}'`
});

Returns: Array of pages with properties as configured in your database.

Add Database Entry

Create a new row in a database.

// Add entry with multiple properties
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${databaseId} \
    --title "My New Content Idea" \
    --properties '${JSON.stringify({
      "Status": { "select": { "name": "Idea" } },
      "Platform": { "multi_select": [{ "name": "X/Twitter" }] },
      "Tags": { "multi_select": [{ "name": "3D Printing" }, { "name": "AI" }] },
      "Priority": { "select": { "name": "High" } }
    })}'`
});

Get Page Content

Read the content of any page (including database entries).

await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js get-page ${pageId}`
});

Returns: Page title, properties, and block content (text, headings, lists, etc.).

Update Page

Modify properties or append content to an existing page.

// Update properties
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js update-page ${pageId} \
    --properties '${JSON.stringify({
      "Status": { "select": { "name": "In Progress" } }
    })}'`
});

// Append content blocks
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js append-body ${pageId} \
    --text "Research Notes" --type h2`
});

Search Notion

Find pages across your shared workspace.

await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js search "content ideas"`
});

Common Use Cases

Content Pipeline (Content Creator Workflow)

Database Structure:

  • Title (title)
  • Status (select: Idea → Draft → Scheduled → Posted)
  • Platform (multi_select: X/Twitter, YouTube, MakerWorld, Blog)
  • Publish Date (date)
  • Tags (multi_select)
  • Draft Content (rich_text)

OpenClaw Integration:

// Research scout adds findings to Notion
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${contentDbId} \
    --title "New 3D Print Technique" \
    --properties '${JSON.stringify({
      "Status": { "select": { "name": "Idea" } },
      "Platform": { "multi_select": [{ "name": "YouTube" }] },
      "Tags": { "multi_select": [{ "name": "3D Printing" }] }
    })}'`
});

// Later: Update when drafting
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js update-page ${entryId} \
    --properties '${JSON.stringify({
      "Status": { "select": { "name": "Draft" } },
      "Draft Content": { "rich_text": [{ "text": { "content": "Draft text here..." } }] }
    })}'`
});

Project Management (Solo Entrepreneur)

Database Structure:

  • Name (title)
  • Status (select: Not Started → In Progress → Blocked → Done)
  • Priority (select: Low → Medium → High → Critical)
  • Due Date (date)
  • Estimated Hours (number)
  • Actual Hours (number)
  • Links (url)
  • Notes (rich_text)

Weekly Review Integration:

// Query all "In Progress" projects
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${projectsDbId} --filter '{"property":"Status","select":{"equals":"In Progress"}}'`
});

Customer/Quote CRM (3D Printing Business)

Database Structure:

  • Customer Name (title)
  • Status (select: Lead → Quote Sent → Ordered → Printing → Shipped)
  • Email (email)
  • Quote Value (number)
  • Filament Type (select)
  • Due Date (date)
  • Shopify Order ID (rich_text)

Shopify Integration:

// New order → create CRM entry
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${crmDbId} \
    --title "${customerName}" \
    --properties '${JSON.stringify({
      "Status": { "select": { "name": "Ordered" } },
      "Email": { "email": customerEmail },
      "Shopify Order ID": { "rich_text": [{ "text": { "content": orderId } }] }
    })}'`
});

Knowledge Base (Wiki Replacement for MEMORY.md)

Structure: Hub page with nested pages:

  • 🏠 Home (shared with integration)
    • SOPs
    • Troubleshooting
    • Design Patterns
    • Resource Links

Query for quick reference:

// Search for "stringing" to find 3D print troubleshooting
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js search "stringing"`
});

Property Types Reference

When creating/updating database entries, use these property value formats:

// Title (always required for new pages)
{ "title": [{ "text": { "content": "Page Title" } }] }

// Select (single choice)
{ "select": { "name": "Option Name" } }

// Multi-select (multiple choices)
{ "multi_select": [{ "name": "Tag 1" }, { "name": "Tag 2" }] }

// Status (for new Status property type)
{ "status": { "name": "In progress" } }

// Text / Rich text
{ "rich_text": [{ "text": { "content": "Your text here" } }] }

// Number
{ "number": 42 }

// Date
{ "date": { "start": "2026-02-15" } }
{ "date": { "start": "2026-02-15T10:00:00", "end": "2026-02-15T12:00:00" } }

// Checkbox
{ "checkbox": true }

// Email
{ "email": "[email protected]" }

// URL
{ "url": "https://example.com" }

// Phone
{ "phone_number": "+1-555-123-4567" }

// Relation (link to another database entry)
{ "relation": [{ "id": "related-page-id-32chars" }] }

Security & Permissions

Critical Security Model:

  • ✅ Integration ONLY sees pages you explicitly share
  • ✅ You control access per page/database
  • ✅ Token stored securely in ~/.openclaw/.env (never in code)
  • ❌ Never commit NOTION_TOKEN to git
  • ❌ Integration cannot access private teamspaces or other users' private pages

Best Practices:

  1. Use a dedicated integration (don't reuse personal integrations)
  2. Share minimum necessary pages (granular > broad)
  3. Rotate token if compromised via Notion integration settings
  4. Review shared connections periodically

Environment Setup

Add to ~/.openclaw/.env:

NOTION_TOKEN=secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Or set per-command:

NOTION_TOKEN=secret_xxx node notion-cli.js ...

Error Handling

Common errors and fixes:

Error Cause Fix
"API token is invalid" Wrong token or integration deleted Check token at notion.so/my-integrations
"object_not_found" Page not shared with integration Share page: Share → Add connections
"validation_error" Property format incorrect Check property type in database
"rate_limited" Too many requests Add delay between requests

Quick Install (One Command)

cd ~/.agents/skills/notion
./install.sh

Manual install (if above fails):

cd ~/.agents/skills/notion
npm install

That's it! No build step required for the standalone version.

Quick Test

# After setting NOTION_TOKEN in ~/.openclaw/.env
node notion-cli.js test

Smart ID Resolution

Reference entries by Notion auto-ID (e.g., #3) or direct UUID.

By Notion ID (Recommended for Manual Use)

Use the number you see in your database's ID column:

# Get entry #3
node notion-cli.js get-page '#3' DATABASE_ID

# Add content to entry #3
node notion-cli.js append-body '#3' --database DATABASE_ID \
  --text "Research notes" --type h2

# Add bullet to entry #3
node notion-cli.js append-body '#3' --database DATABASE_ID \
  --text "Key finding" --type bullet

By Direct UUID (For Automation)

# Using full UUID from Notion URL
node notion-cli.js get-page 2fb3e4ac...
node notion-cli.js append-body 2fb3e4ac... \
  --text "Content" --type paragraph

Auto-detection: Starts with # = Notion ID lookup. 32-char hex = Direct UUID.

Pro Tip: Add an ID property (type: unique ID) to auto-number entries as #1, #2, #3...

Page Body Editing

Add rich content to page bodies, not just properties.

Append Content Blocks

# Add heading
node notion-cli.js append-body PAGE_ID --text "Research Summary" --type h2

# Add paragraph (default)
node notion-cli.js append-body PAGE_ID --text "Detailed findings go here..."

# Add bullet list item
node notion-cli.js append-body PAGE_ID --text "First key finding" --type bullet

# Add numbered list item
node notion-cli.js append-body PAGE_ID --text "Step one description" --type numbered

# Add TODO checkbox
node notion-cli.js append-body PAGE_ID --text "Create video script" --type todo

# Add quote
node notion-cli.js append-body PAGE_ID --text "Important quote from source" --type quote

# Add code block
node notion-cli.js append-body PAGE_ID --text "const result = optimizeSupports();" --type code --lang javascript

Supported Block Types

Type Description Example Use
paragraph Regular text (default) Descriptions, explanations
h1, h2, h3 Headings Section organization
bullet Bulleted list Key findings, features
numbered Numbered list Step-by-step instructions
todo Checkbox item Action items, tasks
quote Blockquote Source citations
code Code block Snippets, commands
divider Horizontal line Section separation

Get Page with Body Content

# Get full page including formatted body
node notion-cli.js get-page PAGE_ID

Returns:

  • Page properties
  • Formatted body blocks (type + content preview)
  • Block count

Advanced: Raw JSON Blocks

For complex layouts, use raw Notion block JSON:

node notion-cli.js append-body PAGE_ID --blocks '[
  {"object":"block","type":"heading_2","heading_2":{"rich_text":[{"text":{"content":"Research Notes"}}]}},
  {"object":"block","type":"bulleted_list_item","bulleted_list_item":{"rich_text":[{"text":{"content":"Finding 1"}}]}},
  {"object":"block","type":"code","code":{"rich_text":[{"text":{"content":"console.log(1)"}}],"language":"javascript"}}
]'

Advanced: Webhook Sync

For bidirectional sync (Notion changes → OpenClaw):

  1. Set up Notion webhook integration (requires Notion partner account)
  2. Configure webhook endpoint to your OpenClaw Gateway
  3. Skill processes incoming webhooks and updates memory files

See references/webhooks.md for implementation details.


Need help? Check your Notion integration settings at https://www.notion.so/my-integrations

Using in OpenClaw

Quick Setup

# 1. Install
cd ~/.agents/skills/notion
npm install

# 2. Configure token
echo "NOTION_TOKEN=secret_xxxxxxxxxx" >> ~/.openclaw/.env

# 3. Test connection
node notion-cli.js test

From OpenClaw Agent

// Query database
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js query-database YOUR_DB_ID`
});

// Add entry
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js add-entry YOUR_DB_ID \\
    --title "New Content Idea" \\
    --properties '{"Status":{"select":{"name":"Idea"}}}'`
});

// Search
await exec({
  command: `node ~/.agents/skills/notion/notion-cli.js search "tree support"`
});

Cron Job Usage

Update your Research Topic Scout to push to Notion:

"message": "Research trends and add to Notion: 
  node ~/.agents/skills/notion/notion-cli.js add-entry DB_ID 
    --title '\x3Ctitle>' 
    --properties '{...,\"Platform\":{\"multi_select\":[{\"name\":\"X\"}]}}'"
Usage Guidance
This skill appears to be what it claims: a Notion integration that needs only your Notion integration token and node. Before installing, do the following: 1) Verify the source repository (the bundle references github.com/MoikasLabs/openclaw-notion-skill) and inspect the code locally (you already have the files) — run a quick grep for unexpected outgoing endpoints or secrets exfiltration (none were found in this review). 2) Confirm registry metadata: the top-level metadata here omits NOTION_TOKEN and calls the package 'instruction-only' even though install scripts and JS/TS code are included; treat skill.json and SKILL.md as authoritative and be cautious running install.sh until you confirm the repo origin. 3) Create a Notion integration with the minimal scopes you need and share only the specific pages/databases the integration should access. 4) Store NOTION_TOKEN in a secure secrets store if available (avoid committing it to files in version control); if stored in ~/.openclaw/.env, ensure filesystem permissions are restrictive. 5) Run npm install and npm audit before use and consider running the skill in an isolated environment (container or dedicated agent) if you want extra assurance. If you want, I can produce exact commands to audit dependencies or highlight every place the token is read/written in the code.
Capability Analysis
Type: OpenClaw Skill Name: openclaw-notion-skill Version: 0.1.0 The OpenClaw Notion skill is designed to integrate with Notion workspaces, allowing agents to read, write, and manage content. The `SKILL.md` and `README.md` provide clear instructions for users and agents on how to use the skill, emphasizing secure handling of the `NOTION_TOKEN` by storing it in `~/.openclaw/.env` and explicitly stating that Notion integrations only access pages shared by the user. The `install.sh` and `setup-wizard.sh` scripts perform standard dependency installation and interactive setup without any malicious commands or unauthorized system modifications. The core logic in `notion-cli.js` and `src/` files correctly uses the Notion API client, accesses the token from environment variables, and limits file system interaction to a benign temporary mapping file. No evidence of data exfiltration, malicious execution, persistence, or prompt injection with harmful objectives was found. The crypto address in `SUPPORT.md` is for voluntary donations and is not malicious.
Capability Assessment
Purpose & Capability
The skill's name, SKILL.md, CLI and TypeScript code all implement a Notion integration (query DBs, create/update pages, search). The required credential (NOTION_TOKEN) and the node runtime are what you'd expect. However, the top-level registry metadata in the provided bundle incorrectly listed 'Required env vars: none' and 'instruction-only' despite a skill.json and multiple code files (install scripts, CLI, TS sources) that do require NOTION_TOKEN and node. This packaging/metadata mismatch is an inconsistency to be aware of.
Instruction Scope
Runtime instructions and CLI commands are scoped to Notion API calls, local config (~/.openclaw/.env), and optional temp mapping files for numbered IDs. The SKILL.md and setup scripts only read/write local config and talk to Notion's API; they do not instruct the agent to read unrelated system files or to send data to unexpected external endpoints.
Install Mechanism
There is no formal install spec in the registry entry, but the package includes standard install.sh and npm-based install/build steps and recommends git clone from a GitHub repo. Installation uses npm and local scripts (no opaque downloads or URL-shortened resources). The risk is low, but the absence of an explicit install spec in the registry combined with included install scripts is a packaging inconsistency worth verifying (confirm the repository URL and inspect code before running install.sh).
Credentials
The code and docs require only the Notion integration token (NOTION_TOKEN) and optionally database IDs stored in ~/.openclaw/.env. Those are proportional to the stated functionality. There are no unrelated secret requests (no AWS, Shopify tokens required by default).
Persistence & Privilege
The skill does not request always:true and is user-invocable. It instructs the user to store the NOTION_TOKEN in ~/.openclaw/.env and writes a temporary mapping file in the OS temp directory for numbered-ID mappings; both are scoped to the skill and do not modify other skills or system-wide settings. Agent autonomy (disable-model-invocation:false) is normal and not risky by itself.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install openclaw-notion-skill
  3. After installation, invoke the skill by name or use /openclaw-notion-skill
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.0
Initial release of the Notion integration skill. - Enables connecting OpenClaw to Notion for reading, creating, updating, and searching pages and database entries. - Supports low-code workflows via CLI commands: query databases, add entries, get page content, update properties, append content, and search. - Provides detailed setup instructions, including integration creation and workspace sharing steps. - Documents full property type mappings for seamless Notion API usage. - Includes best practices for permissions and secure token handling. - Showcases examples for content pipelines, project management, CRM, and knowledge base workflows.
Metadata
Slug openclaw-notion-skill
Version 0.1.0
License
All-time Installs 11
Active Installs 11
Total Versions 1
Frequently Asked Questions

What is Notion Enhanced?

Integrate with Notion workspaces to read pages, query databases, create entries, and manage content. Perfect for knowledge bases, project tracking, content calendars, CRMs, and collaborative documentation. Works with any Notion page or database you explicitly share with the integration. It is an AI Agent Skill for Claude Code / OpenClaw, with 2631 downloads so far.

How do I install Notion Enhanced?

Run "/install openclaw-notion-skill" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Notion Enhanced free?

Yes, Notion Enhanced is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Notion Enhanced support?

Notion Enhanced is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Notion Enhanced?

It is built and maintained by Moikapy (@moikapy); the current version is v0.1.0.

💬 Comments