skills/catalog-inventory/product-content-enrichment/SKILL.md
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
npx skillsauth add finsilabs/awesome-ecommerce-skills product-content-enrichmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
| 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 |
Option A: Shopify Magic (built-in, free)
Shopify Magic is available to all merchants on any plan.
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:
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]
Option C: Hypotenuse AI or Jasper (App Store)
These apps integrate directly with Shopify:
Bulk generation workflow:
Hypotenuse AI for WooCommerce:
For attribute extraction:
Bulk description generation:
Feedonomics for feed enrichment:
For headless platforms with a custom database, build an enrichment pipeline with a human review gate:
// 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() },
}),
]);
}
Never auto-publish AI-generated content without human review. AI can:
Review workflow:
Prioritize which products to enrich first:
Alt text serves both accessibility and image SEO.
Shopify:
Image Alt TextWooCommerce:
For bulk alt text generation:
| Problem | Solution | |---------|----------| | AI invents specifications not in the source data | Add explicit constraints to the prompt: "Use only the provided attributes — do not invent or assume values"; verify output against the product spec | | All AI descriptions sound identical | Add product-type-specific instructions (e.g., different prompts for footwear vs. electronics vs. apparel) | | Descriptions miss SEO keywords | Include "naturally incorporate these SEO keywords: [list]" in the prompt; check with a keyword tool after generation | | Bulk import overwrites good existing descriptions | Filter your import to only products with empty or very short descriptions; don't overwrite manually written descriptions | | AI image tagging quality is poor | Use AI image analysis (GPT-4 Vision, Claude) for alt text generation rather than keyword-based tools; provide the product name as context |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion