HomeShopifyShopify AI Product Description Generator with…
Shopify

Shopify AI Product Description Generator with n8n (Full Template)








TL;DR

A Shopify AI product description generator n8n workflow listens for new or updated products, sends the title and attributes to OpenAI, and writes a structured SEO description back into Shopify. You get consistent tone, keyword coverage, and minutes-per-product instead of hours. Setup takes about 20 minutes, runs on your own n8n instance, and costs pennies per product at realistic volume.

What this workflow does

Shopify owners lose hours writing product descriptions that sound the same, rank for nothing, and still miss the keyword the customer actually typed. This n8n workflow removes that work. When a product is created or updated in Shopify, n8n fetches the product data, asks OpenAI to write a description using a prompt tuned for your brand voice, logs the result to Google Sheets for review, then updates the product back in Shopify through the Admin API.

The output is structured: a short hook, three to five benefit bullets written as sentences (not SEO sludge), a “Perfect for” line that targets the buyer intent, and a specifications block pulled from the product’s variants and metafields. You can run it on your whole catalog once as a backfill, or leave the webhook live so every new product gets a description the moment it’s published.

Why this beats the default approach

Most stores solve this with a paid Shopify app that charges per description, locks your prompt behind a UI, and stores every draft on the vendor’s server. With n8n you keep three things the apps take away: the prompt (so you can tune it when your brand voice shifts), the model choice (swap GPT-4o for a cheaper model when you’re backfilling 2,000 SKUs), and the data path (descriptions never leave your stack except the single call to OpenAI).

It also beats the classic “paste the title into ChatGPT and copy the result back” loop. That loop is fine at ten products. At two hundred it’s the reason nobody writes descriptions on Tuesdays. The workflow here runs on the Shopify webhook, so there is no copy-paste step and no forgotten product.

What you need before you start

A self-hosted or cloud n8n instance, a Shopify store with Admin API access (custom app token scoped to read_products and write_products), an OpenAI API key, and a Google Sheet you will use as the review log. Total cost to run: roughly $0.002 per description on GPT-4o-mini, or about $0.02 on GPT-4o if you want the premium output. A hosted n8n plan covers the execution cost; a self-hosted instance makes it effectively free.

Node-by-node list

The workflow uses nine nodes, kept deliberately small so you can debug any step without unpicking a giant branch.

  1. Shopify Trigger: listens on the products/create and products/update topics.
  2. HTTP Request (GET product): fetches the full product record including variants and metafields.
  3. Set: normalizes fields like title, vendor, product_type, tags, variants array, existing body_html.
  4. IF: skips the run if the product already has a description longer than 400 characters (prevents infinite loops on update).
  5. OpenAI: sends the structured prompt and receives the description.
  6. Code: cleans the model output, strips any leaked system prose, wraps the body in valid HTML.
  7. Google Sheets: appends a row with product ID, old description length, new description, model, timestamp.
  8. HTTP Request (PUT product): pushes the new description to Shopify Admin API.
  9. Slack or Telegram (optional): alerts the team that a product was auto-described, linking the admin URL.

If you want to link this into the rest of your automation stack, see the pillar guide on n8n Shopify automation for the trigger patterns used across every workflow on the site.

Step-by-step build

  1. Create the Shopify custom app. In your Shopify admin, go to Settings, Apps and sales channels, Develop apps, then Create an app. Give it Admin API access with read_products and write_products scopes. Install the app on your store and copy the Admin API access token. Store it in n8n under Credentials as a Shopify API credential.
  2. Add the Shopify Trigger node. Set topic to products/create. Duplicate the node and set a second trigger to products/update. Connect both into the same branch. n8n will register the webhook with Shopify the moment you activate the workflow.
  3. Add an HTTP Request node to fetch the full product. The webhook payload is light. Call GET https://YOUR-STORE.myshopify.com/admin/api/2024-10/products/{{$json.id}}.json using the same credential. Pull the complete record so you have variants, options, and metafields in one pass.
  4. Normalize the product data in a Set node. Extract the five fields the prompt will actually use: title, vendor, product_type, joined tags, first variant price. A small normalized object keeps your prompt short and the OpenAI bill low.
  5. Add the loop-guard IF node. Check whether body_html.length is greater than 400. If yes, route to a “no-op” branch that stops. This is the single most important piece of plumbing in the workflow. Without it, the products/update webhook fires on your own write, re-triggers the flow, and burns tokens forever.
  6. Configure the OpenAI node. Model: start with gpt-4o-mini. System prompt anchors the brand voice (“write like a confident in-house copywriter, no marketing clichés, no hype words, short sentences”). User prompt injects the normalized product object. Ask for JSON back with three keys: hook, body_html, seo_description.
  7. Parse and clean the response in a Code node. Parse the JSON, enforce a maximum length of 900 characters on body_html, strip any stray backticks, and wrap the body in a single <div> with semantic tags. If parsing fails, route to an error branch that logs the failure and stops. Never push broken HTML to Shopify.
  8. Log to Google Sheets. Append a row to a sheet called Product Description Log with columns product_id, product_title, old_body_length, new_body_html, seo_description, model_used, timestamp. This is your audit trail and the place you’ll look when a description needs a rewrite.
  9. Push the new description back to Shopify. PUT to /admin/api/2024-10/products/{{$json.id}}.json with a body of {"product": {"id": ..., "body_html": "...", "metafields_global_title_tag": "...", "metafields_global_description_tag": "..."}}. The two metafield keys update the SEO title and meta description in one call.
  10. Add the optional Slack or Telegram alert. Send a short message like “New description live for [title]” with a link to /admin/products/{{id}}. For small teams this is the review queue: open the link, skim the copy, edit by hand only if needed.
  11. Activate the workflow and test with one product. Create a draft product with only a title. Save. Within seconds the workflow should fire, log a row in Sheets, and populate the product description. If the loop guard is missing, you’ll see the workflow fire a second time from its own update. Fix that before you turn it on for the full catalog.
  12. Backfill the catalog (optional). Build a second small workflow: Google Sheets trigger reads a list of product IDs you want to regenerate, a Split in Batches node caps throughput at 10 products per minute, and each batch calls the same OpenAI plus Shopify PUT pair. Run it overnight and check the Sheets log in the morning.

