From better-notion-mcp
Bulk updates properties or content across many pages in a Notion database using pagination, dry-run previews, progress tracking, error recovery, and rate limit handling.
npx claudepluginhub n24q02m/claude-plugins --plugin better-notion-mcpThis skill uses the workspace's default tool permissions.
Update properties or content across many pages in a database safely.
Bulk updates properties or content across many pages in a Notion database using pagination, dry-run previews, progress tracking, error recovery, and rate limit handling.
Query Notion databases with filters/sorts, create/update pages with typed properties, and retrieve content using Notion API.
Interacts with Notion API via REST: authenticate, CRUD pages/databases/blocks/comments, pagination, error handling using curl/jq or scripts. For Notion tasks.
Share bugs, ideas, or general feedback.
Update properties or content across many pages in a database safely.
Notion returns max 100 results per query. You MUST paginate to process all pages:
# First query
databases(action="query", database_id="<id>", filter={...}, page_size=100)
# Response includes: has_more=true, next_cursor="abc123"
# Continue until has_more=false
databases(action="query", database_id="<id>", filter={...}, page_size=100, start_cursor="abc123")
Never assume a single query returns all results. Always check has_more.
Before making any changes, ALWAYS show the user what will change:
Example dry-run output:
Found 23 pages matching filter. Changes:
1. "Project Alpha" -- Status: "Active" -> "Archived"
2. "Project Beta" -- Status: "Active" -> "Archived"
...
(21 more)
Proceed with update? (yes/no)
After user confirms:
Track progress -- maintain counters:
succeeded: pages updated successfullyfailed: pages that errored (with page ID and error message)skipped: pages already in target stateUpdate each page:
pages(action="update", page_id="<id>", properties={
"Status": { "select": { "name": "Archived" } }
})
Rate limit awareness:
Error recovery:
Remember the nested format (same as organize-database skill):
// Properties must use typed nested objects
{ "Status": { "select": { "name": "Done" } } }
{ "Tags": { "multi_select": [{ "name": "urgent" }, { "name": "review" }] } }
{ "Priority": { "number": 1 } }
{ "Reviewed": { "checkbox": true } }
archived: true on pages matching criteria{ "rich_text": [] })