← /how-to/

How to bulk update Notion databases with AI

Notion bulk edits set one property at a time and skip titles entirely. The fix: AI cleans the whole database as local files, you approve every diff. Try it now free → or book a demo with Curtis

Your team has one database it actually lives in. Projects, meeting notes, decisions, everything lands there, everyone writes to it, and nobody formats it. Scroll it the way a new hire would. Titles that are whole sentences, typed in the minute before the meeting they describe. Properties filled in on maybe half the rows, depending on who filed the page. Six tags that mean the same thing, because Marketing, marketing, and mktg each felt right to somebody once. The wiki the company trusts has the data hygiene of a group chat, and it got that way one reasonable page at a time.

Notion's tools were built for the next page, not the previous thousand. The bulk-edit checkboxes set one value, on one property, in Table view, across the rows the view happens to have loaded, and titles are not on the list at all. So the real cleanup, retitle every page to a convention, fill and normalize the properties, fold six tags into one, point the relations at the right project, stays a someday job. The shape that gets it done in an afternoon: pull the database into local files, let your AI agent read all 1,000 rows at once and apply the convention with judgment, then review every change as a word-level diff before anything writes back to the workspace your whole company reads.

Your options

Hand edits in views

Notion does have a bulk edit. In Table view, the hover checkboxes select rows, and Edit property sets one value across the selection. For flipping one select value on the 40 rows in front of you, it is the fastest tool on this page. The edges are everywhere else. Select all covers only the rows the view has loaded, so a bulk pass can silently skip the rest until you raise the load limit or click Load More. Titles, formulas, rollups, AI properties, and the created and edited metadata are excluded, and relations cannot be bulk edited from a related database's view. Folding six tag variants into one means six filter-and-select passes. Undo is Ctrl+Z in the moment, then per-page version history.

Notion AI Autofill

Autofill is the AI built into the database itself: configure a prompt on a property and it fills that column, with an Update all pages option to backfill existing rows. For a summary column generated from each page, it is genuinely useful, and it needs no script. The boundaries: Autofill works one property at a time, and the basic version reads only the page it is filling, so it cannot know that mktg and Marketing are one tag, let alone fold them. It requires a Business or Enterprise plan, and values land in the cells with no review step, so a misjudged prompt backfills its mistake down the whole column. Notion's newer Agents range wider, hundreds of pages in a run, and land the same way: live.

Formulas, buttons, and automations

Buttons and database automations are the rule engines. The Edit pages in action takes every page matching a filter in a chosen database and sets properties on it, and a formula can compute the value, so a clean mechanical rule gets real bulk reach on a paid plan. The reach is also the risk. There is no preview and no dry run, and a filter that is slightly wrong edits every page in the target database the moment the button is clicked, with no run-level undo afterward, only each page's own history. And a rule cannot read. It sets exactly what you wired, on every match, including the rows where the right answer was something else.

API scripts

The API can do the whole job. Titles, selects, dates, and relations are all writable per page, so a script can apply any mapping you can code, and an agent wired in through an MCP server can even bring judgment. The pace and the supervision are what you accept. Notion's rate limit averages 3 requests per second and there is no bulk update endpoint, so 1,000 rows is 1,000 PATCH calls, roughly 6 minutes of API time for the writes alone, plus paginated reads to see the data first, and every rerun re-spends it. Relations write at most 100 linked pages per call. And it all lands live: no diff, no run-level rollback, per-page history only.

Scratch

Scratch keeps the reach of the script route and moves the work somewhere reviewable. The database comes down as one file per row, every property laid out, so your agent reads all 1,000 rows at once: grep every title against the convention, build a frequency table of every tag variant, write the mapping as a script, and actually read the rows the mapping cannot decide. Page bodies stay read-only and computed properties stay locked, so a property cleanup cannot rewrite the prose inside the pages. Every change comes back as a word-level diff, only approved rows publish, and a published row reverts per row. The trade is stated plainly: the review step is you, reading, on purpose.

Option Whole database Judgment Review before live Undo after publish
Hand edits in views Loaded rows only You, one pass per value No Ctrl+Z, then per-page history
Notion AI Autofill One property at a time Per row, no cross-row context No Per-page history
Buttons and automations Every page matching the filter Rules only No Per-page history
API script Yes Bring your own Only if you build it Per-page history
Scratch Yes Yes, your agent Every change, as a diff Per row, even after publish