Common mistakes to avoid

The first mistake is skipping the loop guard. The products/update webhook fires every time any field on the product changes, including writes from your own workflow. Without the length check, you get an infinite loop that only stops when your OpenAI credit runs out. The second is running GPT-4o on a 5,000-SKU backfill without checking what that costs. At roughly two cents per description you’re looking at $100 to backfill a mid-size store. Fine if you plan for it, painful if you don’t. Start on GPT-4o-mini, sample 50 products, and upgrade only if the quality gap justifies it.

A third mistake is asking the model for pure HTML. Models leak formatting, add ```html fences, or hallucinate tags that break Shopify’s editor. Ask for JSON, parse it, and build the HTML yourself in the Code node. The fourth is trusting the first prompt you write. The prompt is the product. Iterate it on ten real SKUs before you activate the webhook, and keep the winning version in a private Google Doc so a teammate doesn’t overwrite it in n8n.

The fifth mistake is forgetting the metafield SEO fields. The body_html shows up on the product page, but metafields_global_title_tag and metafields_global_description_tag drive the search snippet. Update all three in the same PUT call.

Cost at realistic volume

For a store adding 20 new products a week, running on GPT-4o-mini, you’re looking at roughly $0.04 per week in OpenAI costs, less than a rounding error. A one-time backfill of 1,000 existing products on GPT-4o-mini lands near $2. If you prefer GPT-4o for the final output, multiply by about 10: $20 for the same backfill. n8n execution costs are zero on self-host and covered by any Starter plan on n8n Cloud. Google Sheets is free at this volume.

Compare that to the paid Shopify description apps, which typically charge $19–$49 per month plus per-description fees. The n8n version breaks even in the first week and every month after that is pure margin.

Ready-to-import template

The full workflow JSON, with the prompt, the loop guard, the Sheets schema, and the Shopify PUT payload ready to paste, is available on the downloads page. Import it into your n8n instance, swap in your credentials, and activate. If you want it installed on your server with the webhooks verified and the first 20 products backfilled for you, the done-for-you service handles the setup end to end.

FAQ

Will this overwrite my existing product descriptions?

Only if you tell it to. The loop-guard IF node checks the current body_html length. Products with a description over 400 characters are skipped by default. For a deliberate bulk rewrite, run the separate backfill workflow and target the specific product IDs you want regenerated. Never rely on the live webhook for bulk overwrites.

Which OpenAI model should I use?

Start with GPT-4o-mini for everyday operation. The quality is close to GPT-4o on product copy, and the cost is about one-tenth. Move to GPT-4o only if your brand voice is tight, your price points are high, or your SKUs have nuance that mini misses on sampling. Swap the model in a single node, no other changes needed.

Can I run this on WooCommerce instead of Shopify?

Yes. Swap the Shopify Trigger for a WooCommerce webhook, change the GET and PUT URLs to the WooCommerce REST endpoints, and keep everything else the same. The prompt, the loop guard, the Sheets log, and the Code node all port directly. The WooCommerce product object uses description instead of body_html, so update the two field names in the Set and HTTP nodes.

How do I keep the brand voice consistent across 500 products?

The system prompt is your brand voice anchor. Write it once, paste examples of three descriptions you love, and lock the temperature at 0.4. For stores with very distinct collections, add a routing IF node after the Set step that picks a different system prompt based on product_type. This scales to as many voices as you have collections without ever duplicating the workflow.

What happens when OpenAI returns an error or times out?

The Code node’s JSON parse step fails closed. It routes to an error output that logs the failure to a separate Sheets tab and stops. Nothing gets written to Shopify on a bad response. You review the failures the next morning, retry the affected product IDs through the backfill workflow, and move on. The live product page is never in a broken state.

Related guides

Read the Shopify automation category for the full set of n8n workflows built for store operators, including low-stock alerts, daily sales reports, and order-risk scoring. For the broader tool stack, see the daily sales report workflow and the low-stock alert build.