{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openclaw-notion-skill",
    "name": "Notion Enhanced",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/Moikapy/openclaw-notion-skill",
    "canonicalUrl": "https://clawhub.ai/Moikapy/openclaw-notion-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openclaw-notion-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openclaw-notion-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "SUPPORT.md",
      "install.sh",
      "notion-cli.js",
      "package.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/openclaw-notion-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/openclaw-notion-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/openclaw-notion-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-notion-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-notion-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Notion Integration",
        "body": "Connect your Notion workspace to OpenClaw for seamless knowledge management and project tracking."
      },
      {
        "title": "When to Use This Skill",
        "body": "Use Notion when the user wants to:\n\nAdd items to a database (backlog, todos, tracking)\nCreate new pages in a database or as children of existing pages\nQuery/search their Notion workspace for information\nUpdate existing pages (status, notes, properties)\nRead page content or database entries"
      },
      {
        "title": "1. Create Notion Integration",
        "body": "Go to notion.so/my-integrations\nClick New integration\nName it (e.g., \"OpenClaw\")\nSelect your workspace\nCopy the Internal Integration Token (starts with secret_)\nSave this token securely in OpenClaw config or environment: NOTION_TOKEN=secret_..."
      },
      {
        "title": "2. Share Pages with Integration",
        "body": "Important: Notion integrations have NO access by default. You must explicitly share:\n\nGo to any page or database in Notion\nClick Share → Add connections\nSelect your \"OpenClaw\" integration\nThe skill can now read/write to that specific page/database"
      },
      {
        "title": "3. Get Database/Page IDs",
        "body": "From URL:\n\nDatabase: https://www.notion.so/workspace/XXXXXXXX?v=... → ID is XXXXXXXX (32 chars)\nPage: https://www.notion.so/workspace/XXXXXXXX → ID is XXXXXXXX\n\nNote: Remove hyphens when using IDs. Use the 32-character string."
      },
      {
        "title": "Query Database",
        "body": "Retrieve entries from any database you've shared.\n\n// Using the Notion skill via exec\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${databaseId}`\n});\n\n// With filters (example: status = \"In Progress\")\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${databaseId} --filter '{\"property\":\"Status\",\"select\":{\"equals\":\"In Progress\"}}'`\n});\n\nReturns: Array of pages with properties as configured in your database."
      },
      {
        "title": "Add Database Entry",
        "body": "Create a new row in a database.\n\n// Add entry with multiple properties\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${databaseId} \\\n    --title \"My New Content Idea\" \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Idea\" } },\n      \"Platform\": { \"multi_select\": [{ \"name\": \"X/Twitter\" }] },\n      \"Tags\": { \"multi_select\": [{ \"name\": \"3D Printing\" }, { \"name\": \"AI\" }] },\n      \"Priority\": { \"select\": { \"name\": \"High\" } }\n    })}'`\n});"
      },
      {
        "title": "Get Page Content",
        "body": "Read the content of any page (including database entries).\n\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js get-page ${pageId}`\n});\n\nReturns: Page title, properties, and block content (text, headings, lists, etc.)."
      },
      {
        "title": "Update Page",
        "body": "Modify properties or append content to an existing page.\n\n// Update properties\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js update-page ${pageId} \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"In Progress\" } }\n    })}'`\n});\n\n// Append content blocks\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js append-body ${pageId} \\\n    --text \"Research Notes\" --type h2`\n});"
      },
      {
        "title": "Search Notion",
        "body": "Find pages across your shared workspace.\n\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js search \"content ideas\"`\n});"
      },
      {
        "title": "Content Pipeline (Content Creator Workflow)",
        "body": "Database Structure:\n\nTitle (title)\nStatus (select: Idea → Draft → Scheduled → Posted)\nPlatform (multi_select: X/Twitter, YouTube, MakerWorld, Blog)\nPublish Date (date)\nTags (multi_select)\nDraft Content (rich_text)\n\nOpenClaw Integration:\n\n// Research scout adds findings to Notion\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${contentDbId} \\\n    --title \"New 3D Print Technique\" \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Idea\" } },\n      \"Platform\": { \"multi_select\": [{ \"name\": \"YouTube\" }] },\n      \"Tags\": { \"multi_select\": [{ \"name\": \"3D Printing\" }] }\n    })}'`\n});\n\n// Later: Update when drafting\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js update-page ${entryId} \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Draft\" } },\n      \"Draft Content\": { \"rich_text\": [{ \"text\": { \"content\": \"Draft text here...\" } }] }\n    })}'`\n});"
      },
      {
        "title": "Project Management (Solo Entrepreneur)",
        "body": "Database Structure:\n\nName (title)\nStatus (select: Not Started → In Progress → Blocked → Done)\nPriority (select: Low → Medium → High → Critical)\nDue Date (date)\nEstimated Hours (number)\nActual Hours (number)\nLinks (url)\nNotes (rich_text)\n\nWeekly Review Integration:\n\n// Query all \"In Progress\" projects\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${projectsDbId} --filter '{\"property\":\"Status\",\"select\":{\"equals\":\"In Progress\"}}'`\n});"
      },
      {
        "title": "Customer/Quote CRM (3D Printing Business)",
        "body": "Database Structure:\n\nCustomer Name (title)\nStatus (select: Lead → Quote Sent → Ordered → Printing → Shipped)\nEmail (email)\nQuote Value (number)\nFilament Type (select)\nDue Date (date)\nShopify Order ID (rich_text)\n\nShopify Integration:\n\n// New order → create CRM entry\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${crmDbId} \\\n    --title \"${customerName}\" \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Ordered\" } },\n      \"Email\": { \"email\": customerEmail },\n      \"Shopify Order ID\": { \"rich_text\": [{ \"text\": { \"content\": orderId } }] }\n    })}'`\n});"
      },
      {
        "title": "Knowledge Base (Wiki Replacement for MEMORY.md)",
        "body": "Structure: Hub page with nested pages:\n\n🏠 Home (shared with integration)\n\nSOPs\nTroubleshooting\nDesign Patterns\nResource Links\n\nQuery for quick reference:\n\n// Search for \"stringing\" to find 3D print troubleshooting\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js search \"stringing\"`\n});"
      },
      {
        "title": "Property Types Reference",
        "body": "When creating/updating database entries, use these property value formats:\n\n// Title (always required for new pages)\n{ \"title\": [{ \"text\": { \"content\": \"Page Title\" } }] }\n\n// Select (single choice)\n{ \"select\": { \"name\": \"Option Name\" } }\n\n// Multi-select (multiple choices)\n{ \"multi_select\": [{ \"name\": \"Tag 1\" }, { \"name\": \"Tag 2\" }] }\n\n// Status (for new Status property type)\n{ \"status\": { \"name\": \"In progress\" } }\n\n// Text / Rich text\n{ \"rich_text\": [{ \"text\": { \"content\": \"Your text here\" } }] }\n\n// Number\n{ \"number\": 42 }\n\n// Date\n{ \"date\": { \"start\": \"2026-02-15\" } }\n{ \"date\": { \"start\": \"2026-02-15T10:00:00\", \"end\": \"2026-02-15T12:00:00\" } }\n\n// Checkbox\n{ \"checkbox\": true }\n\n// Email\n{ \"email\": \"user@example.com\" }\n\n// URL\n{ \"url\": \"https://example.com\" }\n\n// Phone\n{ \"phone_number\": \"+1-555-123-4567\" }\n\n// Relation (link to another database entry)\n{ \"relation\": [{ \"id\": \"related-page-id-32chars\" }] }"
      },
      {
        "title": "Security & Permissions",
        "body": "Critical Security Model:\n\n✅ Integration ONLY sees pages you explicitly share\n✅ You control access per page/database\n✅ Token stored securely in ~/.openclaw/.env (never in code)\n❌ Never commit NOTION_TOKEN to git\n❌ Integration cannot access private teamspaces or other users' private pages\n\nBest Practices:\n\nUse a dedicated integration (don't reuse personal integrations)\nShare minimum necessary pages (granular > broad)\nRotate token if compromised via Notion integration settings\nReview shared connections periodically"
      },
      {
        "title": "Environment Setup",
        "body": "Add to ~/.openclaw/.env:\n\nNOTION_TOKEN=secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\nOr set per-command:\n\nNOTION_TOKEN=secret_xxx node notion-cli.js ..."
      },
      {
        "title": "Error Handling",
        "body": "Common errors and fixes:\n\nErrorCauseFix\"API token is invalid\"Wrong token or integration deletedCheck token at notion.so/my-integrations\"object_not_found\"Page not shared with integrationShare page: Share → Add connections\"validation_error\"Property format incorrectCheck property type in database\"rate_limited\"Too many requestsAdd delay between requests"
      },
      {
        "title": "Quick Install (One Command)",
        "body": "cd ~/.agents/skills/notion\n./install.sh\n\nManual install (if above fails):\n\ncd ~/.agents/skills/notion\nnpm install\n\nThat's it! No build step required for the standalone version."
      },
      {
        "title": "Quick Test",
        "body": "# After setting NOTION_TOKEN in ~/.openclaw/.env\nnode notion-cli.js test"
      },
      {
        "title": "Smart ID Resolution",
        "body": "Reference entries by Notion auto-ID (e.g., #3) or direct UUID."
      },
      {
        "title": "By Notion ID (Recommended for Manual Use)",
        "body": "Use the number you see in your database's ID column:\n\n# Get entry #3\nnode notion-cli.js get-page '#3' DATABASE_ID\n\n# Add content to entry #3\nnode notion-cli.js append-body '#3' --database DATABASE_ID \\\n  --text \"Research notes\" --type h2\n\n# Add bullet to entry #3\nnode notion-cli.js append-body '#3' --database DATABASE_ID \\\n  --text \"Key finding\" --type bullet"
      },
      {
        "title": "By Direct UUID (For Automation)",
        "body": "# Using full UUID from Notion URL\nnode notion-cli.js get-page 2fb3e4ac...\nnode notion-cli.js append-body 2fb3e4ac... \\\n  --text \"Content\" --type paragraph\n\nAuto-detection: Starts with # = Notion ID lookup. 32-char hex = Direct UUID.\n\nPro Tip: Add an ID property (type: unique ID) to auto-number entries as #1, #2, #3..."
      },
      {
        "title": "Page Body Editing",
        "body": "Add rich content to page bodies, not just properties."
      },
      {
        "title": "Append Content Blocks",
        "body": "# Add heading\nnode notion-cli.js append-body PAGE_ID --text \"Research Summary\" --type h2\n\n# Add paragraph (default)\nnode notion-cli.js append-body PAGE_ID --text \"Detailed findings go here...\"\n\n# Add bullet list item\nnode notion-cli.js append-body PAGE_ID --text \"First key finding\" --type bullet\n\n# Add numbered list item\nnode notion-cli.js append-body PAGE_ID --text \"Step one description\" --type numbered\n\n# Add TODO checkbox\nnode notion-cli.js append-body PAGE_ID --text \"Create video script\" --type todo\n\n# Add quote\nnode notion-cli.js append-body PAGE_ID --text \"Important quote from source\" --type quote\n\n# Add code block\nnode notion-cli.js append-body PAGE_ID --text \"const result = optimizeSupports();\" --type code --lang javascript"
      },
      {
        "title": "Supported Block Types",
        "body": "TypeDescriptionExample UseparagraphRegular text (default)Descriptions, explanationsh1, h2, h3HeadingsSection organizationbulletBulleted listKey findings, featuresnumberedNumbered listStep-by-step instructionstodoCheckbox itemAction items, tasksquoteBlockquoteSource citationscodeCode blockSnippets, commandsdividerHorizontal lineSection separation"
      },
      {
        "title": "Get Page with Body Content",
        "body": "# Get full page including formatted body\nnode notion-cli.js get-page PAGE_ID\n\nReturns:\n\nPage properties\nFormatted body blocks (type + content preview)\nBlock count"
      },
      {
        "title": "Advanced: Raw JSON Blocks",
        "body": "For complex layouts, use raw Notion block JSON:\n\nnode notion-cli.js append-body PAGE_ID --blocks '[\n  {\"object\":\"block\",\"type\":\"heading_2\",\"heading_2\":{\"rich_text\":[{\"text\":{\"content\":\"Research Notes\"}}]}},\n  {\"object\":\"block\",\"type\":\"bulleted_list_item\",\"bulleted_list_item\":{\"rich_text\":[{\"text\":{\"content\":\"Finding 1\"}}]}},\n  {\"object\":\"block\",\"type\":\"code\",\"code\":{\"rich_text\":[{\"text\":{\"content\":\"console.log(1)\"}}],\"language\":\"javascript\"}}\n]'"
      },
      {
        "title": "Advanced: Webhook Sync",
        "body": "For bidirectional sync (Notion changes → OpenClaw):\n\nSet up Notion webhook integration (requires Notion partner account)\nConfigure webhook endpoint to your OpenClaw Gateway\nSkill processes incoming webhooks and updates memory files\n\nSee references/webhooks.md for implementation details.\n\nNeed help? Check your Notion integration settings at https://www.notion.so/my-integrations"
      },
      {
        "title": "Quick Setup",
        "body": "# 1. Install\ncd ~/.agents/skills/notion\nnpm install\n\n# 2. Configure token\necho \"NOTION_TOKEN=secret_xxxxxxxxxx\" >> ~/.openclaw/.env\n\n# 3. Test connection\nnode notion-cli.js test"
      },
      {
        "title": "From OpenClaw Agent",
        "body": "// Query database\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database YOUR_DB_ID`\n});\n\n// Add entry\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry YOUR_DB_ID \\\\\n    --title \"New Content Idea\" \\\\\n    --properties '{\"Status\":{\"select\":{\"name\":\"Idea\"}}}'`\n});\n\n// Search\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js search \"tree support\"`\n});"
      },
      {
        "title": "Cron Job Usage",
        "body": "Update your Research Topic Scout to push to Notion:\n\n\"message\": \"Research trends and add to Notion: \n  node ~/.agents/skills/notion/notion-cli.js add-entry DB_ID \n    --title '<title>' \n    --properties '{...,\\\"Platform\\\":{\\\"multi_select\\\":[{\\\"name\\\":\\\"X\\\"}]}}'\""
      }
    ],
    "body": "Notion Integration\n\nConnect your Notion workspace to OpenClaw for seamless knowledge management and project tracking.\n\nWhen to Use This Skill\n\nUse Notion when the user wants to:\n\nAdd items to a database (backlog, todos, tracking)\nCreate new pages in a database or as children of existing pages\nQuery/search their Notion workspace for information\nUpdate existing pages (status, notes, properties)\nRead page content or database entries\nSetup\n1. Create Notion Integration\nGo to notion.so/my-integrations\nClick New integration\nName it (e.g., \"OpenClaw\")\nSelect your workspace\nCopy the Internal Integration Token (starts with secret_)\nSave this token securely in OpenClaw config or environment: NOTION_TOKEN=secret_...\n2. Share Pages with Integration\n\nImportant: Notion integrations have NO access by default. You must explicitly share:\n\nGo to any page or database in Notion\nClick Share → Add connections\nSelect your \"OpenClaw\" integration\nThe skill can now read/write to that specific page/database\n3. Get Database/Page IDs\n\nFrom URL:\n\nDatabase: https://www.notion.so/workspace/XXXXXXXX?v=... → ID is XXXXXXXX (32 chars)\nPage: https://www.notion.so/workspace/XXXXXXXX → ID is XXXXXXXX\n\nNote: Remove hyphens when using IDs. Use the 32-character string.\n\nCore Operations\nQuery Database\n\nRetrieve entries from any database you've shared.\n\n// Using the Notion skill via exec\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${databaseId}`\n});\n\n// With filters (example: status = \"In Progress\")\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${databaseId} --filter '{\"property\":\"Status\",\"select\":{\"equals\":\"In Progress\"}}'`\n});\n\n\nReturns: Array of pages with properties as configured in your database.\n\nAdd Database Entry\n\nCreate a new row in a database.\n\n// Add entry with multiple properties\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${databaseId} \\\n    --title \"My New Content Idea\" \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Idea\" } },\n      \"Platform\": { \"multi_select\": [{ \"name\": \"X/Twitter\" }] },\n      \"Tags\": { \"multi_select\": [{ \"name\": \"3D Printing\" }, { \"name\": \"AI\" }] },\n      \"Priority\": { \"select\": { \"name\": \"High\" } }\n    })}'`\n});\n\nGet Page Content\n\nRead the content of any page (including database entries).\n\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js get-page ${pageId}`\n});\n\n\nReturns: Page title, properties, and block content (text, headings, lists, etc.).\n\nUpdate Page\n\nModify properties or append content to an existing page.\n\n// Update properties\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js update-page ${pageId} \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"In Progress\" } }\n    })}'`\n});\n\n// Append content blocks\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js append-body ${pageId} \\\n    --text \"Research Notes\" --type h2`\n});\n\nSearch Notion\n\nFind pages across your shared workspace.\n\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js search \"content ideas\"`\n});\n\nCommon Use Cases\nContent Pipeline (Content Creator Workflow)\n\nDatabase Structure:\n\nTitle (title)\nStatus (select: Idea → Draft → Scheduled → Posted)\nPlatform (multi_select: X/Twitter, YouTube, MakerWorld, Blog)\nPublish Date (date)\nTags (multi_select)\nDraft Content (rich_text)\n\nOpenClaw Integration:\n\n// Research scout adds findings to Notion\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${contentDbId} \\\n    --title \"New 3D Print Technique\" \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Idea\" } },\n      \"Platform\": { \"multi_select\": [{ \"name\": \"YouTube\" }] },\n      \"Tags\": { \"multi_select\": [{ \"name\": \"3D Printing\" }] }\n    })}'`\n});\n\n// Later: Update when drafting\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js update-page ${entryId} \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Draft\" } },\n      \"Draft Content\": { \"rich_text\": [{ \"text\": { \"content\": \"Draft text here...\" } }] }\n    })}'`\n});\n\nProject Management (Solo Entrepreneur)\n\nDatabase Structure:\n\nName (title)\nStatus (select: Not Started → In Progress → Blocked → Done)\nPriority (select: Low → Medium → High → Critical)\nDue Date (date)\nEstimated Hours (number)\nActual Hours (number)\nLinks (url)\nNotes (rich_text)\n\nWeekly Review Integration:\n\n// Query all \"In Progress\" projects\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database ${projectsDbId} --filter '{\"property\":\"Status\",\"select\":{\"equals\":\"In Progress\"}}'`\n});\n\nCustomer/Quote CRM (3D Printing Business)\n\nDatabase Structure:\n\nCustomer Name (title)\nStatus (select: Lead → Quote Sent → Ordered → Printing → Shipped)\nEmail (email)\nQuote Value (number)\nFilament Type (select)\nDue Date (date)\nShopify Order ID (rich_text)\n\nShopify Integration:\n\n// New order → create CRM entry\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry ${crmDbId} \\\n    --title \"${customerName}\" \\\n    --properties '${JSON.stringify({\n      \"Status\": { \"select\": { \"name\": \"Ordered\" } },\n      \"Email\": { \"email\": customerEmail },\n      \"Shopify Order ID\": { \"rich_text\": [{ \"text\": { \"content\": orderId } }] }\n    })}'`\n});\n\nKnowledge Base (Wiki Replacement for MEMORY.md)\n\nStructure: Hub page with nested pages:\n\n🏠 Home (shared with integration)\nSOPs\nTroubleshooting\nDesign Patterns\nResource Links\n\nQuery for quick reference:\n\n// Search for \"stringing\" to find 3D print troubleshooting\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js search \"stringing\"`\n});\n\nProperty Types Reference\n\nWhen creating/updating database entries, use these property value formats:\n\n// Title (always required for new pages)\n{ \"title\": [{ \"text\": { \"content\": \"Page Title\" } }] }\n\n// Select (single choice)\n{ \"select\": { \"name\": \"Option Name\" } }\n\n// Multi-select (multiple choices)\n{ \"multi_select\": [{ \"name\": \"Tag 1\" }, { \"name\": \"Tag 2\" }] }\n\n// Status (for new Status property type)\n{ \"status\": { \"name\": \"In progress\" } }\n\n// Text / Rich text\n{ \"rich_text\": [{ \"text\": { \"content\": \"Your text here\" } }] }\n\n// Number\n{ \"number\": 42 }\n\n// Date\n{ \"date\": { \"start\": \"2026-02-15\" } }\n{ \"date\": { \"start\": \"2026-02-15T10:00:00\", \"end\": \"2026-02-15T12:00:00\" } }\n\n// Checkbox\n{ \"checkbox\": true }\n\n// Email\n{ \"email\": \"user@example.com\" }\n\n// URL\n{ \"url\": \"https://example.com\" }\n\n// Phone\n{ \"phone_number\": \"+1-555-123-4567\" }\n\n// Relation (link to another database entry)\n{ \"relation\": [{ \"id\": \"related-page-id-32chars\" }] }\n\nSecurity & Permissions\n\nCritical Security Model:\n\n✅ Integration ONLY sees pages you explicitly share\n✅ You control access per page/database\n✅ Token stored securely in ~/.openclaw/.env (never in code)\n❌ Never commit NOTION_TOKEN to git\n❌ Integration cannot access private teamspaces or other users' private pages\n\nBest Practices:\n\nUse a dedicated integration (don't reuse personal integrations)\nShare minimum necessary pages (granular > broad)\nRotate token if compromised via Notion integration settings\nReview shared connections periodically\nEnvironment Setup\n\nAdd to ~/.openclaw/.env:\n\nNOTION_TOKEN=secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\nOr set per-command:\n\nNOTION_TOKEN=secret_xxx node notion-cli.js ...\n\nError Handling\n\nCommon errors and fixes:\n\nError\tCause\tFix\n\"API token is invalid\"\tWrong token or integration deleted\tCheck token at notion.so/my-integrations\n\"object_not_found\"\tPage not shared with integration\tShare page: Share → Add connections\n\"validation_error\"\tProperty format incorrect\tCheck property type in database\n\"rate_limited\"\tToo many requests\tAdd delay between requests\nQuick Install (One Command)\ncd ~/.agents/skills/notion\n./install.sh\n\n\nManual install (if above fails):\n\ncd ~/.agents/skills/notion\nnpm install\n\n\nThat's it! No build step required for the standalone version.\n\nQuick Test\n# After setting NOTION_TOKEN in ~/.openclaw/.env\nnode notion-cli.js test\n\nSmart ID Resolution\n\nReference entries by Notion auto-ID (e.g., #3) or direct UUID.\n\nBy Notion ID (Recommended for Manual Use)\n\nUse the number you see in your database's ID column:\n\n# Get entry #3\nnode notion-cli.js get-page '#3' DATABASE_ID\n\n# Add content to entry #3\nnode notion-cli.js append-body '#3' --database DATABASE_ID \\\n  --text \"Research notes\" --type h2\n\n# Add bullet to entry #3\nnode notion-cli.js append-body '#3' --database DATABASE_ID \\\n  --text \"Key finding\" --type bullet\n\nBy Direct UUID (For Automation)\n# Using full UUID from Notion URL\nnode notion-cli.js get-page 2fb3e4ac...\nnode notion-cli.js append-body 2fb3e4ac... \\\n  --text \"Content\" --type paragraph\n\n\nAuto-detection: Starts with # = Notion ID lookup. 32-char hex = Direct UUID.\n\nPro Tip: Add an ID property (type: unique ID) to auto-number entries as #1, #2, #3...\n\nPage Body Editing\n\nAdd rich content to page bodies, not just properties.\n\nAppend Content Blocks\n# Add heading\nnode notion-cli.js append-body PAGE_ID --text \"Research Summary\" --type h2\n\n# Add paragraph (default)\nnode notion-cli.js append-body PAGE_ID --text \"Detailed findings go here...\"\n\n# Add bullet list item\nnode notion-cli.js append-body PAGE_ID --text \"First key finding\" --type bullet\n\n# Add numbered list item\nnode notion-cli.js append-body PAGE_ID --text \"Step one description\" --type numbered\n\n# Add TODO checkbox\nnode notion-cli.js append-body PAGE_ID --text \"Create video script\" --type todo\n\n# Add quote\nnode notion-cli.js append-body PAGE_ID --text \"Important quote from source\" --type quote\n\n# Add code block\nnode notion-cli.js append-body PAGE_ID --text \"const result = optimizeSupports();\" --type code --lang javascript\n\nSupported Block Types\nType\tDescription\tExample Use\nparagraph\tRegular text (default)\tDescriptions, explanations\nh1, h2, h3\tHeadings\tSection organization\nbullet\tBulleted list\tKey findings, features\nnumbered\tNumbered list\tStep-by-step instructions\ntodo\tCheckbox item\tAction items, tasks\nquote\tBlockquote\tSource citations\ncode\tCode block\tSnippets, commands\ndivider\tHorizontal line\tSection separation\nGet Page with Body Content\n# Get full page including formatted body\nnode notion-cli.js get-page PAGE_ID\n\n\nReturns:\n\nPage properties\nFormatted body blocks (type + content preview)\nBlock count\nAdvanced: Raw JSON Blocks\n\nFor complex layouts, use raw Notion block JSON:\n\nnode notion-cli.js append-body PAGE_ID --blocks '[\n  {\"object\":\"block\",\"type\":\"heading_2\",\"heading_2\":{\"rich_text\":[{\"text\":{\"content\":\"Research Notes\"}}]}},\n  {\"object\":\"block\",\"type\":\"bulleted_list_item\",\"bulleted_list_item\":{\"rich_text\":[{\"text\":{\"content\":\"Finding 1\"}}]}},\n  {\"object\":\"block\",\"type\":\"code\",\"code\":{\"rich_text\":[{\"text\":{\"content\":\"console.log(1)\"}}],\"language\":\"javascript\"}}\n]'\n\nAdvanced: Webhook Sync\n\nFor bidirectional sync (Notion changes → OpenClaw):\n\nSet up Notion webhook integration (requires Notion partner account)\nConfigure webhook endpoint to your OpenClaw Gateway\nSkill processes incoming webhooks and updates memory files\n\nSee references/webhooks.md for implementation details.\n\nNeed help? Check your Notion integration settings at https://www.notion.so/my-integrations\n\nUsing in OpenClaw\nQuick Setup\n# 1. Install\ncd ~/.agents/skills/notion\nnpm install\n\n# 2. Configure token\necho \"NOTION_TOKEN=secret_xxxxxxxxxx\" >> ~/.openclaw/.env\n\n# 3. Test connection\nnode notion-cli.js test\n\nFrom OpenClaw Agent\n// Query database\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js query-database YOUR_DB_ID`\n});\n\n// Add entry\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js add-entry YOUR_DB_ID \\\\\n    --title \"New Content Idea\" \\\\\n    --properties '{\"Status\":{\"select\":{\"name\":\"Idea\"}}}'`\n});\n\n// Search\nawait exec({\n  command: `node ~/.agents/skills/notion/notion-cli.js search \"tree support\"`\n});\n\nCron Job Usage\n\nUpdate your Research Topic Scout to push to Notion:\n\n\"message\": \"Research trends and add to Notion: \n  node ~/.agents/skills/notion/notion-cli.js add-entry DB_ID \n    --title '<title>' \n    --properties '{...,\\\"Platform\\\":{\\\"multi_select\\\":[{\\\"name\\\":\\\"X\\\"}]}}'\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Moikapy/openclaw-notion-skill",
    "publisherUrl": "https://clawhub.ai/Moikapy/openclaw-notion-skill",
    "owner": "Moikapy",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openclaw-notion-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/openclaw-notion-skill",
    "agentUrl": "https://openagent3.xyz/skills/openclaw-notion-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-notion-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-notion-skill/agent.md"
  }
}