// diagnose

Review Mining

Use when the user wants to turn public reviews - G2, Capterra, app stores, Reddit threads, support tickets - into customer research: what people complain about and praise, where a competitor is weak, why people switched, what features they ask for, and the words happy customers use. Also use when the user mentions review mining, voice of customer, G2 reviews, competitor reviews, "what do people say about X", review analysis, or wants copy that uses the buyer's own language. Counts reviews rather than quotes, reads sentiment from star ratings only, and says how much of the text its coding reached.

DiagnoseengineStarter
bash
$npx skills add sarojkjha/aaj-marketing-skills --skill review-mining
Or run it in Claude or ChatGPT through the AAJ engines connector

Claude Code

/plugin marketplace add sarojkjha/aaj-marketing-skills
/plugin install aaj-marketing-skills@aaj

OpenAI Codex

codex plugin marketplace add sarojkjha/aaj-marketing-skills
codex plugin add aaj-marketing-skills@aaj

Claude or ChatGPT — no install

Add this as a custom connector:

https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp
Recipes: vendor data in, a verdict out

// when to use it

Use when the user wants to turn public reviews - G2, Capterra, app stores, Reddit threads, support tickets - into customer research: what people complain about and praise, where a competitor is weak, why people switched, what features they ask for, and the words happy customers use. Also use when the user mentions review mining, voice of customer, G2 reviews, competitor reviews, "what do people say about X", review analysis, or wants copy that uses the buyer's own language. Counts reviews rather than quotes, reads sentiment from star ratings only, and says how much of the text its coding reached.

// what you give

Reviews of your product and one or more competitors, each with the product name, the star rating, the text and optionally the source, the date and your own theme coding

// what you get

Per product, each theme's share of reviews with a 95% interval and its praise and complaint counts; the opportunities where a rival is complained about and you are not; the theme to fix first; every switching sentence and feature ask; the phrases happy reviewers use; coverage of the coding; and a verdict

Engine spec

// decision it supports

What do buyers praise and complain about in our reviews and our rivals', and where can we claim an advantage with proof?

// inputs

Reviews of your product and one or more competitors, each with the product name, the star rating, the text and optionally the source, the date and your own theme coding

// output

Per product, each theme's share of reviews with a 95% interval and its praise and complaint counts; the opportunities where a rival is complained about and you are not; the theme to fix first; every switching sentence and feature ask; the phrases happy reviewers use; coverage of the coding; and a verdict

// acts or analyzes

Analyzes only

Makes no network calls, writes no files and changes nothing in your tools.

// where your information goes

How you run itWhere your inputs go
Skill installed in your agent, or the local MCP serverThe engine runs on your machine and AAJ receives nothing. Your AI agent still sends what you give it to its model provider (Anthropic, OpenAI and so on), under your own account's terms.
Hosted MCP serverYour agent's model provider, as above, plus AAJ's server on Cloudflare, which receives the engine inputs over HTTPS, runs them in memory and keeps no copy. Cloudflare keeps error logs (no inputs) for up to 7 days.

No engine needs customer names, emails or other personal data; leave them out.

// limitations

  • Reviews over-represent the delighted and the furious, so theme shares describe reviewers, not the market. It flags a single source; use two before generalising.
  • Sentiment comes from the star rating only. A review with no rating is a mention, and a complaint inside a 4- or 5-star review counts as praise for that theme.
  • The default word list covers twelve software themes and matches words, not meaning. Below 60% coverage or in a specialist category, add a lexicon or code by hand.
  • Under 10 reviews of a product the intervals are too wide to compare. An opportunity is a lead to prove, not a claim the engine has checked.

// review before acting

Whoever owns positioning spot-checks ten word-list-coded reviews and confirms you are provably better before claiming an opportunity. Legal or the content owner confirms consent before any reviewer's words appear in marketing.

// setup

install
$npx skills add sarojkjha/aaj-marketing-skills --skill review-mining
hosted mcp
$https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp

Agents listed: Claude Code, Cursor, OpenAI Codex, Windsurf, Cline. Tested and recorded: Claude Code.

Full spec on GitHub

Review Mining

Your competitors' customers have already written your research. Every G2 page, app-store listing and Reddit thread about your category holds hundreds of people saying, unprompted, what annoys them, what they pay for, why they left one product for another and what they wish existed. Most startups read five of these and remember the angry one. This skill counts all of them.

The engine codes each review into themes, counts how many reviews raise each theme (never how many times), splits praise from complaint using the star rating only, and compares your product with each rival theme by theme. It also pulls out every sentence where someone switched products or asked for a feature, and the phrases your happy reviewers use, which are better headline material than anything a brainstorm produces.

When to use

The user wants to know what buyers in a category care about, where a competitor is weak, or what language to use, and has (or can collect) public reviews. Also before writing a comparison page, a battlecard or a positioning statement, as evidence for the claims in them.

