Notion logo

Integrate Notion with your AI CRM

Notion centralizes notes, docs, wikis, and tasks in a unified workspace, letting teams build custom workflows for collaboration and knowledge management

Explore Triggers and Actions

Comment Created

Triggers when a new comment is created in Notion. Optional `page_id` filter scopes to comments on a specific page. When omitted, fires for any new comment in the workspace the integration has access to. Requires the 'Read comments' capability on the Notion integration. If a connection was authorized before that capability was enabled, the user must re-authorize the connection for comment events to flow.

TriggerwebhookTry it

Data Source Created

Triggers when a new Notion data source is created. Fires workspace-wide. The payload's `data.parent` carries the data source's tree parent (typically the teamspace) for downstream filtering. A single template-based database creation can fire multiple `data_source.created` events at once — one per data source the template instantiates.

TriggerwebhookTry it

Data Source Schema Updated

Triggers when a Notion data source's schema is updated. Fires on column add / remove / rename. Payload includes `data.updated_properties: [{id, name, action}]` so consumers can discriminate the kind of change downstream. Optional `data_source_id` filter scopes to schema changes on a single data source. When omitted, fires for any schema change in the workspace the integration has access to. Note: adding a column also fires `page.properties_updated` once per existing row in the data source. Customers wanting a single structural-change signal should use this trigger.

TriggerwebhookTry it

Database Created

Triggers when a new Notion database (the container) is created. A database is the post-2025-09-03 container that holds one or more data sources. This trigger fires for the container's creation event (`database.created`), distinct from `NOTION_DATASOURCE_CREATED` which fires when a new data source is added to an existing database. Most customers calling Notion's `POST /v1/databases` (the legacy API) or creating a database via the Notion UI will see this event. Adding a new data source to an existing database fires `data_source.created` instead — use `NOTION_DATASOURCE_CREATED` for that. Notion's payload puts `entity.type: "block"` (the container is a `child_database` block in the content tree) and `entity.id` is the database id.

TriggerwebhookTry it

Page Content Updated

Triggers when the body content of a Notion page is updated. Customer optionally scopes with at most one of: - data_source_id: any row in this data source - page_id: this specific page - parent_page_id: any page whose immediate parent is this page With none set, fires for any page content edit in the workspace the integration has access to. Notion aggregates content edits within a short window (~60s typical).

TriggerwebhookTry it

Page Created

Triggers when a new Notion page is created. Customer optionally scopes with at most one of: - data_source_id: new row in this data source - parent_page_id: new sub-page under this page (immediate parent only) With neither set, fires for any new page in the workspace the integration has access to. Notion sends ~60s aggregation latency on most events.

TriggerwebhookTry it

Page Properties Updated

Triggers when properties of a Notion page are updated. Customer optionally scopes with at most one of: - data_source_id: any row in this data source - page_id: this specific page - parent_page_id: any page whose immediate parent is this page With none set, fires for any property change in the workspace the integration has access to. Adding a column to a data source fires this trigger once per existing row. Customers can branch on `data.updated_properties` (array of property IDs) to filter downstream.

TriggerwebhookTry it

View Created

Triggers when a new Notion view is created. Fires workspace-wide. The payload includes `data.view_type` (`table`, `board`, `gallery`, `calendar`, `list`, `timeline`, `gantt`) and `data.parent` pointing at the view's tree parent (typically the teamspace), so customers can filter downstream.

TriggerwebhookTry it

Add multiple content blocks (bulk, user-friendly)

Bulk-add content blocks as children of a Notion page or supported parent block, optionally after an existing child. Accepts simplified or full block formats and parses markdown in simplified text; long text handling varies by format, and simplified text segments may be truncated.

ActionTry it

Add single content block to Notion page (Deprecated)

Adds content to a Notion page or parent block using simplified content or a full block object, optionally after an existing child. Notion limits rich-text content to 2,000 characters per text object; the integration needs access and insert-content capability. DEPRECATED: Use add_multiple_page_content for bulk operations.

ActionTry it

Append code blocks (code, quote, equation)

