Claude
Skills
Sign in
Back

product-content-enrichment

Included with Lifetime
$97 forever

Use AI to auto-generate product descriptions, extract attributes, and tag images to enrich your catalog at scale using platform tools and AI writing apps

catalog-inventoryaiproduct-descriptionscontentattributesimage-taggingllmenrichmentpim

What this skill does


# Product Content Enrichment

## Overview

Rich product content — compelling descriptions, complete attributes, and well-tagged images — drives both conversion and SEO. When a catalog is imported from a supplier with sparse content, enrichment is the next step. AI tools can generate descriptions, extract attributes, and suggest tags at scale. Platform-native AI features and dedicated apps handle the common cases without custom development.

## When to Use This Skill

- When importing a supplier catalog that has only product names, SKUs, and sparse descriptions
- When product descriptions are inconsistent in style or missing SEO keywords
- When image metadata (alt text, tags) is missing and needs to be generated at scale
- When a catalog refresh requires rewriting hundreds of product descriptions in a new brand voice

## Core Instructions

### Step 1: Determine platform and choose the right tool

| Platform | Built-in AI | Recommended App/Tool |
|----------|------------|---------------------|
| **Shopify** | Shopify Magic (AI description generation, built-in) | Jasper for Shopify, or ChatGPT for bulk generation via CSV |
| **WooCommerce** | None native | ChatGPT + WP All Import for bulk import; Hypotenuse AI WooCommerce plugin |
| **BigCommerce** | None native | Feedonomics for feed enrichment; Jasper or ChatGPT for descriptions |
| **Any platform (bulk)** | Claude / ChatGPT / Gemini | Generate descriptions in bulk via CSV, then import using platform tools |

---

### Step 2: Platform-specific setup

---

#### Shopify

**Option A: Shopify Magic (built-in, free)**

Shopify Magic is available to all merchants on any plan.

1. Go to **Admin → Products → [Product]**
2. In the product description editor, click the **sparkle icon** (✨) at the top right
3. Enter a prompt or let Shopify Magic generate from the product title and existing details
4. Review the generated text — edit to match your brand voice
5. Click **Save** when satisfied

Limitations: Shopify Magic works one product at a time; not suitable for bulk enrichment.

**Option B: Bulk generation with CSV + AI**

For enriching hundreds of products at once:

1. **Export current catalog**: Admin → Products → Export (download as CSV)
2. **Generate descriptions in bulk**: Paste your product data into ChatGPT, Claude, or another AI tool with a prompt like:

```
For each of the following products, write a product description in this format:
- Opening sentence: 1 compelling benefit sentence (max 20 words)
- 2-3 sentence paragraph: features and use cases
- 4-6 bullet points: key specifications

Brand voice: [describe your brand voice]
Do not invent specifications not present in the product data.

Products:
[paste your CSV rows]
```

3. **Import back into Shopify**: Use **Matrixify** (App Store) to import the enriched CSV with updated descriptions; map the description column to the Shopify body HTML field

**Option C: Hypotenuse AI or Jasper (App Store)**

These apps integrate directly with Shopify:

1. Install from the Shopify App Store
2. Connect to your product catalog
3. Select products to enrich and click generate
4. Review drafts in the app's editor before publishing
5. Publish approved descriptions directly to Shopify

---

#### WooCommerce

**Bulk generation workflow:**

1. **Export products**: WooCommerce → Products → Export (CSV)
2. **Generate descriptions** using an AI tool of your choice (ChatGPT, Claude, Jasper)
3. **Import enriched data**: Use **WP All Import Pro** to import the updated CSV back into WooCommerce, mapping the description column to the product description field

**Hypotenuse AI for WooCommerce:**
- Install the Hypotenuse AI plugin from WooCommerce.com
- Select multiple products from your product list
- Click **Generate Content** to create descriptions in bulk
- Review and approve before publishing

**For attribute extraction:**
- Use AI to extract structured attributes (material, dimensions, weight, care instructions) from existing descriptions
- Add extracted attributes to WooCommerce product attributes under the **Attributes** tab
- These become filterable facets in your navigation

---

#### BigCommerce

**Bulk description generation:**

1. Go to **Products → Export** and download the product catalog CSV
2. Generate enriched descriptions using an AI tool
3. Re-import using **Products → Import**

**Feedonomics for feed enrichment:**
- Install Feedonomics from the BigCommerce App Marketplace
- Feedonomics can use AI to optimize product titles and descriptions specifically for Google Shopping, Amazon, and other channels
- Particularly useful for enriching attributes required by feed destinations (GTIN, brand, MPN)

---

#### Custom / Headless

For headless platforms with a custom database, build an enrichment pipeline with a human review gate:

```typescript
// lib/productEnrichment.ts
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic();

const DESCRIPTION_PROMPT = `You are a product copywriter. Generate a product description with:
1. A compelling opening sentence (max 20 words) highlighting the main benefit
2. A 2-3 sentence paragraph describing features
3. 4-6 key feature bullet points

Brand voice: {brandVoice}
Constraints:
- Use only the provided attributes — do not invent specifications
- Target: 80-120 words for the paragraph, plus bullets
- Include the product name and 1-2 SEO keywords naturally
- Do not use superlatives like "best" or "amazing"

Product: {name}
Category: {category}
Attributes: {attributes}`;

// Generate description for a single product
export async function generateProductDescription(product: Product, brandVoice: string): Promise<string> {
  const attributeText = Object.entries(product.attributes ?? {})
    .filter(([, v]) => v !== null)
    .map(([k, v]) => `${k}: ${v}`)
    .join('\n');

  const prompt = DESCRIPTION_PROMPT
    .replace('{brandVoice}', brandVoice)
    .replace('{name}', product.name)
    .replace('{category}', product.category)
    .replace('{attributes}', attributeText || 'Not provided');

  const message = await client.messages.create({
    model: 'claude-opus-4-5',
    max_tokens: 400,
    messages: [{ role: 'user', content: prompt }],
  });

  return message.content[0].type === 'text' ? message.content[0].text : '';
}

// Batch enrichment with human review gate — saves drafts, never auto-publishes
export async function enrichProductsBatch(productIds: string[], brandVoice: string) {
  const CONCURRENCY = 5;
  const results = [];

  for (let i = 0; i < productIds.length; i += CONCURRENCY) {
    const chunk = productIds.slice(i, i + CONCURRENCY);
    const batchResults = await Promise.all(chunk.map(async productId => {
      const product = await db.products.findUnique({ where: { id: productId }, include: { attributes: true } });
      try {
        const description = await generateProductDescription(product, brandVoice);
        // Save as draft — requires human approval before going live
        await db.productEnrichmentDrafts.upsert({
          where: { productId },
          create: { productId, description, status: 'pending_review' },
          update: { description, status: 'pending_review', updatedAt: new Date() },
        });
        return { productId, status: 'success' };
      } catch (err) {
        return { productId, status: 'error', error: err.message };
      }
    }));
    results.push(...batchResults);
  }

  return results;
}

// Approve a draft and publish to the product
export async function approveDraft(productId: string, approvedBy: string) {
  const draft = await db.productEnrichmentDrafts.findUnique({ where: { productId } });
  if (!draft) throw new Error('Draft not found');

  await db.$transaction([
    db.products.update({ where: { id: productId }, data: { description: draft.description } }),
    db.productEnrichmentDrafts.update({
      where: { productId },
      data: { status: 'approved', approvedBy, approvedAt: new Date() },
    }),
  ]);
}
```

---

### Step 3: Review and app

Related in catalog-inventory