Do not use it for your own interview notes; customer-interview-synthesis codes those with severity. Do not use it to size demand; reviews are written by the unusually pleased and the unusually angry.

Before you start

  1. Read the brand/product context first. Pull your product name, the competitor set and the buyer from .agents/product-marketing.md. If none exists, ask for the product and two or three rivals.
  2. Collect reviews, 30 or more per product if you can. Copy them from the review site with the star rating, the source and the date. Keep the full text; do not summarise.
  3. Decide who codes. The engine's word list covers twelve themes common to software reviews and reports how many reviews it failed to code. For a category with its own vocabulary (clinics, schools, logistics), add themes with lexicon or code by hand with themes on each review.
  4. Respect the source's terms. Copy by hand or export what the site allows; do not scrape where the terms forbid it, and do not republish a reviewer's text without the site's permission.

Method

Count reviews, not quotes. A theme raised three times in one review is one review.

Sentiment is the star rating. Four or five stars is praise, one or two is a complaint, three is mixed, no rating is a mention only. The engine never infers tone from words, because "the support is unbelievable" goes both ways.

Compare like with like. Each product's theme shares carry a 95% Wilson interval; with fewer than 10 reviews of a product (an engine rule) the intervals are too wide to compare it with another.

Opportunity rule. A theme is an opportunity when a rival's complaint share is at least 20% and yours is at least 10 points lower, with 10 or more reviews each (engine rules, stated so you can argue with them). An opportunity is a claim you can make with proof, not a claim the engine makes for you.

Fix first. Your own theme with the most complaints, needing at least two.

Switching sentences and feature asks are found by phrase ("switched from", "moved to", "wish", "no way to"), kept whole, and tagged with the product and the rating.

Buyer language. Two- and three-word phrases that appear in at least two of your praise reviews, and separately in at least two rival complaints. The first list is headline material; the second is the pain your comparison page should name.

Workflow

Step 1 - Paste the reviews with product, rating, source and date. Run the engine.

Step 2 - Read the coverage line. Below 60% coded (engine rule) the word list did not fit the category: add lexicon entries from the uncoded reviews, or code by hand, and re-run.

Step 3 - Spot-check ten lexicon-coded reviews. A word list matches words, not meaning.

Step 4 - Take the opportunities into comparison-pages and objection-handling, each with the rival quote the engine attached as the evidence behind the claim.

Step 5 - Take fix-first to the product team with its quotes, and the feature asks grouped by theme.

Step 6 - Take the praise phrases into positioning-statement and aaj-copywriting. Test them against your current headline with the Five-Second Message Test.

Run the tool

node resources/review-miner.js --demo
node resources/review-miner.js '{"product":"Fieldnote","reviews":[{"product":"Fieldnote","rating":5,"text":"Easy to use."}]}'
node resources/review-miner.js --help

run({ product, reviews, lexicon }) returns per-product theme tables with intervals, opportunities, fix-first, switching sentences, feature asks, buyer language, coding coverage, findings and a verdict. Deterministic, offline, no dependencies.

Present the result

  1. The verdict and the coverage line (how many reviews were coded by hand, by the word list, and not at all).
  2. Your product: top themes with share, interval and praise/complaint split; fix-first with a quote.
  3. Each rival: the same table, and the opportunities with the rival quote.
  4. Switching sentences, grouped by direction (to you, away from you, between rivals).
  5. Feature asks grouped by theme.
  6. Buyer language, both lists, with the review count behind each phrase.
  7. What to do next, in the order of the workflow.

Guardrails & common mistakes

  • Never quote a share from fewer than 10 reviews. Say "3 of 7 mention pricing", not "43%".
  • Never read tone from the text. If the rating is missing, it is a mention.
  • Never publish a reviewer's words as your testimonial. A G2 review is G2's and the reviewer's; use it as research, and get consent before it appears in your marketing (claims-and-proof-check).
  • Reviews are not the market. They over-represent the delighted and the furious, and review sites differ in who writes. Two sources minimum before generalising; the engine flags one source.
  • The word list is a start, not a finding. Code by hand for anything you will put in a deck.
  • A rival's complaint is an opportunity only if you are better there, provably. Claim it with the evidence, or do not claim it.
  • customer-interview-synthesis - the same counting discipline for your own interviews
  • positioning-statement - where the praise phrases go
  • comparison-pages and objection-handling - where the opportunities go, with their quotes
  • aaj-copywriting - scoring copy that uses the buyer's language
  • win-loss-analysis - the switching story from your own closed deals

// faq

// install

$npx skills add sarojkjha/aaj-marketing-skills --skill review-mining

// worked example

Get the worked example for Review Mining

One email. The filled-in config, the output, and how to read it.

No spam. Unsubscribe anytime.

// human in the loop

Need a human in the loop?

AAJ builds the strategies, tools, and playbooks these skills are made of — with engagements for growth-stage and enterprise teams.