---
title: Notion
description: Integrate with Notion to perform operations on databases, pages, and blocks.
---

Add rows to Notion databases, read and update pages, and append text, files or images to a page.

Pick a saved connection in the **Credential** field, or create one from there. It signs in with a Bearer Token.

## What it does

The Notion node works on three kinds of things (**Resource**), each with its own **Operation**:

* **Database**: find the databases your integration can see (**Get many**, up to 10 at a time), or read one database's columns and their types (**Get schema**).
* **Page**: add a page to a database (**Create**), read a page, change its properties, or move it to the trash (**Delete**). In a database, each row is a page.
* **Block**: add content to the end of a page (**Create**), or read the content of a page or block (**Get**, up to 100 blocks).

When you pick a **Database**, the **Properties** list shows that database's columns, and the node turns each value into the right Notion type: text, number, checkbox, date, select (by option name), multi-select (a list of option names), URL, email or phone. Columns you leave empty, or names that do not match a column, are skipped.

**Block → Create** can also upload a file from an earlier node and add it to the page as a **File** or **Image** block.

Some operations do less than their name says:

* **Page → Update** only works on pages that sit in a database.
* **Block → Update** adds a new block with the new content at the end of the page or block; it does not change the existing one.
* **Block → Delete** always stops with an error: Notion blocks cannot be deleted from this node.
* **Page → Search** does not search your workspace at the moment and ends with a Notion error.

## When to use it

* Save web pages, leads or AI summaries as rows of a Notion database.
* Mark a database row as done, or change its status, when something happens elsewhere.
* Append a daily log line, a heading and a list to a journal page.
* Attach a screenshot or a downloaded PDF to a Notion page.

To keep notes in local Markdown files instead, use [Obsidian](/nodes/builtin/integration/obsidian/).

## Inputs and settings

Call the Notion API yourself with the HTTP Request node, and pick the same connection in its **Credential** field.

* **Database** and **Page** lists load from Notion once the credential is set. You can also type an id or use an expression. The id is the 32-character code in the page's or database's link, for example `https://www.notion.so/My-Tasks-1a2b3c...` ends with the id.
* **Properties** uses the column names exactly as they appear in Notion. Dates accept any date the browser understands, like `2026-09-10` or `2026-09-10T09:00:00`.
* **Block** is the id of the page (or block) to add content to or read from. A page id works here.
* For **File (from binary)** or **Image (from binary)**, the file comes from the incoming item's `$binary` data under **Binary Field** (`data` by default), as produced by [Http Request](/nodes/builtin/core/http-request/), [Screenshot Page](/nodes/extension/screenshotpage/) or [Local File Read](/nodes/builtin/datatransformation/localfileread/). The file keeps its name and type. **Content** is not used for these two types.

## Outputs

* **Page → Create**, **Get**, **Update** and **Delete** return the page: its `id`, `url`, `properties`, `parent` and timestamps. Property values are in Notion's own format, for example a title under `properties.Name.title[0].plain_text`.
* **Database → Get many** returns one item per database; **Get schema** returns one database with its `properties` (each column's name and type).
* **Block → Create**, **Update** and **Get** return `results`, the list of blocks, plus `has_more` when there are more than 100.

## Dependencies and credentials

* **Credential** (connection, Bearer Token): required. See [Connect Notion](/app/connections/notion/).

The credential is a Notion internal integration token, saved as a Bearer Token credential:

1. In Notion, open **Settings → Connections → Develop or manage integrations** (notion.so/my-integrations) and create a new internal integration for your workspace.
2. Copy its **Internal Integration Secret** and paste it as the token in a new credential. See [Create a credential](/app/connections/create/).
3. Share each page or database you want to use with the integration: open it in Notion, then **⋯ → Connections → Connect to** and pick your integration. Sharing a parent page also shares the pages inside it.

The node only sees what you shared. A database missing from the **Database** list usually means it is not shared yet.

## Example workflow

1. A [Context Menu](/nodes/builtin/trigger/contextmenu/) trigger adds "Save to Notion" to the right-click menu.
2. [Get Page Metadata](/nodes/extension/getpagemetadata/) reads the page's `title` and `url`.
3. Notion, **Page → Create**, **Database** `Reading list`, with **Properties** `Name` = `{{ $input.title }}`, `URL` = `{{ $input.url }}` and `Status` = `To read`.
4. Notion, **Block → Create**, **Block** `{{ $input.id }}` (the new page), **Block Type** `Paragraph`, **Content** `Saved from the browser`.

## Common issues

* **"Notion API Error: Could not find database with ID… (object\_not\_found)".** The database or page is not shared with your integration, or the id is wrong. Connect the integration to it in Notion (**⋯ → Connections**).
* **"Notion API Error: API token is invalid. (unauthorized)".** The token is wrong or the integration was deleted. Copy the secret again and update the credential.
* **"Cannot determine database for page property conversion".** **Page → Update** was used on a page that is not in a database. Only database rows can be updated.
* **"Notion file block: no file found on the incoming item under $binary.data…".** The previous node did not produce a file under **Binary Field**. Check the key, or add a node that downloads or creates the file.
* **"Block deletion requires updating the parent block without including this block".** **Block → Delete** is not supported. Delete the block in Notion, or move the whole page to the trash with **Page → Delete**.
* **The run is blocked in the web app.** Notion runs through the browser extension. Install the extension and allow Notion for this workflow when asked, or run the workflow from the extension. See [Running extension-only integrations in the web app](/app/troubleshooting/extension-only-integrations-in-the-web-app/).

## Related nodes

* [Obsidian](/nodes/builtin/integration/obsidian/): notes in your local Obsidian vault.
* [Airtable](/nodes/builtin/integration/airtable/): another table-style database.
* [Edit Fields](/nodes/builtin/datatransformation/editfields/): prepare values before sending them as **Properties**.
* [Http Request](/nodes/builtin/core/http-request/): call Notion's API for things this node does not cover, such as querying a database.