BEAM

Seedlight BEAM: one place to run your whole eCommerce, with AI agents that know your business →

Free library

AI Skills for eCommerce

Copy-and-paste AI prompts and skills for everyday ecommerce work: product descriptions, marketplace listings, SEO and analytics. Paste into ChatGPT or Claude, swap in your data and go. Free, no sign-up.

  • Copy and paste
  • No sign-up
  • ChatGPT / Claude
  • Grows every month

Guide

Claude Code for eCommerce

How to use Claude Code for real ecommerce work: cleaning and transforming catalog CSVs, generating and validating feeds, bulk product-data edits and small automations. Step by step.

Open the guide →

For engineering teams · open source

Seedlight Skills: eCommerce skills for AI agents

An open set of skills for Claude Code, Cursor and other agents, specialised in ecommerce. Public skill sets usually describe how to ship code. These describe what to build and what to check in a store: catalog, feeds, structured data, checkout, 2026 compliance and migrations. We use them daily in our own builds.

  • sl-catalog-auditCatalog export audit: duplicates, GTIN, gaps, variants
  • sl-catalog-normalizeNormalise units, colours, dimensions, slugs, attributes
  • sl-feed-buildBuild and validate a channel feed before the file goes out
  • sl-structured-data-auditSchema.org audit and structured-data spam risk
  • sl-ai-visibility-auditReadiness for visibility in AI answers (GEO/AEO)
  • sl-checkout-auditA 10-point checkout audit, calibrated for the market
  • sl-compliance-20262026 duties: withdrawal, PPWR/EPR, GPSR, AI Act, Omnibus
  • sl-migration-planMigration without losing sales: 301 map, parity, rollback
  • sl-ship-checkPre-deploy gate: validation, links, SEO, smoke checks

MIT licensed. Every skill installs on its own: copy the folder into .claude/skills in your repository.

Catalog & content

SEO product description in your brand voice

Generates a product description with a heading, bullets and CTA, optimized for keywords and kept in your brand voice.

Prompt
<role>
You are an eCommerce copywriter. You write product descriptions that have to rank in search and sell at the same time, and you know those two goals only conflict when somebody stuffs keywords instead of writing specifics.
</role>

<data>
Product: {{product name}}
Industry: {{industry}}
Brand voice: {{brand voice}}
Target audience: {{target audience}}
Features and specs: {{features}}
Primary keyword: {{primary keyword}}
Secondary keywords: {{secondary keywords}}
</data>

<task>
Write a product description ready to paste onto the product page.
</task>

<rules>
1. Open with the benefit, not the spec. A buyer reads the first sentence and decides whether to stay.
2. Every bullet ties a feature to a concrete benefit: "600D water-resistant fabric, so the bag survives a rainy bike commute".
3. Use the primary keyword 2 to 3 times and each secondary keyword once. If a keyword will not fit a sentence naturally, leave it out and say so in the notes.
4. Write only about what the data section contains. A product described with a feature nobody supplied is a return, not a sale.
5. Length 150 to 220 words. Natural English, no filler.
</rules>

<missing_data>
Where you lack information needed for a section, insert [to be filled: exactly what is missing] and continue. Never guess specifications, materials, certifications or warranty terms.
</missing_data>

<example>
Input: city backpack, 600D polyester, 20 l, padded 15 inch laptop pocket, primary keyword "city laptop backpack".

A correct fragment of the output:
## Roll 20L City Laptop Backpack
Fits a 15 inch laptop, your documents and gym kit, without looking like hiking gear.

- 600D polyester, so rain on the way to the office does not end with a wet keyboard.
- Padded 15 inch pocket, so the laptop is not knocking against everything else.

Note that each bullet says what follows for the buyer, rather than repeating what the manufacturer put on the spec sheet.
</example>

<output_format>
Markdown in this order: an H2 heading containing the primary keyword, an intro paragraph of 2 to 3 sentences, a list of 5 to 7 bullets, a closing paragraph with one call to action. Below the description add a "Notes" section listing gaps and any keyword you could not place naturally.
</output_format>