Append code and technical blocks (code, quote, equation) to a Notion page. Use for: - Code snippets and programming examples (code) - Citations and highlighted quotes (quote) - Mathematical formulas and equations (equation) Supported block types: - code: Code with syntax highlighting (70+ languages including Python, JavaScript, Go, Rust, etc.) - quote: Block quotes for citations - equation: LaTeX/KaTeX mathematical expressions ⚠️ Code content is limited to 2000 characters per text.content field. For longer code, split into multiple code blocks. For other block types, use specialized actions: - append_text_blocks: paragraphs, headings, lists - append_task_blocks: to-do, toggle, callout - append_media_blocks: image, video, audio, files - append_layout_blocks: divider, columns, TOC - append_table_blocks: tables

ActionTry it

Append layout blocks (divider, TOC, columns)

Append layout blocks (divider, TOC, breadcrumb, columns) to a Notion page. Supported types: - divider: Horizontal line separator - table_of_contents: Auto-generated from headings - breadcrumb: Page hierarchy navigation - column_list: Multi-column layout (requires 2+ columns, each with 1+ child block) For multi-column layouts, create column_list with column children in one request. Each column must contain at least 1 child block. For other blocks, use: append_text_blocks, append_task_blocks, append_code_blocks, append_media_blocks, or append_table_blocks.

ActionTry it

Append media blocks (image, video, audio, files)

Append media blocks (image, video, audio, file, pdf, embed, bookmark) to a Notion page. Use for: - Images and screenshots (image) - YouTube/Vimeo videos or direct video URLs (video) - Audio files and podcasts (audio) - File downloads (file) - PDF documents (pdf) - Embedded content from Twitter, Figma, CodePen, etc. (embed) - Link previews with metadata (bookmark) All media blocks require external URLs. For other block types, use specialized actions: - append_text_blocks: paragraphs, headings, lists - append_task_blocks: to-do, toggle, callout - append_code_blocks: code, quote, equation - append_layout_blocks: divider, columns, TOC - append_table_blocks: tables

ActionTry it

Append raw Notion blocks (advanced API)

Appends raw Notion blocks to a parent page or block, at the end or after an existing child. Oversized text in supported top-level text blocks is split into rich-text items within the same block. DEPRECATED: Use NOTION_APPEND_TEXT_BLOCKS, NOTION_APPEND_TASK_BLOCKS, NOTION_APPEND_CODE_BLOCKS, NOTION_APPEND_MEDIA_BLOCKS, NOTION_APPEND_LAYOUT_BLOCKS, or NOTION_APPEND_TABLE_BLOCKS instead.

ActionTry it

Append table blocks

Append table blocks to a Notion page. Use for structured tabular data like spreadsheets, comparison charts, and status trackers. Example: { "table_width": 3, "has_column_header": true, "rows": [ {"cells": [[{"type": "text", "text": {"content": "Col1"}}], [...], [...]]} ] } ⚠️ Cell content limited to 2000 chars per text.content field.

ActionTry it

Append task blocks (to-do, toggle, callout)

Append to-do, toggle, and callout blocks to a Notion page or block that supports children. Text content is limited to 2,000 characters per text item, with at most 100 blocks per request.

ActionTry it

Append text blocks (paragraphs, headings, lists)

Append text blocks (paragraphs, headings, lists) to a Notion page. This is the most commonly used action for adding content to Notion. Use for: documentation, notes, articles, outlines, lists. Supported block types: - paragraph: Regular text - heading_1, heading_2, heading_3: Section headers - bulleted_list_item: Bullet points - numbered_list_item: Numbered lists ⚠️ Text content is limited to 2000 characters per text.content field. For other block types, use specialized actions: - append_task_blocks: to-do, toggle, callout - append_code_blocks: code, quote, equation - append_media_blocks: image, video, audio, files - append_layout_blocks: divider, columns, TOC - append_table_blocks: tables

ActionTry it

Archive Notion Page

Archives (moves to trash) or unarchives (restores from trash) a specified Notion page. Limitation: Workspace-level pages (top-level pages with no parent page or database) cannot be archived via the API and must be archived manually in the Notion UI.

ActionTry it

Create comment

