Catalog copy desk that rewrites Shopify listings from photos
See every product with thin copy, missing alt text or no SEO title, review a rewrite built from its own photo, and publish only what you approve.
Build me an app for fixing bad product copy across my Shopify catalog in bulk. I run an ecommerce store, and today I edit listings one at a time in the Shopify admin, which means the weakest products never get touched. I want one screen that shows me everything that is wrong, a suggested rewrite for each product, and a way to approve changes row by row.
The main screen is a table of every product in my store, loaded with Shopify List Products and paged through the whole catalog. For each product show the title, vendor, status, a thumbnail of the main photo, and a set of quality flags. Flag a product when its description is missing or thin (under roughly 300 characters, and make that threshold a setting), when any of its images has no alt text, and when it has no SEO title. Give each product a quality score from how many checks it fails, and sort worst first by default. Let me filter by collection, vendor and status. Load the collection options with Shopify List Custom Collections and Shopify List Smart Collections, and scope the table with the collection filter on Shopify List Products when a collection is picked.
Clicking a row opens a detail view with the product photo on the left and the copy on the right. Use Shopify Get Product to pull the full record including images and variants. On the right show the current description, image alt text and SEO title, each next to its suggested rewrite. Generate the suggestions in a handler that downloads the product's main image from Shopify, uploads it to Gemini with Google Gemini Upload File, polls Google Gemini Get File until the file state is ACTIVE, then calls Google Gemini Generate Content with the image plus the product title, type, vendor, variant names, tags and price. Ask for three things in one response: a product description, alt text for the main image, and an SEO title. The whole point is that the copy describes what is actually in the photo, so instruct the model to work from visible materials, colors, shape and detail rather than inventing specs it cannot see.
Every suggestion is editable inline before anything is saved, and nothing goes to Shopify automatically. Each row has its own approve and publish action, which calls Shopify Update Product to write the approved description, image alt text and SEO title for that one product only. The SEO title is the product's meta title, stored on the Shopify product as the global.title_tag metafield, so write it through the metafields on the product update payload. Image alt text is written through the alt field on the product's images. Never publish a batch in one action.
Add a "Rewrite this collection" button that kicks off a background agent. The agent walks every product in the selected collection, and for each one pulls the record with Shopify Get Product, runs the same image plus details rewrite through Google Gemini Upload File, Google Gemini Get File and Google Gemini Generate Content, and saves a draft description, alt text and SEO title into the app's review queue. The agent must never call Shopify Update Product. It only drafts. When the batch finishes it posts a summary to Slack using Slack Bot Send a Message, covering which collection was processed, how many drafts are waiting for review, and how many products were skipped because their copy already looked fine. Show progress inside the app while the agent runs so I can see how far along it is.
Keep the before and after text for every product the app touches, with a timestamp and the name of whoever approved it. On the product detail view show the previous version and give me a revert button that writes the old description, alt text and SEO title back through Shopify Update Product, so a bad rewrite is never permanent. Drafts from a collection run stay in the review queue until I approve, edit or discard them, and products with a pending draft are marked as such in the main table.
A few practical details. Shopify rate limits requests, so page through the catalog politely and space out the batch agent's calls rather than firing everything at once. Files uploaded to Gemini expire after about 48 hours, so treat them as temporary and re-upload whenever fresh copy is generated. If a product has no image at all, still offer a text only rewrite from the product details and label it clearly so I know the model could not see the item.
What does this prompt do?
- Lists every product in your store with quality flags for thin or missing descriptions, missing image alt text and missing SEO titles, sorted worst first.
- Opens each product beside its photo and suggests new copy written from what is actually in that photo plus the product details.
- Lets you edit any suggestion inline and send it to your store only when you approve that specific product.
- Rewrites a whole collection in the background into a review queue, then posts a Slack summary when the batch is ready.
What do I need to use this?
- A Shopify store, with permission for the app to read and update products
- A Google Gemini API key from Google AI Studio
- A Slack workspace, if you want batch summaries posted to a channel
How can I customize it?
- Change what counts as thin copy, such as the minimum description length before a product gets flagged
- Adjust the tone, length and brand rules the rewrites have to follow
- Choose which Slack channel receives the batch summary, or switch those messages off
FAQs
Can a rewrite reach my storefront without me seeing it first?
What if I approve a rewrite and then decide it was worse?
Will this change or replace my product photos?
Does it work on a big catalog?
Do I need to know how to write AI prompts?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
Stop fixing product listings one browser tab at a time.
Put your whole catalog on one screen, see exactly which listings are letting you down, and approve better copy in a few clicks.