Skip to main content
Innovatrix Infotech — home
LLMs for Product Descriptions at Scale: How D2C Brands Can Auto-Generate SEO Copy Without Sounding Like a Bot cover
AI Automation

LLMs for Product Descriptions at Scale: How D2C Brands Can Auto-Generate SEO Copy Without Sounding Like a Bot

Ask an LLM to write a product description and you’ll get something that sounds exactly like every other AI-generated description on the internet. That’s not a model failure — it’s a prompt failure. Here’s the exact pipeline we built for FloraSoul India’s 200+ SKU catalog.

Photo of Rishabh SethiaRishabh SethiaFounder & CEO28 March 2026Updated 23 March 202610 min read1.6k words
#ai-automation#shopify#llm#product-descriptions#d2c#ecommerce

LLMs for Product Descriptions at Scale: How D2C Brands Can Auto-Generate SEO Copy Without Sounding Like a Bot

The worst AI product descriptions I’ve seen share one trait: they were generated correctly but prompted incorrectly.

Ask an LLM to “write a product description for this moisturiser” and you’ll get something that sounds exactly like every other AI-generated description on the internet: “Introducing our luxurious, nourishing moisturiser that deeply hydrates your skin...”

That’s not a model failure. That’s a prompt failure. And it’s fixable.

We built a product description generation pipeline for FloraSoul India, an Ayurvedic skincare brand with 200+ SKUs. Before our work, they had placeholder descriptions on half their catalogue — identical, product-category-generic copy that was doing zero SEO work and zero conversion work. After our pipeline ran, every SKU had brand-consistent, semantically rich descriptions. Combined with the full Shopify migration and UX overhaul, mobile conversion rate improved 41% and average order value improved 28%.

Here’s exactly how we built it — and the specific mistakes that make AI descriptions sound like bots.


Step 1: The System Prompt (Where Most People Cut Corners)

The system prompt is the most important part of AI-generated copy. It’s the brand DNA that shapes every output. Most people skip this entirely and then complain that their AI copy sounds generic.

Here’s the structure we use:

<context>
You are a copywriter for [Brand Name], a [brief brand description].
Our brand voice is: [3–5 specific adjectives with examples]
Our customer is: [specific persona with values and concerns, not just “women aged 25–45”]
Our unique selling position: [what makes this brand different]
Things we NEVER say: [banned phrases, corporate language, AI clichés]
Things we ALWAYS include: [brand-specific elements — heritage, ingredients, philosophy]
</context>

<task>
Write a product description for the product data below.
</task>

<constraints>
- Length: 80–120 words for the main description, 3–5 bullet points for key features
- SEO: Include the primary keyword naturally — once in the first 50 words, once in the bullets
- Avoid: “luxurious,” “nourishing,” “premium,” “game-changing,” “cutting-edge”
- Tone: [conversational/technical/poetic — specify exactly]
</constraints>

<output_format>
Return JSON:
{
  "headline": "...",
  "body": "...",
  "bullets": ["...", "...", "..."],
  "meta_description": "...",
  "seo_keyword_placement_check": true/false
}
</output_format>

For FloraSoul, we had an extensive “things we never say” list that came from two hours with the founder: no “luxury,” no “glow,” no “transformative” — words so overused in skincare they’ve become invisible. Instead: specific ingredient names, Ayurvedic heritage references, ritual language.


Step 2: Few-Shot Examples for Brand Voice

Zero-shot prompting works for generic tasks. For brand voice replication, few-shot is still the most reliable technique in 2026.

We took 5 of the best-performing existing product descriptions (ones the founder had written herself and loved), formatted them as examples in the prompt, and told the model: write in this style.

The key: examples must be representative, not random. One mediocre example in your few-shot set will drag every output toward that mediocrity.

# Few-shot example structure
examples = [
    {
        "product_name": "Kumkumadi Face Oil",
        "good_description": "Rooted in Ayurvedic tradition, Kumkumadi brightens complexions naturally with cold-pressed saffron and 15 botanicals...",
        "why_it_works": "Specific ingredient reference, ritual language, no generic claims"
    },
    # 4 more examples...
]

We included the “why it works” annotation for each example — not because the LLM needed the reasoning, but because it helped us audit whether our examples were actually demonstrating the right principles.


Step 3: Batching 200+ SKUs Without Losing Quality

Here’s where the real engineering begins. You can’t just loop over 200 product rows and call the API 200 times. Token costs, rate limits, and quality degradation at scale all need handling.

Our chunking strategy:

We grouped SKUs into batches of 10, organised by product category (face oils together, scrubs together, hair care together). Within each batch, the system prompt included category-specific context — the language, concerns, and keywords specific to that product type.

This sounds like extra work. It cuts error rates by roughly half. A face oil description prompt is different from a hair oil description prompt in ways that matter for SEO and conversion.

import anthropic
import json
import time

client = anthropic.Anthropic()

SYSTEM_CONSTRAINTS = """Return ONLY a JSON object. No preamble, no markdown fences.
JSON structure: {headline, body, bullets (array), meta_description, keyword_present (bool)}"""