Adds a comment to a Notion page (via `parent_page_id`) OR to an existing discussion thread (via `discussion_id`); cannot create new discussion threads on specific blocks (inline comments).

ActionTry it

Create Notion Database

Creates a new Notion database as a subpage under a specified parent page with a defined properties schema. IMPORTANT NOTES: - The parent page MUST be shared with your integration, otherwise you'll get a 404 error - If you encounter conflict errors (409), retry the request as Notion may experience temporary save conflicts - For relation properties, you MUST provide the database_id of the related database - Parent ID must be a valid UUID format (with or without hyphens), not a template variable Use this action exclusively for creating new databases.

ActionTry it

Create Notion file upload

Creates a Notion FileUpload object for a direct, multipart, or external URL upload. Direct uploads require subsequent steps to send file contents and attach the uploaded file.

ActionTry it

Create Notion page

Creates a new page in a Notion workspace under a specified parent page or database. Supports creating pages with markdown content using the native markdown parameter, or as an empty page that can be populated later. PREREQUISITES: - Parent page/database must exist and be accessible in your Notion workspace - Use search_pages or list_databases first to obtain valid parent IDs LIMITATIONS: - Cannot create root-level pages (must have a parent) - May encounter conflicts if creating pages too quickly - Title-based parent search is less reliable than using UUIDs - The markdown parameter is mutually exclusive with children/content parameters

ActionTry it

Create Notion view

Create a Notion view.

ActionTry it

Create Notion view query

Create a Notion view query and return the first page of page references.

ActionTry it

Delete a block

Archives a Notion block, page, or database by ID, moving it to Trash for possible later restoration. The connection requires update content capability; an archived ancestor may need to be restored before a descendant can be archived.

ActionTry it

Delete Notion view

Delete a Notion view.

ActionTry it

Delete Notion view query

Delete a cached Notion view query.

ActionTry it

Duplicate page

Duplicates a Notion page under a specified parent page or database, copying supported content and writable properties. Page parents receive only the title property; some blocks and properties are skipped, block retrieval may be incomplete, and failure can leave a partial copy.

ActionTry it

Fetch All Notion Block Contents

Fetches child blocks of a Notion block or page across result pages, with optional recursive expansion. Recursive results may be partial due to depth or block limits or inaccessible nested blocks; limit information is returned when recursion is used.

ActionTry it

Fetch comments

Fetches a page of unresolved comments for a specified Notion block or page ID. The block or page must be shared with the integration, which must have Read comments capability enabled.

ActionTry it

Fetch Database

Fetches a Notion database's structural metadata (properties, title, etc.) via its `database_id`, not the data entries; `database_id` must reference an existing database.

ActionTry it

Fetch database row

Retrieves a Notion database row's properties and metadata; use fetch_block_contents for page content blocks.

ActionTry it

Fetch Notion Block Children

Retrieves a paginated list of direct child blocks for a Notion block or page. Use returned block IDs to access nested content; for an unsupported block-type error, the result is an empty list with an explanatory message.

ActionTry it

Fetch Notion block metadata

Fetches metadata for a Notion block (including pages, which are special blocks) using its UUID. Returns block type, properties, and basic info but not child content. Prerequisites: 1) Block/page must be shared with your integration, 2) Use valid block_id from API responses (not URLs). For child blocks, use fetch_block_contents instead. Common 404 errors mean the block isn't accessible to your integration.

ActionTry it

Fetch Notion Data

Search accessible Notion pages and/or databases by title or list them without a query. Returns one page of results with simplified IDs, titles and types, plus a cursor when more results are available; simplified titles use only the first rich-text segment.

ActionTry it

Get About Me (Deprecated)

DEPRECATED: Use GetAboutUser instead. Retrieves the User object for the bot associated with the current Notion integration token, typically to obtain the bot's user ID for other API operations.

ActionTry it

Get about user

Retrieves detailed information about a specific Notion user, such as their name, avatar, and email, based on their unique user ID.

ActionTry it

Get Notion view query results

Get a page of results from a cached Notion view query.

ActionTry it

Get page markdown

Retrieve a Notion page as Notion-flavored Markdown in a single API call without recursive block-children fetching. The response indicates whether content was truncated and identifies blocks that could not be rendered.

