Feedback clustering
Fifteen reports of the same broken thing collapse into one theme with a count, a severity, and the reports behind it. From the cluster you open one PR you review and merge. Nothing auto-merges.
Customer feedback analysis is usually someone reading the same complaint fifteen times across fifteen tabs, trying to remember if they have seen it before. The job is not collecting more. It is seeing that fifteen people said one thing.
Manual tagging works at ten reports a week and breaks at a hundred. The taxonomy drifts (onboarding, signup, and getting started become three tags for one problem), two people tag the same report differently so the counts turn to fiction, and the untagged backlog grows faster than anyone clears it. The deeper issue is that tags match words and users do not use your words: "export does nothing", "can not download my report", and "CSV is broken on Safari" are one bug and three tags, scattered across your board. What you want is grouping by meaning, with a number on each theme, because "slow export" with one report is an anecdote and "slow export" with twenty is a decision that makes itself.
How it works
Disclosure: I build Usero, so weigh that. Clustering runs on its own, no button to press. Feedback lands from any source (widget, API, imported GitHub issue, email, Slack), each item is classified for category, sentiment, urgency, and topics, then matched to the closest existing cluster by meaning rather than keywords, or it starts a new one. The classification runs on a flat-rate Claude Code container, not a metered per-token API, so it is on every plan. You open the dashboard and the themes are already grouped, each with a member count, a severity, and the reports behind it. Every membership carries an AI confidence score, so a weak match is visible and you can ignore it. Then the wedge runs: from a cluster you click Create PR and Usero opens one GitHub pull request scoped to the open reports, linked back to all of them. You review the diff and merge it yourself.
Usero reads "export does nothing", "can not download my report", and "CSV is broken" and recognizes them as one problem, then puts a count on it. The count is the point: it turns a wall of anecdotes into a ranked list of what actually recurs.
Each cluster lists its members with the AI confidence that each one belongs. Sort by confidence and a weak join is obvious, so you can discard a bad merge. The grouping is a draft you read, not an action the tool takes on its own.
You never kick off a batch run or invent a category list. New feedback is classified and clustered as it arrives, and the cluster count, severity, urgency, and momentum update with it.
Twenty reports of a broken export become one cluster, and that cluster becomes one pull request that answers all twenty, instead of you opening the same change twenty times.
The honest objection
It can, which is exactly why the grouping is something you read rather than something that acts on its own. Each cluster shows its members with a per-item confidence score, so a weak or wrong match is visible and you can ignore it. Treat the clusters as a strong first pass at the themes, the same way the AI-written PR is a first pass at the fix. And a big cluster tells you what recurs, not what to build: read it to find the pain, then decide the fix with your own view of the code.
FAQ
Automatic. Feedback is classified and assigned to a cluster as it arrives from any source, and a periodic batch sweeps up anything still unclustered. You never trigger a run; you open the dashboard and the themes are already grouped.
It compares the meaning of each report against existing clusters and assigns the closest match, or starts a new cluster if nothing fits well enough. Matching is by meaning, not keywords, so reports that share no words can still group if they describe the same problem. Each membership records a confidence score you can see.
Yes. From the cluster page click Create PR and Usero opens one GitHub pull request scoped to the cluster open reports, linked back to all of them. It is idempotent (clicking again returns the existing PR), it is a draft you review, and nothing auto-merges.
Active means open reports remain. Addressed means every report in the cluster has been resolved. Reopened means a cleared cluster picked up new reports, the signal that a fix did not hold.
Classification and clustering run on a flat-rate Claude Code container rather than a metered per-token API, so the analysis is on every plan rather than rationed behind a usage meter.
Free tier. No credit card. Two-minute install. The AI opens the PR, you merge it.