def generate_descriptions_batch(
    products: list,
    category_context: str,
    brand_voice_prompt: str
) -> list:
    results = []
    
    for product in products:
        prompt = f"""
{brand_voice_prompt}

CATEGORY CONTEXT: {category_context}

PRODUCT DATA:
Name: {product['name']}
Key Ingredients: {product['ingredients']}
Primary Keyword: {product['seo_keyword']}
Existing Description (rewrite/improve): {product.get('existing_description', 'None')}

{SYSTEM_CONSTRAINTS}
"""
        response = client.messages.create(
            model="claude-opus-4-20250514",
            max_tokens=600,
            messages=[{"role": "user", "content": prompt}]
        )
        
        try:
            result = json.loads(response.content[0].text)
            result['product_id'] = product['id']
            result['generated_at'] = time.time()
            results.append(result)
        except json.JSONDecodeError:
            results.append({
                "product_id": product['id'],
                "error": "parse_failed",
                "raw_output": response.content[0].text
            })
        
        time.sleep(0.5)  # Rate limit buffer
    
    return results

The automated QA pass:

Every generated description goes through a QA check before export:

  1. Word count in range (80–120)?
  2. Primary keyword present?
  3. Any banned phrases detected? (regex scan against the “never say” list)
  4. JSON structure valid?

Anything failing QA is flagged for human review. In our FloraSoul run, about 12% of descriptions needed a human edit — mostly niche Ayurvedic products where the model lacked sufficient ingredient context.


Step 4: The 5-Point Anti-Bot Checklist

These are the most common ways AI product copy reveals itself — and how to fix each one.

1. Generic opener ❌ “Introducing our moisturising face cream...” ✅ Start with the specific problem the product solves or the ritual it belongs to.

2. Adjective stacking without specifics ❌ “Rich, creamy, deeply nourishing formula...” ✅ Replace adjectives with specifics: “Contains 3% niacinamide and cold-pressed saffron extract” tells customers more than any adjective combination.

3. Missing brand-specific language ❌ “Made with natural ingredients...” (every brand says this) ✅ Every brand has proprietary terminology, a founding story, or specific process language. Include it.

4. Keyword stuffing instead of natural placement ❌ “This face oil for glowing skin is the best face oil for glowing skin...” ✅ One natural occurrence of the primary keyword in the first sentence. Secondary keywords appear organically from well-described ingredients.

5. Bullets that repeat the body copy ❌ Body: “deeply moisturising.” Bullets: “Deeply moisturising formula.” ✅ Bullets must add new information — specific ingredients, usage instructions, or product differentiators not in the body copy.


Before/After: FloraSoul Kumkumadi Oil

Before (original placeholder):

“Kumkumadi Face Oil is a premium Ayurvedic face oil that provides deep hydration and brightens skin. Made with natural ingredients to give you glowing, radiant skin. Suitable for all skin types.”

After (AI-generated with our pipeline):

“Kumkumadi Tailam has brightened complexions in Ayurvedic tradition for over a thousand years. Our cold-pressed formulation combines 16 botanicals — including saffron, sandalwood, and lotus — in a sesame base that absorbs without residue. Use three drops nightly as the last step in your skincare ritual, working upward along the jawline.”

Key ingredients: Saffron, Sandalwood, Brahmi, Manjistha | For: All skin types, especially dull/uneven tone | When: Evening ritual

The second version includes the primary SEO keyword naturally, specific ingredient information that builds trust, usage instruction that reduces returns, and sounds like the brand — not a content mill.


What Shopify Apps Get Wrong

Apps like Jasper for Shopify, Copy.ai’s ecommerce tool, and several built-in AI copy generators share one weakness: they don’t take brand context seriously. They give you a text field for “brand tone” and then largely ignore it in favour of generic ecommerce copy patterns.

The result is copy that’s technically correct and completely interchangeable. It’ll pass a grammar check. It won’t differentiate your products.

As an Official Shopify Partner, we’ve seen what happens when brands turn on app-generated descriptions without a proper system prompt — their catalogue starts sounding identical to competitors. Custom implementation, with a properly engineered prompt and QA pipeline, is the only approach that preserves brand voice at scale.

If you’re ready to build this for your catalogue, our AI automation services include the full pipeline — system prompt design, batch processing, QA, and Shopify import.


Frequently Asked Questions

Written by

Photo of Rishabh Sethia
Rishabh Sethia

Founder & CEO

Rishabh Sethia is the founder and CEO of Innovatrix Infotech, a Kolkata-based digital engineering agency. He leads a team that delivers web development, mobile apps, Shopify stores, and AI automation for startups and SMBs across India and beyond.

Connect on LinkedIn
Get started

Ready to talk about your project?

Whether you have a clear brief or an idea on a napkin, we'd love to hear from you. Most projects start with a 30-minute call — no pressure, no sales pitch.

No upfront commitmentResponse within 24 hoursFixed-price quotes