ActionTry it

Get page property

Call this to get a specific property from a Notion page when you have a valid `page_id` and `property_id`; handles pagination for properties returning multiple items.

ActionTry it

Get plugin

Get a temporary download URL for one Notion Agent Skills plugin.

ActionTry it

Insert row database

Creates a page (row) in a specified Notion database with optional properties and child blocks. The database must be shared with the integration and cannot have multiple data sources; long child-block text segments may be truncated, and additional blocks are appended after page creation.

ActionTry it

Insert Row From Natural Language

Creates a new row (page) in a Notion database from a natural language description. Fetches the database schema at runtime, uses an LLM to generate the correctly-formatted property payload, and creates the page.

ActionTry it

List data source templates

Lists a page of accessible templates for a Notion data source, including their IDs and names. Use the returned cursor to retrieve further pages.

ActionTry it

List Notion file uploads

Tool to retrieve file uploads for the current bot integration, sorted by most recent first. Use when you need to list all file uploads or paginate through file upload history.

ActionTry it

List Notion views

List Notion views for a database or data source.

ActionTry it

List plugins

List one cursor page of Agent Skills plugins shared with the connected Notion integration. Follow next_cursor until has_more is false.

ActionTry it

List users

Retrieves a paginated list of users (excluding guests) from the Notion workspace; the number of users returned per page may be less than the requested `page_size`.

ActionTry it

Move Page

Moves a Notion page to a new parent page or database data source. For a database destination, provide the data source ID.

ActionTry it

Query data source

Query a Notion data source for pages or child data sources using filters, sorts, and optional property selection. Results support cursor pagination, with a requested page size of 1 to 100.

ActionTry it

Query database

Query a shared Notion database for paginated entries, with sorting by database properties or page timestamps. Supply a database UUID and use the returned cursor to retrieve further results.

ActionTry it

Query database with filter

Tool to query a Notion database with server-side filtering, sorting, and pagination. Use when you need to retrieve a subset of rows by property, date, status, or other conditions.

ActionTry it

Replace page content (with backup)

Replaces a page's child blocks by optionally backing up current content, archiving existing children, and appending new children in batches. The workflow is not atomic and failures can leave partial changes; backups omit some block types and nested content.

ActionTry it

Retrieve Comment

Tool to retrieve a specific comment by its ID. Use when you have a comment ID and need to fetch its details.

ActionTry it

Retrieve Database Property

Tool to retrieve a specific property object of a Notion database. Use when you need to get details about a single database column/property.

ActionTry it

Retrieve Notion file upload

Tool to retrieve details of a Notion File Upload object by its identifier. Use when you need to check the status or details of an existing file upload.

ActionTry it

Retrieve Notion view

Retrieve a Notion view and its configuration.

ActionTry it

Retrieve page

Retrieve a Notion page's properties and metadata by page ID, rather than its block content. The input must be a UUID, not a full page URL.

ActionTry it

Search Notion pages and databases

Search Notion pages and databases by title, with an object-type filter that defaults to pages. Search indexing can lag and results may be incomplete; an empty query can help find accessible items, and optional client-side property filtering reduces page response size.

ActionTry it

Send file upload

Tool to transmit file contents to Notion for a file upload object. Use after creating a file upload object to send the actual file data.

ActionTry it

Update block

Updates existing Notion block's text content. ⚠️ CRITICAL: Content limited to 2000 chars. Cannot change block type or archive blocks. Content exceeding 2000 chars will fail with validation error. For longer content, split across multiple blocks using add_multiple_page_content.

ActionTry it

Update Database Row (Page)

Updates a specific row/page within a Notion database by its page UUID (row_id). IMPORTANT CLARIFICATION: This action updates INDIVIDUAL ROWS (pages) in a database, NOT the database structure. - To update a ROW/PAGE: Use THIS action with `row_id` (the page UUID) - To update DATABASE SCHEMA (columns, properties, title): Use NOTION_UPDATE_SCHEMA_DATABASE with `database_id` REQUIRED: `row_id` is MANDATORY. This is the UUID of the specific page/row to update. Do NOT pass `database_id` to this action - that parameter does not exist here. Common issues: (1) Use UUID from page URL, not the full URL (2) Ensure page is shared with integration (3) Match property names exactly as in database (4) Use 'status' type for Status properties, not 'select' (5) Retry on 409 Conflict errors (concurrent updates) Supports updating properties, icon, cover, or archiving the row.