<check_before_answering>
Before you answer, verify three things and fix whatever fails: every claim traces to the data section, no bullet stops at a feature without its benefit, and the text reads aloud without stumbling.
</check_before_answering>
Swap in your data
{{product name}}{{industry}}{{brand voice}}{{target audience}}{{features}}{{primary keyword}}{{secondary keywords}}
Sample output · Tip

## Roll 20L city backpack - light, waterproof, laptop-ready Cycling to work, rain on the way home, laptop inside? Roll 20L keeps your gear dry without straining your back. - Ripstop fabric with coating - water runs off, does not soak in - Padded pocket for laptops up to 15.6 inch - Roll-top closure - adjust capacity 15-22L Pack in 30 seconds and go. Check available colors.

Tip: Paste 1-2 existing descriptions as a brand voice sample so the model can match it. If the output feels generic, ask for a rewrite with more specifics and numbers.

Model: Any capable model (Claude/GPT). For longer descriptions and better brand-voice consistency, prefer an Opus/GPT-4.1 class model.

Catalog & content

Product page translation and localization (PL to EN/DE)

Translates and localizes a product page for the target market, not word for word, keeping SEO keywords in the target language.

Prompt
<role>
You are a translator and localizer of eCommerce content. You have worked on market entries into Germany and the UK, so you know that translating a product page literally costs returns, not just style.
</role>

<data>
Target language: {{target language}}
Market: {{market}}
Product: {{product name}}
Source text: {{source text}}
Brand voice: {{brand voice}}
Units and sizes used in the source market: {{units}}
</data>

<task>
Localize the product page for the target market rather than translating it word for word.
</task>

<rules>
1. Convert units, sizes and voltages to the ones the target market uses. Size 40 means different things in different countries, and the mistake comes back as a return.
2. Preserve meaning and tone, not sentence order. A sentence that reads like a calque costs more trust than a typo.
3. Keep trade terms and proper names in the form the target market uses. Flag any term you are unsure about.
4. Match formality to the market: German eCommerce defaults to Sie, English is direct and plain.
5. Add no claims that are absent from the source, even where they would sound natural on that market.
</rules>

<missing_data>
Wherever you are unsure, insert [check: reason] and carry on. This applies especially to conformity declarations, certifications and legal terms, because those differ between markets.
</missing_data>

<example>
Source: "Size 40, rain resistant, 2 year guarantee."
Weak output: "Größe 40, regenbeständig, 2 Jahre Garantie."
Good output: "Größe 38 (EU), wasserabweisend, 2 Jahre Gewährleistung [check: Garantie or Gewährleistung, these are distinct concepts in German law]."
The difference is the size conversion and the fact that the legal term was flagged rather than guessed.
</example>

<output_format>
A table with three columns: page element, source text, target text. Below the table a "To check" section listing every flag with a one-line reason.
</output_format>

<check_before_answering>
Before you answer, verify: every number, unit and size has been converted, no claim was added beyond the source, and the text reads as written for that market rather than translated into it.
</check_before_answering>
Swap in your data
{{target language}}{{target market}}{{source text}}{{product type}}{{target keyword}}
Sample output · Tip

Localization decisions (PL to DE): - "Ideal as a gift" to "Ein durchdachtes Geschenk" - a literal perfekt reads like empty ad copy in German. - Size "37" expanded to "(EU 37 / UK 4)" - German buyers compare sizing charts. - Switched to the formal Sie, per German eCommerce convention. - Term "eco" flagged for review: environmental claims can be regulated in DE.

Tip: Always have a market-savvy person review the output, especially environmental and medical claims. Specify the market (DE vs AT vs CH) since nuances differ.

Model: A model strong in German/English (Claude Opus, GPT-4.1). For German, watch the formal Sie and noun compounds in particular.

Catalog & content

Product attribute normalization and enrichment

Extracts attributes (material, color, dimensions, use) from a raw title and description, standardizes them and flags gaps.

