Generate SEO Product Descriptions at Scale with n8n + AI

AgentRoost · June 3, 2026 · 7 min read · View as Markdown
AgentRoost — n8n for Business

The Problem with Writing Product Descriptions at Scale

A product catalog with 300 SKUs needs 300 unique, keyword-rich descriptions. Copy-pasting a template and swapping the product name produces thin, duplicate-content spam that Google deprioritizes and shoppers ignore. Outsourcing to a copywriter costs thousands. Paying a per-token AI API bill for that volume adds up fast — and still requires you to wire everything together yourself.

The better path: a scheduled n8n workflow that pulls every product, feeds a structured prompt to an AI node, and writes the result back to Shopify or WooCommerce without you touching a keyboard.

This post walks you through exactly that build, node by node.


What the Workflow Actually Does

At a high level:

  1. Reads your product catalog from Shopify or WooCommerce via HTTP.
  2. Loops over each product, extracting the name, category, key attributes, and any existing description stub.
  3. Sends a structured prompt to an AI/LLM node, which returns a polished, SEO-aware description.
  4. Pushes the result back using the store's update endpoint.
  5. Optionally logs every run (product ID, tokens used, new description length) to a Google Sheet or Airtable for QA review.

Building the Workflow — Node by Node

1. Schedule Trigger

Start with a Schedule Trigger node. For a one-off bulk run, set it to run once at a specific time. For an ongoing "new products get descriptions automatically" setup, a daily interval (e.g., every night at 2 AM) keeps the catalog fresh without hammering your store's API.

{
  "rule": {
    "interval": [{ "field": "cronExpression", "expression": "0 2 * * *" }]
  }
}

2. HTTP Request — Fetch Product List

Use an HTTP Request node to call your store's REST API.

For WooCommerce:

GET https://your-store.com/wp-json/wc/v3/products
  ?per_page=100
  &status=publish
  &_fields=id,name,categories,attributes,description

Add your WooCommerce consumer key and secret under Authentication → Header Auth (Authorization: Basic base64(key:secret)).

For Shopify:

GET https://your-store.myshopify.com/admin/api/2024-01/products.json
  ?limit=250
  &fields=id,title,product_type,tags,body_html

Use Header Auth with X-Shopify-Access-Token: <your-token>.

If your catalog is larger than one page, add a Loop Over Items node and paginate by incrementing the page or page_info cursor until the response is empty.

3. Loop Over Items

