Read and update Notion pages, blocks and databases from any Windmill script, flow or app.
Set up in 3 steps
Create an integration
At notion.so/my-integrations, create a new internal integration, associate it with the right workspace, and copy its token.
Share the pages with it
In Notion, open each page the scripts should reach, and use Connect to to grant the integration access. Subpages inherit it. Without this step every call returns nothing — the token alone grants no access.
Add the resource in Windmill
Open Resources, add a resource of type notion, and paste the token.
Scripts
Building blocks, if none of the projects above fit. Fork one, run it, or call it as a step inside your own flow.
paragraph
Update Page
Append Block Children
Retrieve Block Children
Search by Title
List Users
Retrieve Block
Retrieve Page
convert notion page to markdown
Fetch data from Notion database
Update page properties
Trigger when a Notion Database Item has changed
Create a Page
Resource type
notion — the shape of the credential every script on this page expects.
| Field | Type | Required | What it is |
|---|---|---|---|
| token | string | Yes | Access token for the Notion API. Learn more at https://developers.notion.com/docs/authorization |
Questions
A script returns nothing, or cannot find my page
The page was never shared with the integration. Open it in Notion and use Connect to — an integration sees only what has been granted to it explicitly.
Where do I find a page or database id?
It is the 32-character segment in the page URL, after the title and before any query string.
Is my token stored on the hub?
Never. It lives only in your own Windmill workspace, encrypted at rest.