← /how-to/

How to find and replace text across your Shopify catalog with AI

Shopify has no find and replace. The fix: pull products, pages, and posts into files, grep every occurrence, AI fixes the messy hits, you approve each diff. Try it now free → or book a demo with Curtis

The change is one sentence long. The shipping promise moved from 2 days to 3, or legal wants the wording your payment processor flagged out of every listing, or an ingredient got discontinued and every description that praises it is now wrong. You know the old phrase and the new one. What you do not know is where it all lives: how many of your 1,200 product descriptions, which blog posts, whether it made it onto the shipping FAQ in your Online Store pages. So you go looking for find and replace in the Shopify admin. The bulk editor does not have it. The rich-text editor does not have it. No screen in the admin has it.

The job looks mechanical, and most of it is. Most hits are clean swaps. The rest are not: the phrase capitalized at the start of a sentence, sitting inside a heading, split across HTML tags, or load-bearing in a sentence that stops being true when you swap it blind. The shape that handles both kinds: pull your products, pages, and posts into local files, find every occurrence with one search, let your AI agent apply the clean swaps and rewrite the messy ones, and review each change as a word-level diff before anything touches the store.

Your options

Admin search and hand edits

Shopify's admin search genuinely covers description text: it matches words in titles, descriptions, and tags, so it can build the list of affected products for free. Three limits decide how far that gets you. It does not match partial words, so "proof" will not surface "waterproof". The result is a list of products, not locations: it does not say where in the description the phrase sits or how many times it appears. And there is no replace step anywhere, so each hit means opening the product and hunting through the editor by hand. Pages and blog posts need their own filtered searches. Fine for 6 hits. At 300, it is a week.

A CSV round trip

Export products, run find and replace down the Body (HTML) column in your spreadsheet, re-import with overwrite. Credit first: the spreadsheet has the find and replace Shopify lacks, it previews matches, and it scales to the whole product catalog. The edges are sharp. A non-required column included but left blank does not mean skip; it means wipe the live value to blank. The import cannot be cancelled once it starts, Shopify keeps no import history, and the official advice is to export a backup first because there is no other undo. And the round trip covers products only: Shopify has no native CSV export for pages or blog posts, so the phrase survives everywhere the spreadsheet cannot reach.

A find-and-replace app

There is a whole app category for exactly this, and the better ones preview matches and advertise an undo with backups, which is more safety than anything native offers. The limits are the category's shape. Most cover products only; pages and blog posts usually need a different tool. Free and cheap tiers usually cap how many products one task can touch, so a catalog-scale pass tends to land on the paid plans. And the engine is a literal string match: it does exactly what you typed, on the casing you typed, with the grammar around each swap left as your problem. You are also handing a third party write access to your live catalog, with undo quality that varies by app.

A script on the Admin API

A developer can do this precisely with GraphQL: fetch descriptionHtml, transform it, write it back with productUpdate. Two mechanics make it slower and blinder than it sounds. The products query has no filter for description text, so finding the phrase means paging through the entire catalog a few hundred products at a time and searching on your side, again for every variant spelling. And rate limits are cost-based, so a catalog-wide pass runs as minutes of throttled mutations, not one call. Writes replace the whole field, and the REST endpoints most older tutorials use were deprecated in 2024. Above all: every mutation lands on the live store the moment it runs, with no diff, no approval, and no version history behind it.

Scratch

Scratch runs the same find and replace on local files instead of the live store. It pulls your products, articles, blogs, and pages into one folder tree, so a single search covers all four surfaces at once. Your own AI agent does the work: grep finds every occurrence, including the casing and spacing variants, a script swaps the clean hits, and the agent reads and rewrites the messy ones. Every changed file comes back as a word-level diff next to the original, prices, variants, inventory, and metafields stay locked, and only what you approve publishes back. The review is real reading: the clean swaps skim in a second each, and the handful of rewritten sentences are the part you actually read.

