- The Notion skill uses an Internal Integration Token — create one at notion.so/my-integrations and share each database with it
- Database operations (create, query, update items) and page operations (create, read, update pages) are distinct — know which you need before building
- query_database supports full filter and sort objects, giving agents precise data retrieval without reading the entire database
- The most powerful workflows combine OpenClaw triggers (email, webhook, schedule) with Notion writes — no human in the loop
- Always share databases explicitly with your integration — missing this step is the #1 reason the skill returns empty results
Builders who have deeply connected OpenClaw to Notion report eliminating entire categories of manual work. Meeting notes automatically filed to the right database. Project status updates written by the agent after a Slack message. CRM entries created from email conversations without touching Notion once. The integration depth here is real — this isn't a surface-level read-only connection.
Why This Integration Changes Your Workflow
Notion stores structured data — databases with typed properties — alongside freeform documents. That combination is what makes it uniquely powerful as an agent backend. Most tools are one or the other. Notion is both, which means your OpenClaw agent can read a database of client contacts, create a meeting notes page using that contact's details, and update the contact's "last contacted" date — all in a single agent run.
The Notion API, released publicly in 2021 and significantly expanded since, gives full programmatic access to databases and pages. As of early 2025, it supports creating, reading, updating, and querying database entries with complex filter logic. OpenClaw's Notion skill wraps this API into agent-ready actions your agents call directly from their tool set.
Don't try to connect your entire Notion workspace on day one. Pick one database your team updates manually multiple times per day — a task tracker, a CRM, a content calendar. Automate that one workflow completely before expanding. The ROI is immediate and the scope stays manageable.
Getting Your Notion API Token
Notion uses Internal Integration Tokens for server-to-server API access. This is the correct token type for OpenClaw — not OAuth, which is designed for user-facing app flows.
- Go to notion.so/my-integrations and click "New integration"
- Name it (e.g., "OpenClaw Agent"), select your workspace, and click Submit
- Copy the Internal Integration Token — it starts with
secret_ - In Notion, open each database you want OpenClaw to access, click the ··· menu, then "Add connections", and select your integration
That last step is critical. The integration token grants API access, but Notion's permission model requires you to explicitly share each database or page with the integration. Skip this step and every API call returns empty results with no error — which is deeply confusing if you don't know to expect it.
Skill Configuration in OpenClaw
Add the Notion skill to your agent's skill block in the agent config file. The minimum required field is the API token.
skills:
- name: notion
token: "${NOTION_TOKEN}"
default_database_id: "your-database-id-here"
version: "2022-06-28"
Store the token as an environment variable — never hardcode it. The default_database_id is optional but useful when your agent primarily works with one database. You can always specify a different database ID at call time. The version field pins the Notion API version; use 2022-06-28 which is the stable version as of early 2025.
The database ID is the 32-character alphanumeric string in the Notion page URL, not the full URL. Extract it by opening the database in browser: the URL format is notion.so/[workspace]/[database-id]?v=[view-id]. Copy only the 32 characters before the question mark.
Database Operations vs Page Operations
Understanding this distinction saves hours of confusion. Notion has two object types your agent will work with: databases and pages.
| Operation | Use Case | Key Parameter |
|---|---|---|
| query_database | Filter and retrieve database entries | database_id, filter, sorts |
| create_database_item | Add a new row to a database | database_id, properties |
| update_page | Update properties on any page or database item | page_id, properties |
| create_page | Create a standalone page or database entry | parent, properties, children |
| get_page | Read a page's properties and content | page_id |
| append_block | Add content blocks to an existing page | block_id, children |
Database items are pages that live inside a database — they have structured properties like Status (select), Due Date (date), Assignee (person), and Priority (select). Standalone pages are freeform documents. When you create_database_item, you're creating a new row in the database grid view. When you create_page with a page as the parent, you're creating a nested document.
The agent needs to know which operation to use. Be explicit in your agent prompts: "Create a new item in the Tasks database" vs "Create a new page inside the Meeting Notes folder."
Real Workflow Examples That Eliminate Manual Work
Here's where the integration pays off. These are workflows we've seen consistently used by teams who have fully automated their Notion updates.
Workflow 1: Email-to-CRM Entry
Trigger: New email arrives in a monitored inbox. Agent reads the email, extracts company name, contact name, and key discussion points, then creates a new row in the CRM database with those properties pre-filled and the email body appended as a page block. The sales team opens Notion and the entry is already there.
Workflow 2: Standup Aggregator
Trigger: Scheduled daily at 9am. Agent queries the Tasks database for all items with Status = "In Progress" assigned to the current sprint. Generates a standup summary and appends it to the team's daily standup page. The team reads one page instead of querying multiple database views.
Workflow 3: Content Calendar Filler
Trigger: Content calendar database has items with Status = "Ideas Needed". Agent queries for those items, generates content ideas based on the topic and target audience properties, then updates each item with the idea text and changes Status to "Ready to Write." Writers open the calendar and the briefs are ready.
The pattern across all three: a trigger (schedule, email, webhook) → agent reads from some source → agent writes structured data to Notion. No human in the loop. The mistake most teams make is building the agent to do one of these steps instead of all three.
Common Mistakes That Break the Integration
- Not sharing databases with the integration — the API returns empty results with a 200 status, making this hard to diagnose. Always verify database sharing first when debugging.
- Using page URLs as IDs — database and page IDs are 32-character strings extracted from the URL, not the full URL. Strip the workspace prefix and query parameters.
- Mismatching property types — sending a plain string to a Select property fails. Match the property type exactly: Select needs
{"select": {"name": "value"}}, not a plain string. - Exceeding block limits — Notion API returns a maximum of 100 blocks per request. For long pages, use pagination with the
start_cursorparameter or useappend_blockin batches. - Not handling relation properties correctly — relation fields require an array of page ID objects, not just IDs. The format is
{"relation": [{"id": "page-id"}]}.
Frequently Asked Questions
Does the OpenClaw Notion integration require a paid Notion plan?
The Notion API works on all plans including the free tier, but shared workspaces and advanced permission features require Notion Plus or higher. The skill functions on any plan, but team workflows benefit from paid workspace features.
How do I get a Notion integration token for OpenClaw?
Go to notion.so/my-integrations, create a new integration, copy the Internal Integration Token, and add it to your OpenClaw skill config. Then share each database or page you want the agent to access with the integration from Notion's share menu.
Can OpenClaw create new Notion database entries automatically?
Yes. The Notion skill exposes create_database_item and create_page actions. Agents can create fully populated entries with all property types — text, select, date, relation, and checkbox fields — from a single instruction or trigger.
What is the difference between creating a page and a database item in Notion?
Pages are standalone documents inside a workspace or page. Database items are pages inside a database with structured properties. Use create_page for freeform content and create_database_item for structured, filterable records with typed property fields.
Can my OpenClaw agent search and filter Notion databases?
Yes. The query_database action supports filter objects on any property — status, date range, assignee, tags — and sort parameters. It returns full page objects the agent can read, update, or pass to downstream actions in the workflow.
How do I keep Notion updated automatically without manual input?
Build a recurring agent workflow triggered on a schedule or external event. The agent reads data from another source, maps values to Notion properties, and calls update_page to sync. Once configured, no manual Notion work is required.
M. Kim specializes in connecting AI agent systems to productivity tools. Has built OpenClaw-Notion integrations for marketing teams, operations departments, and product organizations — automating everything from content calendars to OKR tracking without a single line of custom code.