Write 800 WooCommerce product descriptions in an afternoon with Claude

Open almost any WooCommerce store with more than a few dozen products and you'll find the same thing: half the descriptions are empty, the other half are the manufacturer's copy pasted in, the exact text on a hundred other shops. Both are quietly costing you. Empty descriptions don't convert and don't rank. Duplicated ones get flagged by Google as non-original. And nobody fixes it, because writing a unique, on-brand, SEO-structured description for 800 products by hand is a month of work nobody has.
Claude does the whole catalog in an afternoon, and not as generic "AI slop," because you ground it in your real product data and your own voice. This is the setup I use.
Why it's the highest-leverage AI task in a shop
Product descriptions are the one place where SEO and conversion meet. The same paragraph has to contain the keywords a buyer searches AND the sentence that makes them add to cart. Get it right across the whole catalog and you lift organic traffic and conversion at the same time, on inventory you already have. That's why this is the first thing I automate in any store.
The trick: ground it, don't free-style it
Generic AI descriptions read like AI because the model was given nothing to work with. The fix is to feed Claude the structured facts it should never invent (title, attributes, category, materials, dimensions) plus a strict template and your brand voice. Then it isn't making things up; it's turning your data into copy that sounds like you.
How to set it up
The pragmatic route is export → generate → re-import. No plugin lock-in, full control.
- Export your products to CSV: WooCommerce → Products → Export (or WP Sheet Editor / WP All Export for more fields). You want at least
SKU,Name,Categories, and your attributes. - Write one system prompt that locks the voice and structure. This is where the quality comes from:
import csv, anthropic
client = anthropic.Anthropic()
SYSTEM = """You write WooCommerce product descriptions for <Brand>.
Voice: confident, concrete, no fluff, no "in today's world".
Structure every description as: one hook sentence, 3 benefit bullets,
a short specs line, one closing line. 80–120 words. Weave the product's
main keyword in naturally. Use ONLY the facts given — never invent specs."""
rows = list(csv.DictReader(open("products.csv")))
for r in rows:
msg = client.messages.create(
model="claude-opus-4-8",
max_tokens=400,
system=SYSTEM,
messages=[{"role": "user", "content":
f"Name: {r['Name']}\nCategory: {r['Categories']}\nAttributes: {r.get('Attributes','')}"}],
)
r["Description"] = msg.content[0].text
csv.DictWriter(open("out.csv","w"), fieldnames=rows[0].keys()).writerows(rows)
- Re-import
out.csv(Products → Import, mapDescription). Run it on 10 products first, eyeball them, then the full catalog. - Even cleaner, skip the CSV: connect your store to Claude over MCP and let it read and update products directly. That's its own short tutorial: the WooCommerce MCP connector.
Add prompt caching on the system prompt and the whole run costs a few euros for hundreds of products.
Why it matters
The work was never hard. It was too big to ever start, so it never got done. That's the pattern with most store maintenance: not difficult, just endless. Hand the endless part to Claude and you get a catalog that's fully written, consistent in voice, and structured for search, in the time it takes to drink a coffee. Your competitors still have empty description fields. That's the gap.
From the author
These guides come from my day-to-day work: I build and maintain shops as a WooCommerce & WordPress developer and create blazing-fast storefronts with headless WooCommerce. If your shop needs speed or features, get in touch.
Built with AI – the newsletter
Hands-on AI tutorials and the tools I actually use, straight to your inbox. Free, no hype.
Powered by Substack. Unsubscribe anytime.