Drop a Loop Over Items node (n8n's built-in batching node) after the HTTP Request. Set Batch Size to 1 so each iteration processes a single product — this keeps the AI prompt clean and the error handling granular.

Inside the loop, you'll place the Set node, the AI node, and the update HTTP Request.

4. Set — Build the Prompt

A Set node formats the data before it hits the AI. This is where the prompt engineering lives.

productName:     {{ $json.title }}
category:        {{ $json.product_type }}
tags:            {{ $json.tags }}
existingContent: {{ $json.body_html | stripHtml | truncate(200) }}

Then build the prompt field:

Write a product description for an e-commerce listing.

Product: {{ $json.productName }}
Category: {{ $json.category }}
Tags/Attributes: {{ $json.tags }}
Existing content hint: {{ $json.existingContent }}

Requirements:
- 80-120 words
- Start with a customer benefit, not the product name
- Include the main keyword naturally ({{ $json.productName }})
- Avoid superlatives like "best" or "amazing"
- End with a soft call to action ("Perfect for...", "Ideal if...")
- Output plain text only, no markdown

The more specific the requirements in this node, the less post-processing you need downstream.

5. AI / LLM Node — Generate the Description

Connect the Set node to n8n's AI / LLM node (available natively in n8n). Set the model — GPT-4o-mini is fast and cost-efficient for this task; Claude 3 Haiku is another solid choice for bulk description work. Point the prompt field at {{ $json.prompt }}.

Key setting: Set Max Tokens to around 200. You don't want the model to ramble; descriptions should be tight. Set Temperature to 0.6 — enough creativity to vary tone across SKUs without hallucinating specs.

The node returns the generated text in $json.text (or $json.choices[0].message.content depending on the node version).

6. Set — Clean the Output

Run the AI response through another Set node to trim whitespace, strip any stray markdown characters the model snuck in, and cap length:

cleanDescription: {{ $json.text.trim().replace(/\n{2,}/g, '\n') }}

7. HTTP Request — Write Back to the Store

WooCommerce:

PUT https://your-store.com/wp-json/wc/v3/products/{{ $json.id }}
Body (JSON): { "description": "{{ $json.cleanDescription }}" }

Shopify:

PUT https://your-store.myshopify.com/admin/api/2024-01/products/{{ $json.id }}.json
Body (JSON): { "product": { "id": {{ $json.id }}, "body_html": "{{ $json.cleanDescription }}" } }

8. Optional: Log to Google Sheets

Add a Google Sheets → Append Row node after the update call. Log productId, productName, timestamp, and descriptionLength. This gives your content team a simple QA sheet to spot-check before descriptions go live — or to flag products the model handled poorly (very short results, question marks in the output, etc.).


Handling Edge Cases

Products that already have good descriptions: Add an IF node after the HTTP Request. Check $json.body_html.length > 300 — if true, skip to the next iteration. No point rewriting copy that already works.

API rate limits: n8n's Wait node with a 500ms pause between iterations is usually enough for both Shopify and WooCommerce's standard rate limits.

Model hallucinating specs: If the AI invents dimensions or materials that don't exist, tighten the prompt with a negative constraint: "Do not invent any product specifications. Only use details present in the product name, tags, and category."

Sizing the test run: Before processing your entire catalog, run the workflow against 10–20 products first. Review the outputs and check your token log. It is much easier to tune the prompt at that scale than to re-process hundreds of SKUs after discovering a systematic issue.


Run It on AgentRoost (No API Keys, No Server Setup)

Here is the friction you avoid when you run this on your own n8n instance on AgentRoost:

  • No API key for the AI node. The LLM credits are included in your subscription. You pick the model (350+ available, switch anytime), hit save, and the workflow runs. No OpenAI billing account, no separate Anthropic key, no credit card to manage on a third platform.
  • No server to provision. Your instance is already running at https://<your-id>.agentroost.app — public HTTPS URL, webhooks work immediately.
  • No Docker, no nginx, no SSL cert. It is your own n8n environment; you own the workflows and credentials, but the DevOps layer is already handled.

How to get started:

  1. Sign up at agentroost.app/en/pricing — from $19.99/mo, 14-day money-back guarantee.
  2. Pick the n8n framework, name your instance.
  3. Your private n8n editor opens. Import or build the workflow above.
  4. Add your WooCommerce/Shopify credentials in n8n's Credentials panel.
  5. Activate the workflow. The AI nodes draw from your included credits — no extra setup.

Compare plans →


Tips for Better Descriptions

  • Feed more context. If your product data includes materials, dimensions, or use-case tags, add them to the Set node prompt. The more grounded the input, the more accurate the output.
  • Batch by category. Run electronics in one batch, apparel in another — adjust the system prompt tone per category (technical vs. lifestyle).
  • A/B test two models. Run the workflow twice with different models on a small batch and compare the outputs before committing to the full catalog.
  • Store the raw AI output separately. Keep the original AI response alongside the final description in your log sheet. If you tweak the prompt later, you can re-evaluate old outputs without re-running the workflow.

Frequently asked questions

Do I need an OpenAI API key to use the AI node in n8n on AgentRoost?

No. On AgentRoost, AI/LLM credits are included in your subscription. The AI node is pre-wired to those credits — you choose a model from 350+ options and the workflow runs without any external API key or billing account.

How many products can I realistically process in one run?

It depends on your store's API rate limits and your subscription tier. A conservative approach with a 500ms Wait between items handles 100–300 products comfortably in a single nightly run. For larger catalogs, paginate across multiple scheduled runs.

Will the workflow overwrite descriptions I already edited by hand?

Only if you let it. Add an IF node that checks description length (e.g., skip if body_html.length > 300). Products with existing long descriptions skip the AI step entirely — the workflow only fills in missing or very short copy.

Can I cancel my AgentRoost subscription if I only need this for one batch run?

Yes. AgentRoost is month-to-month with a 14-day money-back guarantee. You can run the bulk generation, export your workflows as JSON from the n8n editor, and cancel if you don't need the instance going forward.

What happens to my workflows and credentials if I cancel?

You own your n8n instance and its data. Before cancelling, export your workflows (n8n's built-in export to JSON) and note down any credentials you stored. The instance is shut down on cancellation, so export first.