Most WooCommerce catalogues have the same problem hiding in them. The first fifty products got real descriptions because someone cared at launch. The next few hundred got the supplier's two lines, a copy of the product title, or nothing at all. Nobody plans to fix them, because opening products one by one in wp-admin is a week of tabs.
AI looks like the obvious answer, and store owners are trying it. In one r/woocommerce thread, an owner with about 4,000 products to improve said they were throttled after roughly 50 products. Replies pointed to process rather than a new tool: work in batches (one mentioned MCP with Claude Projects), and another suggested batches of around 50 to 100 with retries and logging. In another thread, a store owner described more than 10,000 old products with poor descriptions they wanted to redo.
Batching is good advice, but it's only half the job. It keeps the AI from stalling. It doesn't tell you which products need work, whether the new copy is accurate, or how to get the old text back when a batch goes wrong.
This tutorial covers the full loop: measure, batch, review, save, verify, undo. I'll use Claude and ChatGPT connected to WordPress over MCP through WPPilot's WooCommerce MCP, and I'll say which steps work on the free plugin and which need Pro.
Disclosure: I work on WPPilot. Everything below was checked against the live docs on 5 October 2026.
Why not export a CSV and paste it into ChatGPT?
For 30 products, that's fine. At a few hundred it breaks down:
- The CSV carries every column, so the re-import can quietly overwrite prices, stock or categories you never meant to touch.
- You lose the link between what the AI read and what it wrote. If a description says the jacket is waterproof, you can't easily tell whether that came from the product data or from the model.
- The only undo is re-importing yesterday's file, which also reverts every legitimate change made since.
Working over MCP changes the unit of work. The AI reads one product record, proposes one description, and saves one field. In the WooCommerce ability reference, the free product editor (woocommerce-edit-product) is described with "PATCH semantics: only the fields given change." If the call contains only description, prices and stock aren't part of the write.
What you need
- WordPress 6.9+ with PHP 8.0+, and WooCommerce 9.0 or newer (WPPilot's store abilities don't register below that).
- WPPilot Free, installed and connected. Pro is optional.
- Claude (desktop, web or Claude Code) or ChatGPT (web, with Developer mode).
- A recent backup. The WPPilot ledger docs are blunt: "Take a backup before a large batch, regardless."
Free vs Pro for this job
| Step | Free | Pro |
|---|---|---|
| List products and read full product records | Yes | Yes |
| Rewrite a product's long description | Yes, one product per call | Yes |
| Rewrite the short description | Not in the free editor's field list | Yes |
| Rewrite variation descriptions | No | Yes |
| Undo an edit from the change ledger | Yes | Yes, except on stock-managed products (see Step 7) |
| Save your writing rules as a reusable skill | Yes | Yes |
| Hold every write until a person approves it | No | Yes, the approval queue |
On a variable product, the free editor can only change the name and description, because prices and stock live on the variations. For a description rewrite that's all you need.
Step 1: Connect in Read Only, as a dedicated user
Give the AI its own WordPress login rather than connecting as yourself. Every change in the ledger then names that user and the agent behind it, and you can switch it off without touching your own login. Check the role requirement first: the WooCommerce products use case says the connection identity needs manage_options on a single site, and that "a plain Shop manager does not meet the connection prerequisite."
Before connecting, go to WPPilot → Settings → Agent access → Safety profile, choose Read Only and save. A fresh install starts on Production Safe, so this is a deliberate change. Under Read Only, write abilities are hidden from the AI's tool list entirely, so nothing can be saved while you measure.
To connect:
-
Claude Code: WPPilot's Connect screen gives you a command like
claude mcp add wppilot-your-site-com --transport http https://your-site.com/wp-json/mcp/wppilot-oauth. Run/mcpinside Claude Code and sign in through the browser as the AI's WordPress user. -
ChatGPT: turn on Developer mode under Settings → Security and login, create an app with your site's
/wp-json/mcp/wppilot-oauthURL and OAuth, then choose the app from the plus menu in each new chat.
Test with something harmless: "Run woocommerce-check-setup and tell me the WooCommerce version and currency."
Step 2: Measure before you write anything
Most bulk rewrites skip this, and it's the step that saves the most time. If you don't know how many products are actually thin, you can't size batches, and you'll spend AI time rewriting descriptions that were fine.
One technical wrinkle: woocommerce-list-products returns a compact row per product (ID, name, SKU, status, type, stock fields, prices, permalink, date modified). The description isn't in it. So measuring takes two reads: list IDs page by page, up to 200 per page, then open each product with woocommerce-get-product.
Audit my WooCommerce product descriptions. Read only, change nothing.
1. Run woocommerce-check-setup.
2. Page through woocommerce-list-products with status "publish" and limit 200.
Collect ID, name, SKU, type and manage_stock for every product.
3. Read each product with woocommerce-get-product. Strip HTML from the
description and count the words. Note whether a short description exists.
4. Flag a product as THIN if the description is empty, has fewer than
40 words, only repeats the product name, or is identical to another
product's description.
5. Show THIN products only: ID, name, SKU, type, word count, short
description yes/no, manage_stock yes/no, and the reason it was flagged.
6. End with totals: products checked, products flagged, count per reason.
Adjust the 40-word threshold to your catalogue. It's plenty for a washer and far too little for skincare.
Two columns matter later. Short description yes/no, because that field needs Pro. manage_stock yes/no, because it changes what can be undone when Pro is active. Save the table as your baseline.
Step 3: Write the rules down once, as a skill
Re-explaining your style in every chat is how tone drifts. Batch 1 gets a careful brief, batch 6 gets "same as before", and by batch 12 the copy reads like three different writers.
WPPilot Free includes Skills: Markdown instructions stored on your WordPress site that an agent loads by name when a task matches. They're saved as a private post type with no public URL. Because the skill lives on the site rather than in the client, Claude and ChatGPT read the same rules. Ask the AI to create one with skill-write:
Create a user skill titled "Product description rules" with this body:
Use only facts in the product record: name, attributes, categories,
dimensions, weight, existing description and short description.
Never invent materials, certifications, health or safety claims,
compatibility, warranty terms, shipping times or prices. If a fact is
missing, leave it out and add the product to a "needs info" list.
Length: 80 to 150 words.
Structure: a short opening paragraph on what it is and who it's for,
3 to 5 bullets from the attributes, then a care or use line only if
the record supports it.
Tone: plain and specific. No "elevate", no "unleash", no exclamation marks.
Keep any existing size chart, HTML table or shortcode exactly as it is.
The "never invent" line matters most. WPPilot's own WooCommerce automation guide says: "Do not infer regulated claims, prices, stock, tax treatment, or shipping facts from incomplete context." A product description is a promise to a customer. A model filling a gap with "BPA-free" or "fits all standard models" turns a copywriting job into a returns problem.
Edit the skill as you go. If batch 2 overuses a phrase, ban it in the skill and every later batch follows.
Step 4: Pick a batch size you can actually read
The 50-to-100 advice from Reddit is about keeping the AI client from stalling. In this workflow the real limit is the reviewer. WPPilot paces writes at 120 per minute per credential, so the site isn't the bottleneck. You are.
What I'd do:
- First batch: 5 to 10 products. Mix a simple product, a variable product, one with an HTML table and one with almost no data.
- Then 25 per batch while you're still tuning the rules.
- Then 50, once three batches in a row need no corrections.
Group the thin list by category. Twenty-five phone cases in a row are quick to review, and the odd one stands out.
Step 5: Draft the batch and review it before saving
Switch the safety profile to Production Safe, since the next steps write. Then ask for drafts only:
Load the "Product description rules" skill.
Take the next 25 products from my THIN list, in category order.
Read each with woocommerce-get-product and draft a new description.
Do not save anything.
Show a review table: ID, name, current description (first 30 words),
proposed description in full, and the facts from the record you used.
List any product you skipped and why. Then stop and wait.
The "facts used" column is your accuracy check. If a description mentions merino wool and the facts column doesn't, that line was invented.
Be clear about what kind of preview this is. WPPilot has a formal preview-before-write feature with a field-by-field diff and a wp-admin screen to apply or discard it, but the docs scope it to edits of posts, pages and media, plus settings changes and deletions. Product edits aren't on that list, so for products the review happens in this chat table.
If a second person has to sign off on store copy, use WPPilot Pro's approval queue with its policy set to hold writes. Each product edit then waits until someone approves it. The docs add a fair warning: "a hold is not a rendered diff." The approver sees the held request and its arguments, so keep the chat table as the readable version.
Keep your own draft ledger
Before approving, ask for the batch as a CSV:
batch, product_id, sku, old_description, new_description, approved_by, approved_at
Save it outside WordPress. This isn't redundant. The change ledger docs say the ledger holds at most the latest 10,000 changes or 90 days of history, whichever limit is hit first, and "drops large before-images once a change is 30 days old, at which point that change can no longer be undone." Ledger exports leave before-images out too. Long descriptions are exactly the kind of large field that ages out, and your CSV is the copy that doesn't.
Step 6: Save only the description, then read it back
Approved, except products 2213 and 2240 (skip those).
For each approved product, call woocommerce-edit-product with only id and
description. Send no other field.
After each save, re-read the product and compare the saved description
with the approved text. Report any mismatch or error.
Finish with the WPPilot change ID for each product.
Practical notes:
- Only id and description. With partial updates, everything you leave out stays untouched.
- Backslashes. The reference warns that "WordPress strips single backslash characters from description on save". Use double backslashes if your copy contains code or file paths.
- Change IDs. Add them to your CSV. If someone questions a description next month, you can go straight to its entry.
Then open three products from the batch in a private window. Check that bullets render, size charts survived and mobile looks right. If you run a page cache or CDN, the old copy may show until it's purged.
Step 7: Undo, and know exactly what can be undone
On WPPilot Free, the basic product editor keeps a before-image of only the fields it changed and writes them back through WooCommerce on rollback. Three ways to use it:
- Ask the AI to call
rollback-changewith the change ID. The call won't run without explicit confirmation, and it compares what it wrote back with the saved before-image rather than assuming it worked. - Open WPPilot → Changes in wp-admin, filter by the agent and the batch's time window, and undo one change or everything the filter shows, as many as 200 at once. No AI involved.
- Use
undo-sessionto revert everything one agent session changed, newest first. It refuses without changing anything if something else edited one of those products in the meantime.
With WPPilot Pro active, Pro's fuller product editor answers under the same ability name, and it has one exception. WPPilot's WooCommerce docs explain that on a product that manages stock, Pro's edit is recorded without a before-image, because restoring it would also write back the old stock level and erase every sale since. Those entries say they can't be undone. Products that don't manage stock roll back normally.
That's what the manage_stock column was for. On Pro, for a stock-managed product, your CSV is the way back: have the AI write old_description back with another woocommerce-edit-product call.
For everyone: rollback isn't a backup. It only knows about WPPilot's own writes, so a manual edit between the AI's save and your undo can produce a result nobody predicted.
Step 8: Repeat, then re-measure
Every batch is the same short loop: draft, review table, CSV, save, read back, spot-check. Every few batches, tighten the skill based on what you corrected, and look at the needs info list. A product with no attributes and no text can't be described honestly by an AI. Someone has to add the facts first.
When the list is done, run the Step 2 audit again and compare the flagged count with your baseline. That number is what you can prove. Whether better descriptions lift sales or search traffic is something to check in your analytics over the following weeks, not something to assume.
Short descriptions and variations
On many themes the short description sits next to the price and the Add to cart button, so it can matter more than the long one. With Pro, the same workflow works with short_description in the edit call. Keep it to two or three lines and give it its own rule in the skill.
Variation descriptions are a separate field on each variation, edited with Pro's woocommerce-edit-product-variation. Most stores can leave them until the parent descriptions are done.
The short version
- Connect Claude or ChatGPT in Read Only as a dedicated user.
- Measure thin descriptions and save the baseline.
- Put your writing rules in a skill.
- Start with 5 to 10 products, then 25, then 50.
- Review a before/after table with the facts used, and keep your own CSV.
- Save only the description, read it back, check the storefront.
- Undo from the ledger when needed. On Pro, stock-managed products need your CSV instead.
- Re-measure at the end.
The free plugin covers the whole loop for long descriptions. Pro adds short descriptions, variations and an approval queue. The Free vs Pro comparison lists everything else.
Top comments (0)