Skip to content

Notion

The Notion nodes connect your workflows to Notion through its REST API. Use them to automate your workspace: create a page (row) in a database when a lead comes in, query a database with filters, append content to a page, or leave a comment.

There are six nodes:

NodeOperationHTTP method
Notion: Create page (notionCreatePage)Create a page (database row or subpage)POST /pages
Notion: Get page (notionGetPage)Read a page by its idGET /pages/{id}
Notion: Update page (notionUpdatePage)Update properties / archivePATCH /pages/{id}
Notion: Query database (notionQueryDatabase)Query with filters and sortingPOST /databases/{id}/query
Notion: Append content (notionAppendBlocks)Append blocks to a pagePATCH /blocks/{id}/children
Notion: Add comment (notionAddComment)Add a commentPOST /comments

The nodes use a Notion credential. Create it in Credentials → Add → Notion with this field:

FieldDescription
Integration tokenThe Internal Integration Secret, from notion.so/my-integrations. Never shown in logs.

Authentication is Bearer with the integration token. You can verify the credential with the Test button, which calls GET /users/me.

In Notion, a page’s properties are typed objects that depend on the column type (title, text, select, date, number, relation…). That’s why the properties, filter and sorts fields are passed as JSON in Notion’s API format. For example, the title:

{ "Name": { "title": [ { "text": { "content": "New lead" } } ] } }
ParameterTypeRequiredDescription
credentials_idcredentialYesNotion credential
database_idtextNo*Parent database id (the page is a row)
parent_page_idtextNo*Parent page id (if not a database)
propertiesJSONYesPage properties (Notion format)
childrenJSONNoInitial content blocks

*You need one of database_id or parent_page_id. Output: the created page, with its id and url.

ParameterTypeRequiredDescription
credentials_idcredentialYesNotion credential
page_idtextYesPage id
ParameterTypeRequiredDescription
credentials_idcredentialYesNotion credential
page_idtextYesPage id
propertiesJSONNoProperties to update (Notion format)
archivedtextNotrue to archive, false to restore

Notion: Query database (notionQueryDatabase)

Section titled “Notion: Query database (notionQueryDatabase)”
ParameterTypeRequiredDescription
credentials_idcredentialYesNotion credential
database_idtextYesDatabase id
filterJSONNoFilter (Notion format)
sortsJSONNoSorts (array, Notion format)
page_sizenumberNoMax results (1-100)

Output: the array of pages (results) matching the query.

Notion: Append content (notionAppendBlocks)

Section titled “Notion: Append content (notionAppendBlocks)”
ParameterTypeRequiredDescription
credentials_idcredentialYesNotion credential
block_idtextYesParent page or block id
texttextNoPlain text (creates a paragraph)
childrenJSONNoContent blocks (Notion format)

Pass children (custom blocks) or text (simple paragraph). If you give both, blocks win.

ParameterTypeRequiredDescription
credentials_idcredentialYesNotion credential
page_idtextYesPage id
texttextYesComment text

Create a row in a leads database from a form:

  • Node: Notion: Create page
  • database_id: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d
  • properties:
{
"Name": { "title": [ { "text": { "content": "{{data.customer}}" } } ] },
"Email": { "email": "{{data.email}}" },
"Status": { "select": { "name": "New" } }
}

Output:

{
"id": "8b9c0d1e-2f3a-4b5c-6d7e-8f9a0b1c2d3e",
"url": "https://www.notion.so/8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e",
"object": "page"
}

Each node classifies errors so the engine knows whether a retry makes sense:

SituationRetryableWhat to do
Validation (400)NoNotion returns the reason (e.g. unknown property or wrong type). Fix the JSON.
Not found (404)NoThe page/database doesn’t exist or isn’t shared with the integration. Share it and check the id.
Authentication (401/403)NoInvalid token or no permission. Check the credential.
Conflict (409)YesTemporary Notion conflict; retried automatically.
Server (500)YesTemporary Notion error; retried.
Rate limit (429)YesNotion’s Retry-After (~3 req/s) is honored and retried.
Network / TimeoutYesTransient issue; retried automatically.