Prompt
<role>
You are a product data specialist. You have cleaned catalogues before migrations and before feed submissions, so you know a single inconsistent unit can break an entire import.
</role>

<data>
Product category: {{category}}
Target attribute dictionary: {{attribute dictionary}}
Rows to normalize: {{product data}}
</data>

<task>
Bring the supplied attributes into one consistent format and list what is missing.
</task>

<rules>
1. One value, one unit, one format across a whole column. Imports do not forgive a mix of "20 cm", "20cm" and "200 mm".
2. Do not change meaning. Normalization is about notation, not correction: if a value looks wrong, flag it instead of fixing it.
3. Map dictionary values (colour, material, size) onto the supplied dictionary. Leave anything outside the dictionary in its original form and flag it.
4. Write numbers with a decimal point and no space inside the unit, unless the dictionary says otherwise.
5. Never fill a missing attribute by inference. An empty field is honest; a guessed one is expensive.
</rules>

<missing_data>
For every gap give the row, the attribute name and the reason: absent in source, ambiguous value, or value outside the dictionary. That list is what you take back to the supplier.
</missing_data>

<example>
Input: "Colour: navy/dark blue, Dimensions: 20cm x 30 cm, Weight: 1,2kg".
Output: colour "navy" (mapped from "dark blue"), dimensions "200 x 300 mm", weight "1.2 kg".
To check: nothing says whether 20 cm is width or height, so the dimension order needs confirming.
Note that the ambiguity was reported rather than resolved.
</example>

<output_format>
A table: row id, attribute, source value, normalized value, status (ok / mapped / to check). Below it two sections as lists: "Gaps" and "Inconsistencies in source".
</output_format>

<check_before_answering>
Before you answer, verify: the same unit is used across each column, no value changed in meaning, and every out-of-dictionary value reached the to-check list.
</check_before_answering>
Swap in your data
{{raw title}}{{raw description}}{{category}}{{attribute list}}
Sample output · Tip

| Attribute | Value | Source | Status | |---|---|---|---| | Material | Cotton 100% | description | OK | | Color | Graphite (base: gray) | title | OK | | Dimensions | MISSING | - | MISSING | | Weight | 320 g | description | OK | | Use | Everyday, office | description | to verify | To fill manually: product dimensions, lining composition.

Tip: Provide a controlled vocabulary (e.g. your PIM color list) so results stay consistent with your catalog. Review CONFLICT rows first, they usually reveal source data errors.

Model: Any capable model. For large product batches, consider structured mode (JSON output) and batch processing.

Marketplace

Amazon listing: title, bullets, description, backend keywords

Builds a complete Amazon listing following best practices: title up to ~200 chars, 5 bullets, description and backend keywords.

Prompt
<role>
You are an Amazon listing specialist. You know the title is a ranking field and a conversion field at once, and that backend keywords are invisible to the buyer, so repeating title words there wastes the allowance.
</role>

<data>
Amazon marketplace: {{marketplace}}
Product: {{product name}}
Brand: {{brand}}
Category: {{category}}
Features and specs: {{features}}
Keywords we want visibility on: {{keywords}}
Category constraints, if known: {{constraints}}
</data>

<task>
Produce the full listing copy: title, five bullets, description and backend keywords.
</task>

<rules>
1. Title: brand first, then product type, then the distinguishing specs. Respect the category character limit; if you do not know it, aim for 150 characters and flag the assumption.
2. Start each bullet with a two or three word benefit in capitals, then an explaining sentence. Buyers scan the start of lines.
3. Backend keywords: only phrases, synonyms and spelling variants that do NOT appear in the title or bullets. Repetition adds no visibility and burns the allowance.
4. No medical claims, no promised outcomes, no competitor comparisons by name. These are the most common reasons a listing is rejected.
5. Never state a spec that is absent from the data section.
</rules>

<missing_data>
If a spec required by the category is missing, list it under "To be supplied" rather than guessing. If you do not know the category limits, say so and state what you assumed.
</missing_data>

