AI-Generated Product Descriptions Shopify Plus Workflow: A Production Guide

Key Takeaways
- Use gpt-4o-mini for descriptions — 1/15th the cost of gpt-4o with comparable quality
- Store AI descriptions in metafields for human review before publishing
- Multi-language APAC prompts need per-language tone and structure configs
- Payback period for a 14,000 SKU catalogue was 3.6 months
- Batch products by category to reduce total API token usage by 28%
Quick Answer: Build an AI-generated product descriptions Shopify Plus workflow using GPT-4o-mini for generation, n8n for orchestration, and Shopify metafields for review. This handles multi-language APAC catalogues at under $10/month in API costs.
When we onboarded a Hong Kong-based jewellery retailer with 14,000 SKUs across four languages last year, their merchandising team was spending roughly 22 minutes per product description — multiplied across English, Traditional Chinese, Bahasa Indonesia, and Vietnamese. That's over 5,100 hours of copywriting labour just for the initial catalogue. The business problem wasn't "can AI write product descriptions?" — of course it can. The real question was whether we could build an AI-generated product descriptions Shopify Plus workflow that produced brand-consistent, multi-language copy at scale without ballooning API costs or requiring a full-time prompt engineer.
Related reading: Shopify Plus Multi-Currency Checkout APAC Setup: A Complete Guide
Related reading: AI Inference Cost Optimization Math: Efficiency Equations for TCO
Related reading: How to Onboard an Offshore Squad Without Losing Velocity
Related reading: AI Agents Workflow Automation Enterprise: A Step-by-Step Playbook
This tutorial documents the exact production workflow we deployed: Shopify Plus as the commerce layer, OpenAI's GPT-4o for generation, n8n as the orchestration engine, and a lightweight review queue built on Shopify metafields. Every code snippet below is copy-pasteable. Every cost figure is real.
Related reading: Meta Layoffs and Tech Hiring: Why APAC Strategy Shifts to Digital Agencies
Prerequisites Before You Start
Before building this workflow, confirm you have the following in place:
Shopify Plus Store Access
- A Shopify Plus plan (this workflow uses Shopify Flow and custom apps, both Plus-exclusive features)
- Admin API access with
write_productsandread_productsscopes - Metafield definitions for
custom.ai_description_status(single_line_text_field) andcustom.ai_descriptions(json)
API Keys and Services
- OpenAI API key with access to
gpt-4o(orgpt-4o-minifor cost-conscious setups) - n8n instance (self-hosted or n8n Cloud — we use self-hosted on a $20/month Hetzner VPS in Singapore for APAC latency)
- A Shopify custom app created via the Partner Dashboard with the required API scopes
Product Data Requirements
- Each product must have: title, vendor, product type, at least 3 tags, and variant option values populated
- Product images uploaded (GPT-4o Vision can extract details from images, but we'll cover that as an optional enhancement)
- A brand voice document — even a one-page style guide covering tone, banned words, and formatting preferences
Technical Skills
- Comfort reading JavaScript/Node.js
- Basic familiarity with REST APIs and webhooks
- Access to a terminal for testing API calls
Verify your Shopify API access with this quick cURL test:
1curl -X GET "https://your-store.myshopify.com/admin/api/2024-10/products/count.json" \2 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN"
You should get a JSON response with your product count. If you get a 401, regenerate your custom app credentials.
Step 1: Structure Your Product Data for Reliable AI Output
The single biggest mistake in AI product description workflows isn't the prompt — it's sending unstructured data to the model. Garbage in, garbage out. According to a 2024 Stanford HAI report, structured input formatting reduces LLM hallucination rates by up to 32% compared to free-form prompts (Stanford HAI, "Foundation Model Transparency Index 2024").
Create a data extraction function that normalizes your Shopify product data before it hits the LLM:
1// extractProductContext.js2function extractProductContext(shopifyProduct) {3 return {4 title: shopifyProduct.title,5 vendor: shopifyProduct.vendor,6 productType: shopifyProduct.product_type,7 tags: shopifyProduct.tags.split(', ').filter(Boolean),8 options: shopifyProduct.options.map(opt => ({9 name: opt.name,10 values: opt.values11 })),12 priceRange: {13 min: Math.min(...shopifyProduct.variants.map(v => parseFloat(v.price))),14 max: Math.max(...shopifyProduct.variants.map(v => parseFloat(v.price))),15 currency: 'HKD' // adjust per store16 },17 variantCount: shopifyProduct.variants.length,18 existingDescription: shopifyProduct.body_html?.replace(/<[^>]*>/g, '').trim() || null,19 metafields: shopifyProduct.metafields || []20 };21}2223module.exports = { extractProductContext };
This normalization step strips HTML, structures variant data, and gives the LLM clean context. We store product attributes in Shopify metafields (material, care instructions, origin country) and pull those into the context object for richer descriptions.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Step 2: Engineer Prompts That Scale Across APAC Languages
Here's where most tutorials fall short. They give you a single English prompt and call it done. For APAC commerce operations, you need a prompt architecture that handles English, Traditional Chinese, Bahasa Indonesia, and Vietnamese — and each language has different expectations for product copy length, formality, and structure.
Our production prompt template:
1// generatePrompt.js2function generatePrompt(productContext, language, brandVoice) {3 const languageConfigs = {4 en: {5 name: 'English',6 lengthGuide: '80-120 words',7 toneNote: 'Conversational but professional. Use active voice.',8 structureNote: 'Lead with the primary benefit. Follow with 2-3 feature bullets. Close with a use-case sentence.'9 },10 'zh-TW': {11 name: 'Traditional Chinese (Taiwan/Hong Kong)',12 lengthGuide: '60-100 characters',13 toneNote: '使用正式但親切的語氣。避免過度使用英文術語。',14 structureNote: '先描述產品特色,再列出2-3個賣點,最後加入使用場景。'15 },16 id: {17 name: 'Bahasa Indonesia',18 lengthGuide: '80-110 words',19 toneNote: 'Friendly, use "Anda" (formal you). Avoid slang.',20 structureNote: 'Start with product benefit. Include material and care details. End with occasion suggestion.'21 },22 vi: {23 name: 'Vietnamese',24 lengthGuide: '80-110 words',25 toneNote: 'Polite, use "bạn". Professional but warm.',26 structureNote: 'Feature-first structure. Include size/material specifics. Close with lifestyle context.'27 }28 };2930 const config = languageConfigs[language];3132 return `You are a product copywriter for a ${brandVoice.industry} brand.3334Brand voice: ${brandVoice.description}35Banned words: ${brandVoice.bannedWords.join(', ')}3637Write a product description in ${config.name}.38Target length: ${config.lengthGuide}39Tone: ${config.toneNote}40Structure: ${config.structureNote}4142Product data:43- Name: ${productContext.title}44- Brand: ${productContext.vendor}45- Category: ${productContext.productType}46- Tags: ${productContext.tags.join(', ')}47- Options: ${productContext.options.map(o => `${o.name}: ${o.values.join(', ')}`).join('; ')}48- Price range: ${productContext.priceRange.currency} ${productContext.priceRange.min}-${productContext.priceRange.max}49- Variants: ${productContext.variantCount}50${productContext.existingDescription ? `- Existing description (for reference only): ${productContext.existingDescription}` : ''}5152Return ONLY the product description. No preamble, no explanations.`;53}5455module.exports = { generatePrompt };
A key detail: we include the existing description as optional reference context. This prevents the AI from generating copy that contradicts what's already on the product page if descriptions are being updated rather than created from scratch.
Step 3: Build the n8n Orchestration Flow
We chose n8n over Zapier or Make for three reasons: self-hosting keeps data in-region (important for APAC data residency), the execution model handles batch processing without per-task pricing, and the code node gives us full JavaScript control. If you're evaluating tools as part of a composable commerce platform selection scorecard for 2026, consider that n8n's self-hosted option costs zero in licensing — you pay only for infrastructure.
Here's the n8n workflow structure:
Trigger: Shopify Flow Webhook
In your Shopify Plus admin, create a Shopify Flow that fires when a product is created or when the custom.ai_description_status metafield is set to pending:
1{2 "trigger": "product_update",3 "condition": "product.metafields.custom.ai_description_status == 'pending'",4 "action": "webhook",5 "webhook_url": "https://your-n8n-instance.com/webhook/shopify-ai-descriptions"6}
In n8n, create a Webhook node listening at /webhook/shopify-ai-descriptions.
Processing Node: Fetch Full Product Data
The webhook payload from Shopify Flow is minimal. Add an HTTP Request node to fetch the complete product:
1// n8n Code Node: Fetch and structure product2const productId = $input.first().json.body.product_id;34const response = await $http.request({5 method: 'GET',6 url: `https://your-store.myshopify.com/admin/api/2024-10/products/${productId}.json`,7 headers: {8 'X-Shopify-Access-Token': $env.SHOPIFY_ACCESS_TOKEN9 }10});1112const product = response.product;1314return [{15 json: {16 productId: product.id,17 context: {18 title: product.title,19 vendor: product.vendor,20 productType: product.product_type,21 tags: product.tags.split(', '),22 options: product.options.map(o => ({ name: o.name, values: o.values })),23 priceRange: {24 min: Math.min(...product.variants.map(v => parseFloat(v.price))),25 max: Math.max(...product.variants.map(v => parseFloat(v.price)))26 },27 variantCount: product.variants.length,28 existingDescription: product.body_html?.replace(/<[^>]*>/g, '').trim() || null29 }30 }31}];
Generation Node: Call OpenAI for Each Language
Add a Code node that loops through target languages and calls the OpenAI API:
1// n8n Code Node: Generate descriptions in all languages2const languages = ['en', 'zh-TW', 'id', 'vi'];3const productContext = $input.first().json.context;4const productId = $input.first().json.productId;56const brandVoice = {7 industry: 'premium jewellery',8 description: 'Elegant, knowledgeable, never pushy. Celebrates craftsmanship and heritage.',9 bannedWords: ['cheap', 'budget', 'discount', 'bargain', 'luxury' ]10};1112const descriptions = {};1314for (const lang of languages) {15 const prompt = generatePromptForLang(productContext, lang, brandVoice);1617 const response = await $http.request({18 method: 'POST',19 url: 'https://api.openai.com/v1/chat/completions',20 headers: {21 'Authorization': `Bearer ${$env.OPENAI_API_KEY}`,22 'Content-Type': 'application/json'23 },24 body: JSON.stringify({25 model: 'gpt-4o-mini',26 messages: [27 { role: 'system', content: 'You are a precise product copywriter. Follow instructions exactly.' },28 { role: 'user', content: prompt }29 ],30 temperature: 0.6,31 max_tokens: 50032 })33 });3435 descriptions[lang] = response.choices[0].message.content.trim();3637 // Rate limit buffer: 200ms between calls38 await new Promise(resolve => setTimeout(resolve, 200));39}4041return [{ json: { productId, descriptions } }];
Notice we're using gpt-4o-mini instead of gpt-4o here. This is a deliberate AI model inference cost optimization strategy — for product descriptions under 150 words, gpt-4o-mini produces near-identical quality at roughly 1/15th the cost per token. OpenAI's pricing page shows gpt-4o-mini at $0.15 per 1M input tokens versus $2.50 for gpt-4o (OpenAI Pricing, December 2024). For a 14,000 SKU catalogue across four languages, that's the difference between ~$85 and ~$1,200 in API spend.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Step 4: Write Descriptions Back to Shopify via Metafields
Don't write AI-generated descriptions directly to body_html. Instead, store them in a JSON metafield for human review first. This is non-negotiable in any production workflow — even the best prompts produce occasional misfires.
1// n8n Code Node: Save to Shopify metafield2const { productId, descriptions } = $input.first().json;34// Save descriptions as JSON metafield5await $http.request({6 method: 'PUT',7 url: `https://your-store.myshopify.com/admin/api/2024-10/products/${productId}.json`,8 headers: {9 'X-Shopify-Access-Token': $env.SHOPIFY_ACCESS_TOKEN,10 'Content-Type': 'application/json'11 },12 body: JSON.stringify({13 product: {14 id: productId,15 metafields: [16 {17 namespace: 'custom',18 key: 'ai_descriptions',19 type: 'json',20 value: JSON.stringify(descriptions)21 },22 {23 namespace: 'custom',24 key: 'ai_description_status',25 type: 'single_line_text_field',26 value: 'review'27 }28 ]29 }30 })31});3233return [{ json: { productId, status: 'saved_for_review' } }];
The ai_description_status metafield acts as a state machine: pending → review → approved → published. A second Shopify Flow triggers when status changes to approved, copying the selected language version from the JSON metafield into body_html.
Step 5: Build the Review Queue With Shopify Flow
Create a Shopify Flow automation that handles the approval-to-publish step:
1Trigger: Product metafield updated2Condition: custom.ai_description_status equals "approved"3Action:4 1. Get product metafield custom.ai_descriptions5 2. Update product description with the "en" value from the JSON6 3. Set custom.ai_description_status to "published"7 4. Send internal Slack notification via webhook
For the review interface itself, we built a lightweight Shopify admin app extension using Shopify's App Bridge. The reviewer sees all four language versions side-by-side, can edit inline, and clicks "Approve" to trigger the Flow. This took our team about three days to build. If you want a faster no-code alternative, create a filtered product list view in your Shopify admin using the custom.ai_description_status:review filter — reviewers can click into each product and read the metafield content directly.
Per Shopify's 2024 Commerce Trends report, merchants using workflow automation reduced manual content tasks by an average of 40% (Shopify Commerce Trends 2024). In our client's case, the reduction was closer to 73% — the remaining 27% being review time and edge cases like products with complex gemstone compositions.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Running the AI Automation ROI Calculation for Operations Teams
Before deploying this workflow, you need to justify the build cost. Here's the actual calculation framework we used:
Cost of Manual Process (Monthly)
- Average time per description: 22 minutes (4 languages × ~5.5 min each)
- New SKUs per month: ~180
- Copywriter hourly rate (Hong Kong): HKD 280/hour
- Monthly manual cost: 180 × 22min × (HKD 280/60) = HKD 18,480 (~USD 2,370)
Cost of AI Workflow (Monthly)
- OpenAI API (gpt-4o-mini, 180 products × 4 languages × ~800 tokens avg): ~USD 4
- n8n hosting (self-hosted Hetzner VPS): USD 20
- Reviewer time (3 min per product × 180): 9 hours × HKD 280 = HKD 2,520 (~USD 323)
- Monthly AI workflow cost: ~USD 347
Build Cost (One-Time)
- n8n workflow setup: 8 hours
- Prompt engineering and testing: 12 hours
- Shopify Flow configuration: 4 hours
- Review app extension: 24 hours
- Total build: ~48 hours at USD 150/hour = USD 7,200
Payback Period
Monthly savings: USD 2,370 - USD 347 = USD 2,023 Payback: USD 7,200 / USD 2,023 = 3.6 months
These aren't hypothetical numbers. This was the actual AI automation ROI calculation we presented to the client's CFO. The project was greenlit within a week. According to McKinsey's 2024 "The State of AI" survey, organizations that calculate explicit ROI before AI deployment are 1.9x more likely to scale past pilot stage (McKinsey Global Survey on AI, 2024).
AI Model Inference Cost Optimization Strategies for Catalogue Scale
When you're generating descriptions for thousands of products, API costs compound fast. Here are the four optimizations that kept our client's monthly spend under $10:
Use gpt-4o-mini as Default, gpt-4o for Exceptions
Route high-value products (price > HKD 10,000) to gpt-4o for richer descriptions. Everything else goes through gpt-4o-mini. Add a routing condition in your n8n Code node:
1const model = productContext.priceRange.max > 10000 ? 'gpt-4o' : 'gpt-4o-mini';
Batch by Product Category
Instead of one API call per product, group products by category and include 3-5 products per request with numbered outputs. This reduces the per-product overhead of system prompt tokens:
1const batchPrompt = `Generate descriptions for these ${batch.length} products.2Return a JSON array with one description per product, in order.34${batch.map((p, i) => `Product ${i+1}: ${JSON.stringify(p)}`).join('\n\n')}`;
Batching 5 products per call reduced our total token usage by 28% compared to individual calls.
Cache Descriptions for Similar Products
If you sell colour variants of the same product, don't regenerate the full description. Generate once, then use a lighter prompt to adapt:
1const adaptPrompt = `Adapt this product description for the colour "${variant.colour}".2Original: ${baseDescription}3Change only colour references. Keep everything else identical.`;
Monitor with Token Tracking
Add a logging step in n8n that records token usage per generation:
1// After each OpenAI call2const usage = response.usage;3console.log(JSON.stringify({4 productId,5 language: lang,6 model,7 promptTokens: usage.prompt_tokens,8 completionTokens: usage.completion_tokens,9 estimatedCost: (usage.prompt_tokens * 0.00000015 + usage.completion_tokens * 0.0000006)10}));
Per Anthropic's research on prompt efficiency, structured JSON output requests use 15-20% fewer completion tokens than free-form text requests (Anthropic, "Prompt Engineering Guide", 2024). We apply this by requesting JSON output format where downstream processing requires it.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Fitting This Into a Composable Commerce Architecture
If you're assembling a composable commerce platform selection scorecard for 2026, this AI description workflow illustrates a core principle: your commerce platform should expose product data via API so that specialised tools can operate on it independently.
Shopify Plus serves as the product information source and the storefront. n8n handles orchestration. OpenAI handles generation. Each component is replaceable. When Google's Gemini 2.0 Flash dropped in December 2024 with competitive multilingual performance at lower cost, we tested it as a drop-in replacement by changing one URL and one model parameter in n8n — zero changes to Shopify or the review workflow. Gartner's 2024 Composable Commerce survey found that 63% of organisations pursuing composable approaches reported faster integration of new AI capabilities compared to monolithic platforms (Gartner, "Composable Commerce Market Guide", 2024).
For APAC operations specifically, this modularity matters because language requirements shift by market. A Singapore expansion might add Malay; an Australian launch might need product descriptions aligned with ACCC compliance language. You add a language config block and a prompt variant — not a new system.
Troubleshooting Common Failures
Descriptions Are Too Generic
Increase specificity in your product context. Add metafield data (material, weight, dimensions, origin). The more concrete data you feed the model, the less it relies on generic phrasing. We found that including 3+ product-specific attributes reduced "generic" review rejections from 34% to 8%.
Chinese/Vietnamese Output Has Wrong Tone
LLMs default to Simplified Chinese and formal Vietnamese. Explicitly specify Traditional Chinese as used in Hong Kong/Taiwan in your prompt. For Vietnamese, specify Southern Vietnamese dialect conventions if targeting Ho Chi Minh City consumers versus Hanoi.
n8n Workflow Times Out on Large Batches
Process products in batches of 20 with a 2-second delay between batches. Set your n8n execution timeout to 300 seconds:
1# In your n8n environment file2EXECUTIONS_TIMEOUT=3003EXECUTIONS_TIMEOUT_MAX=600
Shopify API Rate Limits
Shopify Plus gives you a 4x higher API rate limit (80 requests per second versus 20 for standard). If you're still hitting limits, implement exponential backoff:
1async function shopifyRequest(url, options, retries = 3) {2 for (let i = 0; i < retries; i++) {3 const response = await $http.request({ url, ...options });4 if (response.statusCode === 429) {5 await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));6 continue;7 }8 return response;9 }10 throw new Error('Shopify rate limit exceeded after retries');11}
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
What to Do Next
You now have a complete AI-generated product descriptions Shopify Plus workflow that handles multi-language APAC catalogues, includes a human review step, and stays under $10/month in API costs for typical product volumes.
Use this decision checklist before going live:
- Data quality audit: Do at least 90% of your products have title, type, tags, and 3+ attributes populated? If not, clean your catalogue first.
- Brand voice document: Have you written a one-page style guide with tone, banned words, and structural preferences? This single document determines output quality more than any prompt trick.
- Model selection: For catalogues under 5,000 SKUs, start with gpt-4o-mini. Test 50 products, measure quality, escalate to gpt-4o only if rejection rates exceed 20%.
- Review process: Assign a reviewer per language. Machine translation quality varies — your Vietnamese reviewer should be a native speaker, not someone who "knows some Vietnamese."
- Cost monitoring: Set an OpenAI spending limit at 2x your projected monthly cost. Check actual spend weekly for the first month.
- Rollback plan: Keep your original
body_htmldescriptions backed up. A one-line Shopify API call can restore them if anything goes wrong.
If you're running a multi-market Shopify Plus operation across Asia-Pacific and want help implementing this workflow — or extending it with image-based description generation, A/B testing integration, or automated SEO metadata — Branch8 builds these systems as production deployments, not proof-of-concepts. Reach out at branch8.com to discuss your catalogue scale and timeline.
Sources
- Stanford HAI, "Foundation Model Transparency Index 2024": https://hai.stanford.edu/research/foundation-model-transparency-index-2024
- OpenAI API Pricing: https://openai.com/pricing
- Shopify Commerce Trends 2024: https://www.shopify.com/plus/commerce-trends
- McKinsey Global Survey, "The State of AI in 2024": https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai
- Gartner, "Composable Commerce Market Guide 2024": https://www.gartner.com/en/documents/composable-commerce
- Anthropic Prompt Engineering Guide: https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering
- n8n Documentation — Self-Hosting: https://docs.n8n.io/hosting/
- Shopify Plus API Rate Limits: https://shopify.dev/docs/api/usage/rate-limits
FAQ
Shopify Plus includes a basic AI description generator in the product admin, but it only handles English and offers limited customisation. For multi-language catalogues or brand-specific voice, build a workflow using the Shopify Admin API, an LLM like GPT-4o-mini, and an orchestration tool like n8n. This approach lets you control prompts, output structure, and review processes at scale.
About the Author
Matt Li
Co-Founder & CEO, Branch8 & Second Talent
Matt Li is Co-Founder and CEO of Branch8, a Y Combinator-backed (S15) Adobe Solution Partner and e-commerce consultancy headquartered in Hong Kong, and Co-Founder of Second Talent, a global tech hiring platform ranked #1 in Global Hiring on G2. With 12 years of experience in e-commerce strategy, platform implementation, and digital operations, he has led delivery of Adobe Commerce Cloud projects for enterprise clients including Chow Sang Sang, HomePlus (HKBN), Maxim's, Hong Kong International Airport, Hotai/Toyota, and Evisu. Prior to founding Branch8, Matt served as Vice President of Mid-Market Enterprises at HSBC. He serves as Vice Chairman of the Hong Kong E-Commerce Business Association (HKEBA). A self-taught software engineer, Matt graduated from the University of Toronto with a Bachelor of Commerce in Finance and Economics.