<!-- BusyBot node reference — https://busybot.net/tools/notion/ -->

> Node: Notion (`notion`) · Action (binary) · v1
> Category: Productivity · Credentials: Notion API (`notionApi`)
> Updated: 2026-08-16

# Notion

> Manage Notion databases, pages, blocks, and users with binary file download

## Overview

The Notion tool provides full integration with the Notion API v1 (2022-06-28). Supports 5 resources: Block (append, getAll), Database (get, getAll, search), DatabasePage (create, get, getAll, update), Page (archive, create, search), User (get, getAll). The DatabasePage getAll operation supports downloading file/image properties as binary data when downloadFiles=true. Uses Bearer token authentication with the Notion-Version header.

**Category:** Productivity  
**Tool Name:** `notion`  
**Version:** 1

**Appearance:** Icon: `si-notion` | Color: `#000000`

## Node Type

**Action (Binary)** — handles file/binary data operations

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Notion API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/notion-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Block | `block` |
| Database | `database` |
| Database Page | `databasePage` |
| Page | `page` |
| User | `user` |

### Operations

**Block** (`block`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Append After | `append` | Append child blocks to a parent block or page |
| Get Child Blocks | `getAll` | Get child blocks of a block or page |

**Database** (`database`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Get | `get` | Get a database by ID |
| Get Many | `getAll` | List all databases |
| Search | `search` | Search databases by text |

**Database Page** (`databasePage`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a page in a database |
| Get | `get` | Get a page in a database |
| Get Many | `getAll` | Query pages in a database |
| Update | `update` | Update a page in a database |

**Page** (`page`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Archive | `archive` | Archive (soft-delete) a page |
| Create | `create` | Create a child page under a parent page |
| Search | `search` | Text search of pages |

**User** (`user`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Get | `get` | Get a user by ID |
| Get Many | `getAll` | List all workspace users |

### Parameters

#### Block: Append After

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Block ID | `string` | Yes | — | The UUID of the block or page. Supports Notion URLs or plain IDs. |
| Block Content | `json` | No | `[]` | Array of block objects to append. Each item: { "type": "paragraph\|heading_1\|heading_2\|heading_3\|toggle\|to_do\|bulleted_list_item\|numbered_list_item\|image", "textContent": "...", "checked": false, "url": "..." } |

#### Block: Get Child Blocks

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Block ID | `string` | Yes | — | The UUID of the block or page. Supports Notion URLs or plain IDs. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Also Fetch Nested Blocks | `boolean` | No | `false` | Whether to recursively fetch children of children blocks. |
| Simplify Output | `boolean` | No | `true` | Whether to extract plain text content from block types. |

#### Database: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Database ID (`databaseId`) | `string` | Yes | — | The UUID of the database. Supports Notion URLs or plain IDs. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |

#### Database: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Database: Search

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Search Text | `string` | No | — | The text to search for. |
| Sort Direction | `options` | No | `descending` | Sort direction for search results. |
| | | | | Options: `ascending`, `descending` |
| Sort Timestamp | `options` | No | `last_edited_time` | The timestamp to sort by. |
| | | | | Options: `last_edited_time` |

#### Database Page: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Database ID (`databaseId`) | `string` | Yes | — | The UUID of the parent database to create the page in / query pages from. Supports Notion URLs or plain IDs. |
| Title | `string` | No | — | Page title. Appears at the top of the page and can be found via Quick Find. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Properties | `json` | No | `[]` | Array of property objects for create/update. Each item: { "key": "PropertyName\|propertyType", "title": "...", "textContent": "...", "numberValue": 0, "selectValue": "...", "checkboxValue": false, "urlValue": "...", "emailValue": "...", "phoneValue": "...", "dateStart": "...", "dateEnd": "...", "date": "...", "range": false, "multiSelectValue": "...", "peopleValue": ["id"], "relationValue": ["id"], "statusValue": "...", "fileUrls": { "fileUrl": [{ "name": "...", "url": "..." }] } } |
| Block Content | `json` | No | `[]` | Array of block objects to append. Each item: { "type": "paragraph\|heading_1\|heading_2\|heading_3\|toggle\|to_do\|bulleted_list_item\|numbered_list_item\|image", "textContent": "...", "checked": false, "url": "..." } |
| Icon Type | `options` | No | `emoji` | The icon type for the page. |
| | | | | Options: `emoji`, `file` |
| Icon | `string` | No | — | Emoji character or file URL to use as the page icon. |

#### Database Page: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Page ID (`pageId`) | `string` | Yes | — | The UUID of the database page. Supports Notion URLs or plain IDs. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |

#### Database Page: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Database ID (`databaseId`) | `string` | Yes | — | The UUID of the parent database to create the page in / query pages from. Supports Notion URLs or plain IDs. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Download Files | `boolean` | No | `false` | Whether to download file/image properties as binary data. File properties are stored as binary with the naming pattern {propertyName}_{fileIndex}. |
| Filter Type | `options` | No | `none` | How to filter database pages. |
| | | | | Options: `none`, `manual`, `json` |
| Must Match | `options` | No | `anyFilter` | Whether all filters must match (AND) or any filter (OR). _(shown when Filter Type is `manual`)_ |
| | | | | Options: `anyFilter`, `allFilters` |
| Filter Conditions | `json` | No | `[]` | Array of filter conditions. Each: { "key": "PropertyName\|propertyType", "type": "propertyType", "condition": "equals\|contains\|...", "value": "..." }. For formula: add "returnType": "text\|number\|checkbox\|date". _(shown when Filter Type is `manual`)_ |
| Filters (JSON) | `string` | No | — | Raw JSON filter object following the Notion API filter format. See https://developers.notion.com/reference/post-database-query-filter _(shown when Filter Type is `json`)_ |
| Sort | `json` | No | `[]` | Array of sort objects. Each: { "key": "PropertyName\|type", "direction": "ascending\|descending", "timestamp": false }. Set timestamp=true and key to "created_time" or "last_edited_time" for timestamp sorts. |

#### Database Page: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Page ID (`pageId`) | `string` | Yes | — | The UUID of the database page. Supports Notion URLs or plain IDs. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Properties | `json` | No | `[]` | Array of property objects for create/update. Each item: { "key": "PropertyName\|propertyType", "title": "...", "textContent": "...", "numberValue": 0, "selectValue": "...", "checkboxValue": false, "urlValue": "...", "emailValue": "...", "phoneValue": "...", "dateStart": "...", "dateEnd": "...", "date": "...", "range": false, "multiSelectValue": "...", "peopleValue": ["id"], "relationValue": ["id"], "statusValue": "...", "fileUrls": { "fileUrl": [{ "name": "...", "url": "..." }] } } |
| Icon Type | `options` | No | `emoji` | The icon type for the page. |
| | | | | Options: `emoji`, `file` |
| Icon | `string` | No | — | Emoji character or file URL to use as the page icon. |

#### Page: Archive

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Page ID (`pageId`) | `string` | Yes | — | The UUID of the page to archive. Supports Notion URLs or plain IDs. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |

#### Page: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Parent Page ID | `string` | Yes | — | The UUID of the parent page under which the new child page will be created. Supports Notion URLs or plain IDs. |
| Title | `string` | No | — | Page title. Appears at the top of the page and can be found via Quick Find. |
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Block Content | `json` | No | `[]` | Array of block objects to append. Each item: { "type": "paragraph\|heading_1\|heading_2\|heading_3\|toggle\|to_do\|bulleted_list_item\|numbered_list_item\|image", "textContent": "...", "checked": false, "url": "..." } |
| Icon Type | `options` | No | `emoji` | The icon type for the page. |
| | | | | Options: `emoji`, `file` |
| Icon | `string` | No | — | Emoji character or file URL to use as the page icon. |

#### Page: Search

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Simplify | `boolean` | No | `true` | Whether to return a simplified version of the response instead of the raw data. |
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Search Text | `string` | No | — | The text to search for. |
| Sort Direction | `options` | No | `descending` | Sort direction for search results. |
| | | | | Options: `ascending`, `descending` |
| Sort Timestamp | `options` | No | `last_edited_time` | The timestamp to sort by. |
| | | | | Options: `last_edited_time` |
| Filter Object Type | `options` | No | — | Filter search results by object type. |
| | | | | Options: `""` (None), `page`, `database` |

#### User: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | The UUID of the user. |

#### User: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `5` | Maximum number of items to process concurrently. Notion API has a 3 req/s rate limit, so keep this low. |

## Output Data

The Notion response **becomes** the output item's JSON — it is not merged into the incoming item, so fields you set upstream do not survive this node. Copy anything you still need into the Notion record, or fetch it again downstream. Binary data on the input item is forwarded.

**These operations fan out — one output item per record returned:**

- `Block: Get Child Blocks` — one item per child block
- `Database: Get Many` and `Database: Search` — one item per database
- `Database Page: Get Many` — one item per page
- `Page: Search` — one item per page
- `User: Get Many` — one item per user

When one of those returns nothing at all, no record item is produced: the input item passes through unchanged. Test for the fields you expect rather than assuming a record arrived.

Every other operation — `Block: Append After`, `Database: Get`, `Database Page: Create`, `Database Page: Get`, `Database Page: Update`, `Page: Archive`, `Page: Create`, `User: Get` — produces exactly one output item holding the response object. If a response ever arrives as something other than a plain object, it lands under `result` instead.

**Simplify** (on by default for Database, Database Page and Page operations) trims each record to `id`, `name` and `url`, and a database page additionally carries its properties flattened to plain values. Turn it off to get Notion's raw object.

**Child blocks** each carry `object` and `parent_id` (the block or page you queried). With **Simplify Output** on they also carry `root_id` and a `content` string holding the block's plain text, and the timestamp fields are dropped.

**Download Files** applies to `Database Page: Get Many` only. Each file or image property is downloaded and attached to that page's output item as a binary property named `{propertyName}_{fileIndex}` — for a `Attachments` property, `Attachments_0`, `Attachments_1`, and so on. A file that fails to download is skipped rather than failing the item.

Reference the result downstream by expression, e.g. `{{ $json.id }}`.

## Usage Examples

- Query all pages in a Notion database
- Create a new page in a Notion database with properties
- Download file attachments from Notion database pages
- Search for pages by text
- Append blocks to a Notion page
- Archive a Notion page
- Get all users in a Notion workspace

## Example Configuration

Get a single database page in simplified form:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "databasePage",
    "operation": "get",
    "pageId": "12345678-1234-1234-1234-123456789abc",
    "simple": true
  }
}
```

Create a page in a database with a status, some rich text and an emoji icon:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "databasePage",
    "operation": "create",
    "databaseId": "87654321-4321-4321-4321-cba987654321",
    "title": "New Task",
    "propertiesUi": [
      {
        "key": "Status|status",
        "statusValue": "In Progress"
      },
      {
        "key": "Description|rich_text",
        "textContent": "This is a new task description"
      }
    ],
    "iconType": "emoji",
    "icon": "📝"
  }
}
```

Query a database with a manual filter and a timestamp sort:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "databasePage",
    "operation": "getAll",
    "databaseId": "87654321-4321-4321-4321-cba987654321",
    "filterType": "manual",
    "matchType": "allFilters",
    "filterConditions": [
      {
        "key": "Status|status",
        "type": "status",
        "condition": "equals",
        "value": "In Progress"
      }
    ],
    "sort": [
      {
        "key": "created_time",
        "direction": "descending",
        "timestamp": true
      }
    ],
    "returnAll": false,
    "limit": 10
  }
}
```

Append paragraphs, a heading and a to-do to an existing page:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "block",
    "operation": "append",
    "blockId": "12345678-1234-1234-1234-123456789abc",
    "blockUi": [
      {
        "type": "paragraph",
        "textContent": "This is a new paragraph block"
      },
      {
        "type": "heading_1",
        "textContent": "Important Heading"
      },
      {
        "type": "to_do",
        "textContent": "Complete this task",
        "checked": false
      }
    ]
  }
}
```

Search pages by text, newest first:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "page",
    "operation": "search",
    "text": "project management",
    "searchFilterValue": "page",
    "sortDirection": "descending",
    "sortTimestamp": "last_edited_time",
    "returnAll": false,
    "limit": 5
  }
}
```

Walk a page's whole block tree as plain text:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "block",
    "operation": "getAll",
    "blockId": "12345678-1234-1234-1234-123456789abc",
    "fetchNestedBlocks": true,
    "simplifyOutput": true
  }
}
```