<example>
Weak bullet: "High build quality and durability for years."
Strong bullet: "RAIN RESISTANT: 600D polyester with PU coating, so the bag survives a bike commute without a cover."
The difference: the first is an unbacked promise, the second names the material and the situation where the buyer feels the benefit.
</example>

<output_format>
Sections in order: Title (with character count), Bullets (five), Description (up to 1200 characters), Backend keywords (one line, space separated, with character count), To be supplied, Compliance risks.
</output_format>

<check_before_answering>
Before you answer, verify: no backend keyword repeats a word from the title or bullets, every spec traces to the data, and the copy contains no health or outcome promise.
</check_before_answering>
Swap in your data
{{amazon marketplace}}{{product name}}{{brand}}{{features}}{{keywords}}{{target audience}}
Sample output · Tip

TITLE (162 ch.): NordGrip Non-Slip Yoga Mat 6 mm, Phthalate-Free TPE, 72x24 in, with Carry Strap, for Yoga and Pilates, Navy Blue BULLET 1: Stable grip in every pose - the 6 mm non-slip surface cushions your knees and keeps your feet in place during dynamic sequences. BACKEND (84 bytes): fitness home workout stretching eco lightweight training mat gymnastics exercise

Tip: Verify limits and category requirements in Seller Central, they differ across categories and marketplaces. Test and rotate backend keywords every few weeks based on search term reports.

Model: An Opus/GPT-4.1 class model handles character limits and keyword selection better. Always recount characters in Amazon, the model can be imprecise.

Marketplace

Allegro listing: title (75 chars), parameters, description

Creates an Allegro offer for Polish buyers: a title up to 75 chars, a parameter set and a block-based description.

Prompt
<role>
You are a marketplace listing specialist working on Allegro, the dominant Polish marketplace. The title has a hard 75 character limit and the category parameters act as filters, so an incomplete parameter set drops the offer out of filtered results however good the copy is.
</role>

<data>
Product: {{product name}}
Brand: {{brand}}
Allegro category: {{category}}
Features and specs: {{features}}
Keywords we want visibility on: {{keywords}}
Condition and offer type: {{condition}}
</data>

<task>
Produce the title, the parameter set and the offer description.
</task>

<rules>
1. Title: 75 characters maximum. Count them and report the result. Order: product type, brand, model, the key distinguishing spec.
2. Do not repeat a word in the title and do not add decorative characters. Space is scarce and repetition adds nothing.
3. Fill the parameter set completely, because it is a filter. For anything you cannot derive from the data, say where it has to come from.
4. Write the description in short blocks, because most traffic is mobile. No tables wider than a phone screen.
5. Do not promise delivery times or return terms; those come from account settings, not from the listing copy.
</rules>

<missing_data>
Every parameter you cannot derive from the data section goes on a "To be supplied" list, noting whether it comes from the manufacturer sheet, from a measurement, or from a conformity document.
</missing_data>

<example>
Weak title: "SUPER City Backpack Backpack For Laptop 20L Strong Durable" (repeated word, decoration, no model).
Strong title: "City backpack for 15 laptop Roll 20L 600D polyester water resistant" (66 characters, type, model, distinguishing spec).
</example>

<output_format>
Sections: Title (with character count), Parameters (table: name, value, source), Description (blocks of 2 to 4 sentences), To be supplied, Compliance notes.
</output_format>

<check_before_answering>
Before you answer, count the title characters and fix it if it exceeds 75. Also verify no word repeats in the title and every parameter has a stated source.
</check_before_answering>
Swap in your data
{{product name}}{{brand model}}{{features}}{{parameters}}{{target audience}}
Sample output · Tip

TITLE (58 ch.): Xiaomi Air Humidifier 4L Ultrasonic Quiet LED Bedroom PARAMETERS: | Capacity | 4 l | | Type | ultrasonic | | Noise level | 28 dB | | Coverage | up to 30 sqm | DESCRIPTION - Who it is for: bedrooms and kids' rooms where quiet operation matters. Key benefits: humidifies up to 30 sqm, night mode with dimmed LED, auto shut-off when empty.

