Review Insight Miner
Cluster product reviews and support tickets into recurring themes by keyword co-occurrence, separate product defects from expectation mismatches, rank each theme by volume and the star rating it drags down, and attach a specific…
At a glance
Review Insight Miner is an AI skill that you can use in Claude Code, Codex, or type.com.
- Updated
See an example
Example output from a sample run. Company names and figures are sample data.
Review and ticket themes: Northfell, 86 reviews and 14 support tickets
Two product defects drag the rating most. Leaking lids (15 documents, 2.25 stars) and chipped coating (9 documents, 2.14 stars) cost 10.8 and 7.1 star-points against a 3.15 mean rating across 100 documents.
| # | Theme | Docs | Rating | Drag | Category |
|---|---|---|---|---|---|
| 1 | lid / leaks / gasket | 15 | 2.25 | 10.8 | Product defect |
| 2 | chipped / coating / desk | 9 | 2.14 | 7.1 | Product defect |
| 3 | base / fit / cup | 8 | 2.43 | 5.1 | Expectation mismatch |
| 4 | replacement / support / took | 8 | 2.33 | 4.9 | Service |
| 5 | arrived / shipping | 5 | 2.00 | 4.6 | Logistics |
| 6 | straw / clean / smell | 4 | 1.67 | 4.5 | Usability |
| 7 | color / photo / listing | 6 | 2.80 | 1.8 | Expectation mismatch |
…plus 3 more themes in the full report, and 34 one-off documents with no recurring theme.
What customers are saying
- "A leak from the lid seal ruined a notebook in my bag. The gasket is far too thin." (NF-RV-010, 1 star)
- "Does not fit in my car cup holder. The base is far too wide." (NF-RV-021, 2 stars)
- "Emailed support twice about a replacement lid and never got a reply." (NF-RV-044, 1 star)
Next actions
- Product and QA (themes 1 and 2): pull a sample against the supplier spec for the failing part, quantify the failure rate by production lot, and decide between a design change and a supplier change. Until it ships, give support a no-questions replacement macro. Top SKUs: NF-LID-STR (5) for leaks; NF-BTL-32 (3) and NF-TUMB-16 (3) for chipping.
- Listing copy and imagery (theme 3): the product is doing what it does; the page is promising something else. Put the base width in the spec table in explicit units, name it in the first three bullets, and add a photo at real scale. 7 of 8 documents are NF-BTL-32.
- Support operations (theme 4): measure first-response and resolution time for replacement requests, then fix the top driver with a macro, a self-serve flow, or a policy change.
- Fulfilment and carrier (theme 5): trace the late and crushed orders to the warehouse and carrier service level, and check carton spec.
Defects account for 24 documents and expectation mismatches for 14. The mismatches are usually cheaper and faster to fix because the change is copy, spec, and photography.
Produced by running bash examples/run.sh on the sample data bundled with this skill.
How to use Review Insight Miner
- type.com: Choose Use Skill to add Review Insight Miner to your type.com workspace.
- Claude Code: Download the skill and extract it into
~/.claude/skills/review-insight-miner/(or.claude/skills/review-insight-miner/in a project). Then ask Claude to use Review Insight Miner. - Codex: Download the skill and extract it into
~/.agents/skills/review-insight-miner/(or.agents/skills/review-insight-miner/in a repository). Then ask Codex to use Review Insight Miner.
AI agents can read this page as Markdown or fetch the raw SKILL.md.
Frequently asked questions
What is Review Insight Miner?
Review Insight Miner is an AI skill that you can use in Claude Code, Codex, or type.com.
What does Review Insight Miner do?
Cluster product reviews and support tickets into recurring themes by keyword co-occurrence, separate product defects from expectation mismatches, rank each theme by volume and the star rating it drags down, and attach a specific…
Can I use Review Insight Miner in Claude Code or Codex?
Yes. Review Insight Miner is a standard Agent Skills folder with a SKILL.md file. Download it and extract it into ~/.claude/skills/ for Claude Code or ~/.agents/skills/ for Codex.
Who created Review Insight Miner?
The type.com team created Review Insight Miner. The type.com team reviews every skill before it is published in the Skills Library.
Related guide
Browse the technical files
---
name: review-insight-miner
description: Cluster product reviews and support tickets into recurring themes by keyword co-occurrence, separate product defects from expectation mismatches, rank each theme by volume and the star rating it drags down, and attach a specific listing-copy or product fix with owner and verbatim evidence.
---
# Review Insight Miner
Turns a pile of reviews and tickets into a ranked, evidenced list of the
things that are actually costing stars and generating support volume — and
splits them into *the product is failing* versus *the page is promising the
wrong thing*, because those have different owners and very different costs to
fix.
Themes are discovered from the text, not from a fixed list of categories:
terms that keep appearing together are merged by pointwise mutual information,
and only then is each cluster labelled.
## Before you run
This skill ships scripts and sample data alongside this SKILL.md. Before running any command:
1. **Get the files.** Make sure the skill's other files (`scripts/`, `examples/` and anything else listed with this skill) are in your working folder at the same relative paths. Some environments load only SKILL.md; if yours did, fetch each file from this skill's published files and write it to the matching path. In Type, read them with the skill-file tools. Anywhere else, the Type Skills Library API lists every file with its path, content and `sha256`: GET `https://api.type.com/api/public/library/skills` and take the entry with slug `review-insight-miner`.
2. **Check the copies are exact.** Compare each file's size in bytes, not characters (and its hash, where your tools report one), with the published version before running. A copy written out from the published file is fine once its byte size and hash match; never run a script you summarised or reconstructed from memory.
3. **Run from the skill's folder**, calling interpreters explicitly: `python3 scripts/…` and `bash examples/run.sh`.
4. **Try the sample first.** If the skill ships `examples/run.sh` and `examples/expected_output.txt`, run `bash examples/run.sh`; its output should match the expected file exactly. If it doesn't, stop and report the first differing line rather than running on real data.
## When to use this
- The rating on a hero SKU has slipped and nobody can say precisely why.
- Support volume is rising and you want the top drivers, ranked, with evidence.
- Before a product revision or a resupply: which failure modes are worth
tooling changes.
- Before a listing rewrite: which promises the page is making that the product
does not keep.
- Quarterly voice-of-customer review, or a category-level read across SKUs.
## Gathering the input
One CSV, assembled from the user's connected integrations. The script never
touches the network.
- **Reviews**: Shopify product reviews, Judge.me, Okendo, Yotpo, Stamped, or a
marketplace review export. Keep the star rating and the SKU.
- **Support tickets**: Gorgias, Zendesk, Front, Intercom, Help Scout. Use the
**first customer message**, not the whole thread — agent replies and
signatures swamp the vocabulary. One row per conversation.
- **Post-purchase surveys or return reasons** also work as `ticket` rows if the
free-text field is substantive.
Practical points that change the result:
- **Strip boilerplate.** Templated openings ("Customer reports…", "Hi team")
cluster tickets with each other rather than by subject. Common support
scaffolding is already in the stop list, but export-specific templates are
not; remove them before running.
- **Window it.** Mine a defined period (a quarter, a product generation, since
a supplier change). A five-year export buries a current defect under
historical noise.
- **Volume.** Below roughly 60 documents the co-occurrence statistics are thin
and themes will not separate cleanly; say so rather than over-reading a
three-document cluster.
- **One language.** Mixed-language exports fragment every theme. Filter or run
each language separately.
## Running it
```bash
python3 scripts/mine_reviews.py --feedback /path/to/feedback.csv --top 6
```
Tuning:
- `--min-term-docs` (3) is how many documents a word must appear in to be
eligible. Raise it on large exports.
- `--max-term-df-pct` (35) drops words that appear nearly everywhere — the
product noun, the brand name — which would otherwise glue everything into a
single cluster.
- `--min-pmi` (1.0 bits) is the merge threshold. Lower it for fewer, broader
themes; raise it for more, tighter ones.
- `--min-theme-docs` (3) is the smallest cluster reported as a theme; the rest
fall into "no recurring theme".
- `--examples` and `--quote-chars` control the verbatims quoted per theme.
- `--json` emits every theme with its full document id list, for pushing back
into a helpdesk or a spreadsheet.
Bad input exits 2 naming the row and column: a missing required column, an
empty text, a duplicate id, a `source` that is not `review` or `ticket`, or a
rating outside 1–5.
## Reading and presenting the output
- **Themes ranked by rating drag.** Drag is `(overall mean − theme mean) ×
rated reviews in the theme`, in star-points: it combines how bad a theme is
with how often it happens, which volume alone does not. A **negative** drag
means the theme rates above average — those clusters are praise, and they
are the language to reuse in marketing copy, not a problem to fix.
- **Category** per theme: `PRODUCT DEFECT`, `EXPECTATION MISMATCH`,
`LOGISTICS`, `SERVICE`, `USABILITY`, `VALUE`, or `UNCLASSIFIED`. The signal
counts underneath show how decisive the label was; a theme with a thin
margin between two categories deserves a human read.
- **Theme detail** carries the terms, the SKU breakdown, two representative
verbatims with ids, and an owner plus an action.
- **Defect versus expectation** totals. This is the split to lead with.
When reporting to a human:
1. Open with the split: how much of the negative feedback is the product
failing versus the page over-promising. Expectation mismatches are usually
fixable this week by copy, spec, and photography; defects need a supplier
or tooling conversation.
2. Give the top three themes by drag with the star-point number, one verbatim
each, and the SKUs affected. The verbatim is what makes it land.
3. Convert each theme into one owned action, not a summary. "Add base diameter
in inches to the spec table and the first bullet on NF-BTL-32, and shoot one
photo of it in a car cup holder" beats "customers mention fit".
4. Note the themes with negative drag as copy that already works.
5. Be honest about cluster quality: name any theme whose label looks like an
artefact and exclude it from the recommendation list.
## Limits
- **No sentiment analysis.** A theme groups documents that talk about the same
subject, including the ones that praise it. A `lid / leaks` theme can contain
"the lid seals perfectly". Always read the quoted verbatims before acting;
the rating column is the only polarity signal in the report.
- **No semantics or synonyms beyond stemming.** "Too small" and "runs tight"
do not merge. Stemming is a conservative suffix rule, not a lemmatiser, and
it will occasionally mangle a word. Labels show the most common spelling
behind each stem, not the stem.
- **No negation handling.** "Does not leak" and "leaks" contribute the same
term.
- **Themes are statistical, not semantic.** Clusters are built from
co-occurrence in this data set, so they shift when the input window or the
thresholds change. Two runs over different months are not directly
comparable; re-run both windows if you need a trend.
- **Categories come from a fixed signal lexicon** applied after clustering. It
is English, it is DTC-flavoured, and it will mislabel niche vocabulary. It
labels clusters, it never creates them.
- **No causality and no revenue attribution.** It cannot tell you what a theme
costs in returns or lost sales; pair it with returns data for that.
- **Sampling bias is not corrected.** Reviews over-represent the delighted and
the furious, and tickets over-represent problems by construction. Theme
shares describe the feedback you received, not the customer base.
- Quoted verbatims are chosen deterministically (most theme terms, then
shortest, then id), not for rhetorical strength.