How the loop works on your database

  1. Scratch pulls the database into files. Every page in the database lands as its own file on your laptop, properties laid out for editing: the title, rich-text, select and multi-select, dates, relations, people, the cover and icon. Page bodies stay read-only and formulas and rollups stay locked. Nothing in the workspace has changed.
  2. Your AI cleans the rows. Point Claude, Codex, Cursor, or Copilot at the folder and give it the convention. Retitle every page to "Team, deliverable, quarter", fill the empty Quarter select from each page's date, and fold the six marketing tags into Marketing. The agent greps 1,000 titles in about a second, builds the tag inventory, applies the mapping, and reads the rows the mapping cannot decide. That is 99% of the job, done at file speed, and the agent holds no API token, so it cannot reach the workspace even if it tries.
  3. You review every diff and publish. Scratch lays each changed property next to the original, word by word, page by page. Validators run first, if you set them: a title pattern every page must match, a tag list nothing may stray from. Approve what ships, and Scratch writes only those rows back through the Notion API, at the API's own pace, one approved page at a time. The last 1%, deciding what the company reads tomorrow, stays with you, and a published change reverts per row.

Start with 50 rows. When the first diffs read the way the convention intends, send the agent through the rest. The publish step is paced by Notion's API either way; what moves to file speed is the part that used to eat the afternoon, the reading, deciding, and editing across 1,000 rows.

What one reviewed pass covers

Questions people ask

Is there any way to bulk edit titles in Notion?

No. The checkbox bulk edit covers most property types and excludes titles, and no view offers a rename across rows. Titles are writable per page through the API, and as files in Scratch, where a retitle is an ordinary text edit your agent can make across the whole folder, each one reviewed as a diff.

Does Select all actually select every row?

No. It selects the rows the view has loaded. Raise the load limit or click Load More until the whole database is in view, or the bulk edit quietly skips everything below the fold. The miss is silent, which is the part that stings later.

Can Notion AI Autofill clean up the whole database?

No. Autofill is configured per property, and the basic version reads only the page it is filling, so it can fill a column but not normalize one; knowing that mktg and Marketing are the same tag takes the whole column as context. Notion's Agents range wider, hundreds of pages in a run, but their changes land live, with no diff of the run and per-page version history as the only way back.

Can a button or automation do this safely?

For a narrow rule, yes. The Edit pages in action is real bulk power on a paid plan, and for one well-filtered mechanical change it is a fine tool. The safety is what is missing at scale: no preview, no dry run, and a wrong filter edits every page in the target database in one click. Notion documents no rollback for a run.

Can I export to CSV, clean it up, and re-import?

No. Notion's CSV import only adds rows. Re-importing a cleaned export does not update the pages it came from; it duplicates them, every row a second time. The export is fine as a backup. As a round trip, it doubles the database.

Will the cleanup touch the content inside my pages?

No. Scratch edits the database side only: titles, rich-text, select and multi-select, dates, relations, people, files, covers and icons. Page bodies, the block trees, toggles, and embeds, are never exposed for editing, and computed properties like formulas and rollups stay locked.

Can I see every change before it writes back?

Yes. Every changed property shows up as a word-level diff next to the current value, page by page, before anything publishes. The agent works on files on your laptop and holds no connection to your workspace; the only write path runs through your approval.

Can I undo a change after it publishes?

Yes, per row. The original value stays next to every published change in Scratch, and rejecting it puts the old value back. Notion itself has no database-wide rollback for a bulk edit; version history is per page and plan-gated, 7 days on Free, 30 on Plus, 90 on Business.

Do I need to be technical?

No. You install a desktop app, connect Notion, and write the convention in plain English; the agent does the file work. Reviewing is reading a tracked-changes view and clicking approve or reject. Validators are optional, for when the cleanup becomes a routine.

See it on your own database

The fastest way to trust it is to watch it run on your data. See it run on your Notion database →, or download Scratch free, pull the messiest database you have, and ask your agent for the tag inventory before changing anything. Scratch is free to try, and the AI is whichever agent you already pay for.

See it run on your own content.

Curtis runs these calls himself. Thirty minutes, no pitch, no slides. He connects your platforms live and shows you your content as an editable, reviewable diff. Bring anything sticky: a refresh, a migration, or a rebrand.

See it run on your content → or download it free