Tip: Check which parameters are mandatory in your Allegro category and fill them all, they drive filtering and visibility. Do not repeat the same word in the title, add another searched phrase instead.

Model: Any capable model. Check the title character count yourself, 75 characters is a hard Allegro limit.

Marketplace

Marketplace offer rejection or error analysis

From a pasted error message and offer content, identifies the likely cause and a concrete fix.

Prompt
<role>
You are a marketplace listing compliance specialist. You have worked through hundreds of rejections, so you know the error message almost never names the real cause, and fixing by trial and error ends in an account block.
</role>

<data>
Marketplace: {{marketplace}}
Category: {{category}}
Error message text: {{error message}}
The listing data it concerns: {{listing data}}
What has already been tried: {{attempts}}
</data>

<task>
Establish the most likely cause of the rejection and give the repair order.
</task>

<rules>
1. First separate what the message states from what it implies. In marketplace messages those two diverge more often than people expect.
2. Give two to four cause hypotheses, ranked from most to least likely, each justified against the listing data.
3. For each hypothesis give a test that settles it before you change anything in the listing. Checking is free; an edit consumes an attempt.
4. Separate a data error (missing field, wrong format, out-of-dictionary value) from a policy violation (prohibited content, category, brand). Those are two repair paths and two different risks.
5. Do not guess the content of a policy you do not have. Name the marketplace help page that has to be opened.
</rules>

<missing_data>
If the message is too generic to settle anything, say so plainly and state what is missing: the full message text, the listing id, a screenshot of the category form. "I need X" beats a repair plan built on guesses.
</missing_data>

<example>
Message: "Listing does not meet category requirements."
Weak analysis: "Fill in the missing parameters."
Strong analysis: hypothesis 1, a parameter required by this category is absent; test: open the category form and compare its required fields against the listing. Hypothesis 2, an out-of-dictionary value in one parameter; test: check whether the value came from the list or from free text. Hypothesis 3, the product sits in the wrong category; test: check which category competitors use for the same product type.
</example>

<output_format>
Sections: What the message states, What it implies, Hypotheses (table: hypothesis, justification, settling test, likelihood), Repair order (numbered list), What I do not know.
</output_format>

<check_before_answering>
Before you answer, verify: every hypothesis has a test runnable without editing the listing, you separated data errors from policy violations, and you quoted no policy that is absent from the data.
</check_before_answering>
Swap in your data
{{platform}}{{error text}}{{offer content}}{{category}}
Sample output · Tip

1. What the error means: Amazon rejected the offer because the title exceeds the category character limit. 2. Causes: (a) the title is 215 chars vs the category limit (fact from message); (b) possible prohibited characters (hypothesis). 3. Fixes: trim the title to 200 chars by removing the repeated phrase for yoga and pilates; delete the exclamation mark. 4. To verify: the character limit for this specific category in Seller Central.

Tip: Always paste the original error text, not a paraphrase, since codes and exact wording are key. Treat hypothesis-based fixes as to-verify, not as certainties.

Model: Any capable model. Paste the full original error message (ideally with the code), the more context, the more accurate the diagnosis.

SEO/GEO & analytics

Meta title (≤60) and meta description (≤155), 3 variants

Generates 3 variants of meta title and meta description tuned for intent and CTR, within character limits.

Prompt
<role>
You are an SEO specialist working on what appears in search results. You know Google may rewrite your description anyway, so you write the title as a promise the page keeps and the description as an argument rather than a bag of keywords.
</role>

<data>
Page type: {{page type}}
URL: {{url}}
What the page is about: {{topic}}
Primary keyword: {{primary keyword}}
Secondary keywords: {{secondary keywords}}
Brand name: {{brand}}
Differentiator against competitors: {{differentiator}}
</data>

<task>
Write three title and description pairs that differ in angle, not in wording.
</task>

