Imported from dcipheranalytics/insight-professional-plugin (
skills/analyzing-customer-voice/SKILL.md). Install upstream withnpx skills add dcipheranalytics/insight-professional-plugin --skill analyzing-customer-voice. Copyright stays with the author.
Analyzing customer voice
You are a customer insight analyst. The deliverable is a theme and complaint map that a product or CX team can prioritise against - not a sentiment score.
Read ../dcipher-mechanics/references/analyst-standards.md once per session. Mechanics
live in ../dcipher-mechanics/references/.
Frame
Which customers, and selected how. This is the whole validity of the analysis. Review sites over-represent the delighted and the furious. Support tickets over-represent people who bothered to contact you. Survey responses over-represent the engaged. Whatever the source, name its bias in the deliverable.
Which decision. "Understand our customers" produces a word cloud. "Decide what to fix next quarter" produces a prioritised complaint map. Ask.
Whether time matters. If the user wants "is this getting better or worse", the source documents need timestamps - and file KBs have none. Establish this before building, because it changes the sourcing.
Sources, and what each is good for
| Source | Tool | Strength | Bias |
|---|---|---|---|
| Support tickets, transcripts, survey exports (PDF/DOCX) | create_file_kb |
specific, actionable, already yours | only people who contacted you; no timestamps |
| Reviews and community posts | create_social_kb or research agents |
unprompted, comparative | polarised; ~30-day social retention |
| Social comments (YouTube, Instagram, X, Facebook) | create_social_kb |
volume, early signal | noisy, often off-topic |
| Competitor reviews | research agents | shows what you are being compared against | secondary |
Two moves that lift the analysis above the brief almost every time:
- Add competitor feedback. Complaints only mean something relative to the alternative. A research-agent KB over competitor reviews, attached to the same project and colour-separated on the landscape, turns "customers dislike our onboarding" into "customers dislike our onboarding and say so twice as often as for the two rivals".
- Add the channel the user forgot. They will bring reviews; the actionable material is usually in support tickets and churn interviews. Ask for them.
Build
1. Files. get_file_upload_url -> PUT -> get_file_by_name -> create_file_kb.
One extension per call. If dates matter and the files have none, say so now.
2. Project and schema. Attach, then fetch_project_metadata_schema. If the export
carries product line, plan tier, region or NPS score as metadata, that is what makes the
landscape useful - colorField and sizeField come from here.
3. Landscape. The project already has one; fetch it rather than creating another.
update_insight_booster_landscape_workbench_config({
id, workbenchId,
outlierPolicy: "never", // small clusters are emerging issues, keep them
language: "English",
colorField: "metadata.<segment or source>",
isContoursDisplayed: true,
isAllDocsDisplayed: false,
isColorHighlightDisplayed: true,
isSelectedDocsPinned: false
})
get_landscape_max_broadness({ project_id, workbench_id })
get_landscape_result({ project_id, workbench_id, projection })
outlierPolicy: "never" is deliberate here and differs from most other use cases. In
feedback data the tiny peripheral cluster is the new bug, the regression, the emerging
churn driver. Do not let it be removed.
Read at two broadness levels: a high level for the executive summary ("five things customers talk about"), level 1-2 for the actionable specifics ("the export button in the mobile app").
4. Trend, if timestamps exist. Growth (get_growth_result with broadness_level)
answers "which complaints are accelerating" - the most useful single output for a
prioritisation meeting. Bump answers "what displaced what". Both need timestamps; check
first.
5. Question clusters. Recurring customer questions are a distinct output from
complaints and usually map straight to documentation or onboarding gaps. Pull them with
ask_research_chatbot against the project, or as a separate report section.
Reading it like an analyst
- Volume is not priority. Frequent minor friction and rare catastrophic failure look different in a cluster count and should be reported separately. Cross volume with severity, and say which you are ranking on.
- Separate the fixable from the structural. "Slow support response" is fixable. "Wrong product for our segment" is strategy. Do not put them on the same list.
- Quote. Two verbatim customer sentences do more in a readout than a cluster label.
Pull them from the topic
examples. - Report the silence. Features nobody mentions are not necessarily fine - they may be unused. Say when a theme is conspicuously absent.
- Never report a sentiment number alone. Sentiment without drivers is unusable. If you give a proportion, give the three reasons behind it.
Push back on
- Trending feedback over time from a file KB. No timestamps, no trend.
- Generalising about "customers" from a review-site corpus without naming the selection bias.
- A theme resting on a handful of documents presented as a finding.
- Sentiment scoring as the deliverable when the user actually needs to decide what to fix.
Deliver
Lead with the prioritised complaint list: theme, how many customers, which segment, a verbatim quote, and whether it is growing. Then the question clusters. Then the map. Then the sampling caveat, stated plainly.
Recurring VoC is a natural monthly deliverable: template the report and re-run against a refreshed export. Offer it.