ActionTry it

Update database schema

Updates an existing Notion database's schema including title, description, and/or properties (columns). IMPORTANT NOTES: - At least one update (title, description, or properties) must be provided - The database must be shared with your integration - Property names are case-sensitive and must match exactly - When changing a property to 'relation' type, you MUST provide the database_id of the target database - Removing properties will permanently delete that column and its data - Use NOTION_FETCH_DATA first to get the exact property names and database structure Common errors: - 'database_id' missing: Ensure you're passing the database_id parameter (not page_id) - 'data_source_id' undefined: When changing to relation type, database_id is required in PropertySchemaUpdate - Property name mismatch: Names must match exactly including case and special characters

ActionTry it

Update Notion view

Update a Notion view.

ActionTry it

Update Page

Update page properties, icon, cover, or archive status. IMPORTANT: Property names are workspace-specific and case-sensitive. Use NOTION_FETCH_ROW or NOTION_FETCH_DATABASE first to discover exact property names and valid select/status options. Common errors: - "X is not a property that exists": Discover properties with NOTION_FETCH_ROW - "Invalid status option": Check valid options with NOTION_FETCH_DATABASE - "should be defined": Wrap values: {'Field': {'type': value}} Property formats: title/rich_text use {'text': {'content': 'value'}}, select/status use {'name': 'option'}

ActionTry it

Update page markdown

Apply synchronous targeted edits or replace a Notion page using Markdown.

ActionTry it

Upsert database rows

Upserts Notion database rows in bulk by querying a filter for each item, then creating a row if none is returned or updating a match. Only the first query page is examined; multiple matches can update the first or produce an error, with per-item results.

ActionTry it

Who Am I

Return the identity (workspace, owner) of the connected Notion account.

ActionTry it

How the Notion integration works

The Notion integration connects your Dench AI CRM directly to Notion, so agents can read and act on your Notion data as part of everyday work — answering questions in chat, keeping your CRM in sync, and running automations without anyone copying data between tools.

60 actions are available for agents to invoke on your behalf, and 8 triggers can start a Dench automation the moment something changes in Notion. Every call runs through Notion's own authorization, scoped to the account you connect.

Set up Notion in Dench

  1. 1

    Sign in to your Dench workspace and open Integrations.

  2. 2

    Find Notion and click Connect — you'll authorize access through Notion's own sign-in flow. No API keys or code required.

  3. 3

    Ask an agent to use Notion in chat, or wire a Notion trigger into an automation.

  4. 4

    Manage or disconnect the connection any time from workspace settings.

Frequently asked questions

How does the Notion integration work with Dench?

The Dench Notion integration connects your AI CRM to Notion, so AI agents can work with your Notion data as part of chats, automations, and CRM workflows. You connect your account once, and every agent in your workspace can use it — governed by your workspace permissions.

What actions can AI agents perform with Notion via Dench?

The Notion integration currently exposes 60 actions, including Add multiple content blocks (bulk, user-friendly), Add single content block to Notion page (Deprecated), Append code blocks (code, quote, equation), Append layout blocks (divider, TOC, columns), Append media blocks (image, video, audio, files), and Append raw Notion blocks (advanced API). Agents invoke them on your behalf from chat or from automations.

Can Dench react to events in Notion automatically?

Yes. The Notion integration provides 8 triggers — such as Comment Created, Data Source Created, Data Source Schema Updated, and Database Created — that can start a Dench automation the moment something happens in Notion.

Do I need to write code to connect Notion to Dench?

No. You connect Notion from your Dench workspace using Notion's own sign-in and authorization flow — no API keys to copy, no glue code to maintain.

Is the Notion integration secure?

Connections are authorized through Notion's own authentication flow, and Dench stores only the authorization needed to act on your behalf. You can review and disconnect the Notion connection from your workspace settings at any time.

Notion | Dench AI CRM