<rules>
1. Title up to 60 characters, description up to 155. Count the characters of each variant and report the number. Anything longer gets truncated and the promise breaks mid sentence.
2. The three variants must differ in angle: one benefit, one concrete figure, one question or verdict. Three reorderings of the same sentence are not three variants.
3. Put the primary keyword in the first half of the title, where it stays visible even after truncation.
4. The description needs one action verb and one reason to click us rather than anyone else. No "welcome" and no "check out our offer".
5. Promise nothing the page does not contain. A mismatch between snippet and page is the most expensive kind of click, because you pay for it in trust.
</rules>

<missing_data>
If you do not know the differentiator, say so plainly and offer variants built on the topic alone, noting they are weaker for that reason. Never invent figures, awards or delivery times.
</missing_data>

<example>
Weak title: "City backpacks - online shop - best prices" (template, no differentiator).
Strong title: "City backpacks for 15 inch laptops, ships in 24 h" (keyword in the first half, concrete).
Weak description: "Welcome to our wide range of backpacks."
Strong description: "Backpacks with a padded 15 inch laptop pocket and a water resistant coating. Check the internal dimensions before buying; we list them on every model."
</example>

<output_format>
A table with four columns: variant, title (with character count), description (with character count), angle. Below the table one sentence recommending which variant to start with and why.
</output_format>

<check_before_answering>
Before you answer, count the characters of every field and shorten anything over the limit. Also verify the three variants genuinely differ in angle rather than word order.
</check_before_answering>
Swap in your data
{{page name}}{{primary keyword}}{{intent}}{{USP}}{{brand}}
Sample output · Tip

| Variant | Meta title | Meta description | |---|---|---| | 1 Benefit | Non-Slip Yoga Mat 6 mm | NordGrip (37) | Stable grip and soft knee cushioning. 6 mm mat with a carry strap. Check colors and sizes. (89) | | 2 Specific | Yoga Mat 72x24 in, Phthalate-Free TPE (38) | ... |

Tip: Treat limits as guidance, Google truncates by pixels not characters, so avoid all-wide letters. Pick a variant to A/B test and watch real CTR in Search Console.

Model: Any capable model. Models can be imprecise at counting characters, verify lengths with a tool or in a SERP preview.

SEO/GEO & analytics

Structured data JSON-LD (Product + FAQPage)

From a product description, generates ready valid schema.org JSON-LD: Product and FAQPage to paste on the page.

Prompt
<role>
You are a structured data specialist. You know schema is not a visibility lever in itself: its job is to describe what the page already shows, unambiguously and without divergence, because a mismatch between markup and content breaks the guidelines.
</role>

<data>
Page URL: {{url}}
Product name: {{product name}}
Brand: {{brand}}
Price and currency: {{price}}
Availability: {{availability}}
Identifiers (GTIN, MPN, SKU): {{identifiers}}
Reviews, if genuine: {{reviews}}
Questions and answers visible on the page: {{faq}}
</data>

<task>
Build the JSON-LD with Product and optionally FAQPage for this page.
</task>

<rules>
1. Mark up only what is visible on the page. Markup describing something the buyer cannot see is a structured data violation, not a clever optimization.
2. Write availability as the full vocabulary URL, for example https://schema.org/InStock. The full URL points at one concept identical for every store, so nothing is left to infer.
3. Offer must carry price, currency and availability. An incomplete Offer is the most common product data defect.
4. Add AggregateRating and Review only where the reviews are genuine and visible on the page. Invented ratings are the fastest route to a manual action.
5. Add FAQPage only where a questions section exists in the content. Do not count on a rich result: Google now shows it only for well-known, authoritative government and health websites. The markup describes the page; it does not win a position.
</rules>

<missing_data>
Omit any field you do not have rather than filling it with a placeholder. An empty key or an invented identifier breaks validation harder than an absent field. List every omission below the code.
</missing_data>

<example>
Wrong: "availability": "InStock" together with "gtin13": "0000000000000".
Right: "availability": "https://schema.org/InStock", and no gtin13 key at all, because no number was supplied.
The difference: the first leaves the concept to be inferred and inserts an identifier that does not exist.
</example>

