Update properties or content across many pages in a Notion database with dry-run and error recovery
Add this skill
npx mdskills install n24q02m/bulk-updateComprehensive bulk update instructions with excellent dry-run safety, pagination, and error recovery patterns
1---2name: bulk-update3description: Update properties or content across many pages in a Notion database with dry-run and error recovery4argument-hint: "[database name] [what to change]"5---67# Bulk Update89Update properties or content across many pages in a database safely.1011## Pagination (Critical)1213Notion returns max 100 results per query. You MUST paginate to process all pages:1415```16# First query17databases(action="query", database_id="<id>", filter={...}, page_size=100)18# Response includes: has_more=true, next_cursor="abc123"1920# Continue until has_more=false21databases(action="query", database_id="<id>", filter={...}, page_size=100, start_cursor="abc123")22```2324Never assume a single query returns all results. Always check `has_more`.2526## Dry-Run Mode2728Before making any changes, ALWAYS show the user what will change:29301. Query the database with the filter312. For each matching page, show:32 - Page title (current value)33 - What will change (old value -> new value)34 - Total count of affected pages353. Ask for explicit confirmation before proceeding3637Example dry-run output:38```39Found 23 pages matching filter. Changes:40411. "Project Alpha" -- Status: "Active" -> "Archived"422. "Project Beta" -- Status: "Active" -> "Archived"43...44(21 more)4546Proceed with update? (yes/no)47```4849## Update Execution5051After user confirms:52531. **Track progress** -- maintain counters:54 - `succeeded`: pages updated successfully55 - `failed`: pages that errored (with page ID and error message)56 - `skipped`: pages already in target state57582. **Update each page**:59 ```60 pages(action="update", page_id="<id>", properties={61 "Status": { "select": { "name": "Archived" } }62 })63 ```64653. **Rate limit awareness**:66 - Notion rate limit: 3 requests/second average67 - For large batches (50+ pages), warn user it may take time68 - If you get 429 errors, pause and retry69704. **Error recovery**:71 - Never stop on first error -- continue processing remaining pages72 - Collect all failures with their page IDs73 - After completion, report: "Updated 20/23 pages. 3 failed: [page IDs + error reasons]"74 - Offer to retry failed pages7576## Property Value Format7778Remember the nested format (same as organize-database skill):79```jsonc80// Properties must use typed nested objects81{ "Status": { "select": { "name": "Done" } } }82{ "Tags": { "multi_select": [{ "name": "urgent" }, { "name": "review" }] } }83{ "Priority": { "number": 1 } }84{ "Reviewed": { "checkbox": true } }85```8687## Common Bulk Operations8889- **Change status**: Filter by old status, update to new status90- **Add/remove tags**: Read existing multi_select, merge/filter, write back91- **Set dates**: Update date properties across filtered pages92- **Archive**: Set `archived: true` on pages matching criteria93- **Clear field**: Set property to empty value (e.g., `{ "rich_text": [] }`)9495## When to Use9697- Renaming a category/tag across all pages98- Bulk-archiving completed or old items99- Adding a new tag to all pages matching a filter100- Resetting or populating a property across many pages101- Mass status transitions (e.g., sprint closeout)102
Full transparency — inspect the skill content before installing.