← /skills/ · skill·v 1·last edit May 20, 2026

How to bulk-rewrite Shopify product descriptions with AI (safely)

Pull your Shopify catalog locally, let Claude rewrite every description against your brand voice, review the diff per product, and publish only what you approve. shopifyproduct-copy·1.2 kb prompt·works with Claude Code · Claude · Cursor · Codex · Antigravity

You inherited 200 Shopify product descriptions. Half were written by a freelancer in 2022, a quarter were AI-generated by a previous tool that thought every product was "perfect for any occasion," and the rest were typed in a hurry the night before launch. (Assuming you didn't just take the print-on-demand generics.)

Now you want them to actually work. You want them all rewritten in your brand voice, capped at the length your PDP template actually accommodates, referencing the specs that matter to your customers, with the must-include phrases the legal team gave you (or would have, if you had a legal team).

Your options, as the catalog stands today, are all bad. Copy-pasting 200 times is a week of work. A Shopify CSV import will silently overwrite formatting, drop characters, and ship to the live store before you notice the one row that broke. You could use Shopify AI, but Shopify Magic is the engine that wrote "perfect for any occasion" in the first place. One product at a time, in the admin, no rule layer, no diff.

Scratch, the desktop app, takes a different path. It pulls your products as local files. Your AI rewrites the descriptionHtml field in place against rules you set. You review each rewrite as a diff before anything touches the live store. And if a description goes live and reads wrong an hour later, reject the row and the original goes back.

The prompt

Paste this into Claude, Claude Code, or Cursor at your Scratch project root. The AI will interview you for the rules (brand voice, length cap, must-include phrases, things to avoid), calibrate on one product, and only then work through the rest.

Step 3 is the safety. The AI rewrites one product, you confirm the shape, and only then does it work through the catalog. If the voice or structure is off, you catch it after one rewrite instead of after two hundred.

You are rewriting the descriptionHtml field across a folder of Shopify
product JSON files. Each file is one product in Shopify GraphQL Admin
shape; Scratch pulled them from a live catalog. The rewrites land on
disk; a human reviews each one as a diff in Scratch before anything
ships.

Edit only descriptionHtml. Do not change any other field, and do not
invent a fact that is not in the existing copy, title, productType, or
variants.

Before you start:

1. Read a handful of products to understand the catalog. What kinds of
   things, what the existing copy gets right, what it gets wrong, what
   facts tend to be missing.
2. Interview me for the rules. Brand voice, a length cap, must-include
   phrases, words or claims I do not want to see, anything else that
   matters. Push back if my answers are too vague to act on.
3. Rewrite one product. Show me. Only continue once I am happy with
   the shape.

If a product is ambiguous (the copy contradicts the title, the
materials are missing, you cannot tell whether a must-include
applies), skip it until the rest are finished, then ask me about all of the issues at the end.

When you finish, print one line: count rewritten, count skipped,
"READY · review diff in Scratch". The edits on disk are the
deliverable. Do not dump rewrites to chat.

What the rewrite actually looks like

This is the loop Scratch runs for every task. Here is what each step looks like for a description rewrite.

1. Pull

Scratch pulls your Shopify catalog into a local folder, one .json per product, in Shopify GraphQL Admin shape. You see something like scratch/shopify/products/0001-linen-drawstring-pants.json, with the editable body in descriptionHtml and the locked fields (variants, inventory, metafields) sitting beside it. Two hundred products land as two hundred files. Nothing on the live store has changed.

2. AI edits

Open Claude Code at your Scratch project root and paste the prompt above. The AI reads a sample of the files, asks you for the rules (voice, length, must-includes, what to avoid), rewrites one product for sign-off, then works through the rest, stopping on anything ambiguous. Scratch keeps the original alongside the rewrite so it can diff them later. You did not give the AI an API token. It cannot touch the live store even if it wanted to.

3. Review

Open the Scratch desktop app. Every product with a changed description shows up as a row in the review table, the old description on the left, the new one on the right, changed fields highlighted. Scan the diff. Rows where the AI obeyed your voice and length rules get a one-click approve. Some rows will have drifted. A "premium" snuck in. The hook reads like an ad. The bullet list lost a real spec. Those get one-click reject, or a quick fix in place.

4. Ship

When you have approved the rows you want live, hit publish right in Scratch. Scratch writes the approved descriptions back through the Shopify Admin API, one product at a time, with a log of which products went out. Rejected and unedited rows stay where they were. And rollback still works after publish: if a description reads wrong on the live store an hour later, reject the row in Scratch and the original descriptionHtml goes back. No CSV. No manual copy-paste. No "publish all and pray."

Why not just import a CSV

Most teams reach for a CSV import. Here is the cost.

Shopify CSV import ✗ no per-row diff before publish ✗ HTML formatting often breaks silently ✗ one bad cell can overwrite a whole column ✗ no rule layer; bad rewrites ship live ✗ rollback means a second import, if you kept the export the risky way AI -> files -> review -> ship ✓ original and rewritten side by side per product ✓ HTML preserved byte-for-byte except descriptionHtml ✓ locked fields (variants, inventory, metafields) cannot be touched ✓ length and phrase rules fail before you look ✓ per-item reject restores the original instantly the Scratch way

The CSV path fails in ways that are hard to spot at scale. A description with a smart-quote or a stray comma can shift columns. A row where someone left descriptionHtml blank in the spreadsheet will blank it out on the live store. There is no per-row approve gate, so 200 rewrites ship together or not at all. And once it is published, the only "rollback" is re-importing yesterday's CSV, assuming you exported one. The Scratch path inverts every one of those properties. Your descriptions exist as 200 small files. Your rules run before you look. You approve per product. You roll back per product.

When not to use this skill

The shape is simple: the AI does the rewrite, you keep the veto. Two hundred descriptions get the same polish, and not one ships without you reading it.

Related

Try this on a real project.

Curtis runs intro calls personally. Bring a refresh, a migration, or anything that feels sticky. We'll work through whether Scratch fits.

Talk to Curtis → or start with Scratch