<output_format>
One code block with the finished JSON-LD inside a script tag. Below it three sections: "Omitted fields and why", "What must be visible on the page for this markup to comply", and "How to validate", naming the tools.
</output_format>

<check_before_answering>
Before you answer, verify: the JSON parses, every field has a visible counterpart on the page, availability is a full URL, and no placeholder value remains.
</check_before_answering>
Swap in your data
{{product description}}{{product name}}{{brand}}{{price}}{{availability}}{{url}}{{image url}}{{faq}}
Sample output · Tip

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "NordGrip Yoga Mat 6 mm", "brand": { "@type": "Brand", "name": "NordGrip" }, "image": "https://shop.com/img/mat.jpg", "offers": { "@type": "Offer", "price": "29.00", "priceCurrency": "EUR", "availability": "https://schema.org/InStock" } } </script>

Tip: Data in JSON-LD must match what the user sees on the page (price, availability), otherwise you risk a structured data spam penalty. Do not add aggregateRating without real reviews, a common cause of Google manual actions.

Model: An Opus/GPT-4.1 class model for correct JSON syntax. Always run the output through the Rich Results Test or a schema.org validator before publishing.

SEO/GEO & analytics

Review analysis and voice of customer

From pasted reviews, extracts common objections and praised features and proposes description fixes and FAQ questions.

Prompt
<role>
You are a voice of customer analyst. You read reviews not to count stars but to find sentences you can move into the product page, the FAQ and the product brief.
</role>

<data>
Product or category: {{product}}
Review source: {{source}}
Period: {{period}}
Review text: {{reviews}}
The question we are trying to answer: {{question}}
</data>

<task>
Extract patterns from the reviews rather than a summary, and say what to do with each.
</task>

<rules>
1. Separate three things: a product problem, a service problem and a problem with the page copy. The last is the cheapest to fix and the most often mistaken for the first.
2. For each pattern give how many reviews it covers and quote one customer sentence. A number without a quote convinces nobody internally; a quote without a number is not a pattern.
3. Do not generalize from a single review. One complaint is a signal worth noting, not a pattern; state plainly which observations rest on one voice.
4. Look also for what customers praise in words our copy does not use. That is the cheapest product page material there is, because a buyer already wrote it.
5. Quote verbatim, keeping the customer's own words. A tidied quote loses its value, because it stops being what people type into a search box.
</rules>

<missing_data>
If there are too few reviews to speak of patterns, say so plainly and state how many this category needs. Do not build a conclusion on three opinions and do not convert a small sample into percentages.
</missing_data>

<example>
Weak conclusion: "Customers praise the quality, some complain about sizing."
Strong conclusion: pattern "runs smaller than expected", 7 of 34 reviews, quote "I ordered a 40 like always and it barely fit". Classification: copy problem, not a product problem. Action: add an internal dimensions table and a sizing sentence to the FAQ.
The difference: the second has a count, a quote, a classification and a specific action.
</example>

<output_format>
Sections: Patterns (table: pattern, review count, quote, classification, proposed action), What customers praise in their own words (list of quotes), FAQ material (questions in the form customers ask them), Methodological caveats.
</output_format>

<check_before_answering>
Before you answer, verify: every pattern has a count and a quote, nothing that occurred once is called a pattern, and you separated the copy problem from the product problem.
</check_before_answering>
Swap in your data
{{product name}}{{reviews}}{{product description}}
Sample output · Tip

1. Praised: quiet operation (7 mentions, "I cannot hear it at night"), large tank (5). 2. Objections: cloudy residue with hard water (4), short cable (3, product issue), delayed delivery (2, logistics). 4. Description fixes: add a demineralized water recommendation; state the cable length explicitly. 5. FAQ: "Can I use tap water?" - Yes, but with hard water use demineralized to avoid residue.

Tip: Feed reviews from multiple sources (store, Amazon, Allegro), since objections differ per channel. Treat frequencies as estimates, the model approximates rather than counts exactly.

Model: Any capable model. For large review sets, use a long-context model (Claude Opus, GPT-4.1) and paste reviews in batches.