Create a database page and give it body content in the same call:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "databasePage",
    "operation": "create",
    "databaseId": "87654321-4321-4321-4321-cba987654321",
    "title": "Weekly Report",
    "propertiesUi": [
      {
        "key": "Priority|select",
        "selectValue": "High"
      },
      {
        "key": "Due Date|date",
        "date": "2024-01-15"
      },
      {
        "key": "Completed|checkbox",
        "checkboxValue": false
      }
    ],
    "blockUi": [
      {
        "type": "heading_2",
        "textContent": "Summary"
      },
      {
        "type": "paragraph",
        "textContent": "This week's accomplishments and goals."
      }
    ]
  }
}
```

Create a child page under an existing page:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "page",
    "operation": "create",
    "pageId": "12345678-1234-1234-1234-123456789abc",
    "title": "Meeting Notes - January 2024",
    "iconType": "emoji",
    "icon": "📋",
    "blockUi": [
      {
        "type": "heading_1",
        "textContent": "Meeting Agenda"
      },
      {
        "type": "bulleted_list_item",
        "textContent": "Review project status"
      },
      {
        "type": "bulleted_list_item",
        "textContent": "Discuss next steps"
      },
      {
        "type": "to_do",
        "textContent": "Follow up on action items",
        "checked": false
      }
    ]
  }
}
```

Query with a raw Notion filter object and pull down the file properties:

```json
{
  "type": "notion",
  "parameters": {
    "resource": "databasePage",
    "operation": "getAll",
    "databaseId": "87654321-4321-4321-4321-cba987654321",
    "filterType": "json",
    "filterJson": "{\"and\": [{\"property\": \"Status\", \"status\": {\"equals\": \"In Progress\"}}, {\"property\": \"Priority\", \"select\": {\"equals\": \"High\"}}]}",
    "sort": [
      {
        "key": "Priority|select",
        "direction": "ascending"
      },
      {
        "key": "last_edited_time",
        "direction": "descending",
        "timestamp": true
      }
    ],
    "downloadFiles": true,
    "simple": true
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage Notion databases, pages, blocks, and users. Supports downloading file properties from database pages as binary data.