Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Read, create, and update Notion pages and databases via the Notion REST API
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 359% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 73% | 0% |
Interact with Notion workspaces through the official REST API. Requires an Internal Integration token (NOTION_TOKEN) and pages/databases shared with that integration.
The user must create an Internal Integration at https://www.notion.so/my-integrations and share their pages/databases with it.
powershell# Set token in session (or add to .env) $env:NOTION_TOKEN = "ntn_..."
powershell$headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" } $body = '{"query": "meeting notes"}' $resp = Invoke-RestMethod -Uri "https://api.notion.com/v1/search" -Method Post -Headers $headers -Body $body $resp.results | Select-Object -ExpandProperty properties | ConvertTo-Json -Depth 5
powershell$pageId = "your-page-id" # from Notion URL: notion.so/Page-Title-<pageId> $headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28" } $page = Invoke-RestMethod -Uri "https://api.notion.com/v1/pages/$pageId" -Headers $headers $blocks = Invoke-RestMethod -Uri "https://api.notion.com/v1/blocks/$pageId/children" -Headers $headers $blocks.results | ForEach-Object { $_.paragraph.rich_text.plain_text }
powershell$dbId = "your-database-id" $headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" } $filter = '{"filter": {"property": "Status", "select": {"equals": "In Progress"}}}' $resp = Invoke-RestMethod -Uri "https://api.notion.com/v1/databases/$dbId/query" -Method Post -Headers $headers -Body $filter $resp.results | ForEach-Object { $_.properties.Name.title.plain_text }
powershell$dbId = "your-database-id" $headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" } $payload = @{ parent = @{ database_id = $dbId } properties = @{ Name = @{ title = @(@{ text = @{ content = "My New Page" } }) } } } | ConvertTo-Json -Depth 10 Invoke-RestMethod -Uri "https://api.notion.com/v1/pages" -Method Post -Headers $headers -Body $payload
powershell$pageId = "your-page-id" $headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" } $payload = @{ children = @(@{ object = "block" type = "paragraph" paragraph = @{ rich_text = @(@{ type = "text"; text = @{ content = "Appended content here." } }) } }) } | ConvertTo-Json -Depth 10 Invoke-RestMethod -Uri "https://api.notion.com/v1/blocks/$pageId/children" -Method Patch -Headers $headers -Body $payload
"Show me all In Progress tasks in my Notion project database" → Use step 4 with a Status filter. Ask for database ID from the Notion URL.
"Create a new meeting notes page in Notion for today" → Use step 5 to create a page, then step 6 to append an agenda block.
"Search my Notion workspace for anything about Q2 planning" → Use step 2 with query Q2 planning.
rich_text[0].plain_text for text valuesOther measured skills in the registry, with their headline benchmark lift.