Option Finds every occurrence Pages and posts Messy hits Review before live Undo after publish
Admin search, hand edits Whole words, products listed only Separate searches You, by hand You are the change No
CSV round trip In the spreadsheet Not exported By hand, in cells Reading a column Your backup, if you made one
Find-and-replace app Literal matches only Usually products only No, rules only Varies Varies
Admin API script Full catalog crawl per search More endpoints, more code If you code it Only if you build it No
Scratch One grep, every folder Same folder tree Your agent's judgment Every change, word-level diff Per item

How the loop works on a phrase change

  1. Scratch pulls your store into files. Every product, article, blog, and page lands as its own file in a folder on your laptop, in Shopify's GraphQL Admin shape. Descriptions, page bodies, and post bodies are all editable text; prices, variants, inventory, and metafields sit beside them, locked. The phrase you are hunting is now plain text, findable in one pass. Nothing live has changed.
  2. Your AI finds and fixes every occurrence. Point Claude, Codex, Cursor, or Copilot at the folder with the brief. Replace "ships in 2 business days" with "ships in 3 to 5 business days" everywhere it appears. Match casing variants and HTML splits. Where the phrase is part of a bigger claim, rewrite the sentence so it stays true, and list those separately. One grep finds every hit across 1,200 products and every page and post in under a second, a script handles the clean swaps, and the agent reads the rest. That is 99% of the job, done on your laptop, with no store credential anywhere in it.
  3. You review every diff and publish. Each changed item shows word by word against the original. The clean swaps read in a second; your attention goes to the rewritten sentences. An optional validator can fail any file where the old phrase still appears. Approve, and Scratch writes back through the Admin API at the API's own pace, one approved item at a time. The last 1%, deciding what customers read, stays with you. And a published replacement is not final: reject the item and the old text comes back, row by row.

The hits a blind replace gets wrong

Run the first grep and the occurrence list explains why no literal rule survives a real catalog. Expect some of these:

The clean hits take a script. The rest take judgment, which is exactly what putting an agent on the files adds.

Questions people ask

Does Shopify have a find and replace anywhere in the admin?

No. Search exists; replace does not. The bulk editor covers fields like price, SKU, and tags and has no replace step, the rich-text editor has no dependable in-description find, and Shopify's own route for large text changes is the CSV. Everything else is an app or the API.

Can Shopify's admin search find every affected product?

Mostly. It matches words in titles, descriptions, and tags, so it builds a real list. It does not match partial words, it shows which products match but not where or how many times, and pages and blog posts need their own filtered searches. The list is a start; the work is still one product at a time.

Does this cover blog posts and pages, not just products?

Yes. Scratch pulls articles, blogs, and pages into the same folder tree as products, with title, body, handle, tags, and SEO fields editable. One search covers all of it. The full field list is on Scratch for Shopify.

Can it catch the casing and spacing variants of the phrase?

It can. On local files the agent searches by pattern, not just literal text: capitalized at a sentence start, title case in a heading, the phrase split across HTML tags or line breaks. Each variant is one more grep over the folder, not one more crawl of the catalog.

Can I see every replacement before it goes live?

Yes. Every occurrence the grep found comes back as a word-level diff against the original, clean swap or rewrite alike, and nothing publishes until you approve it. If a hit was rewritten rather than swapped, the diff is where you catch it.

Can I undo a replacement after it publishes?

Yes. The original stays next to every published change, item by item, and rejecting it puts the old text back. Shopify itself keeps no version history for descriptions, so outside Scratch the only safety net is a backup you exported before touching anything.

Will this touch prices, variants, or inventory?

Nothing. Prices, variants, and inventory are locked at the connector, so even a replacement pattern that overmatches has no write path to them. The worst a bad grep can do is propose a text diff you reject.

What if the phrase lives in a metafield?

Not supported. Metafields are locked at the connector, along with prices, variants, and inventory, so the agent cannot edit them as files. If metafield text is where your phrase lives, tell Curtis; connector tweaks are cheap when we know what people need.

Do I need to be technical?

No. You describe the phrase change in plain English; the casing variants, the split-across-tags cases, and the regex are the agent's problem. Your part is reading word-level diffs of every occurrence and deciding which ones publish.

See it on your own store

The fastest way to answer "where else does it appear" is to run the search on your real catalog. See it run on your store →, or download Scratch free, connect Shopify, and grep the phrase across your own products, pages, and posts before you change anything.

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