--- name: csat-nps-analysis description: "Analyse CSAT / NPS / CES survey results and turn the score into actions. Use when asked to analyse NPS, CSAT, or CES data, compute an NPS score, interpret survey verbatims, or build a voice-of-customer readout. Produces a readout — the computed score, the trend & benchmark, themed analysis of the comments (what drives promoters vs. detractors), and prioritised actions. Includes a stdlib NPS/CSAT calculator." --- # CSAT / NPS Analysis Skill A satisfaction score on its own is a vanity number — the value is in *why* it's that number and *what to do*. This skill computes the score correctly (NPS is %promoters − %detractors, not an average), reads the verbatims for the themes driving promoters and detractors, and turns it into a prioritised action list — so a survey becomes a roadmap, not a slide. ## Required Inputs Ask for these only if they aren't already provided: - **The metric & data** — NPS (0–10 ratings), CSAT (e.g. 1–5 or % satisfied), or CES; the response counts/distribution. - **The verbatims** — open-text comments (the gold; paste what you have). - **Context** — segment, time period, and the prior score for trend. ## Output Format ### [CSAT / NPS / CES] Readout: [segment, period] **1. The score** — computed (use the helper for NPS/CSAT): the headline number, the **distribution** (promoters/passives/detractors for NPS), the **trend** vs. last period, and the **benchmark** (industry/your target). State the formula — NPS is a net of percentages, not an average. **2. What's driving it** — theme the verbatims: - **Promoters love:** the 2–3 recurring reasons people rate high (protect/amplify these). - **Detractors hurt by:** the 2–3 recurring pains (these are your fix list). - **Passives need:** what would move them up. Quote a representative comment per theme. **3. Segments** — where the score is notably worse/better (plan, tenure, channel), if the data allows — the average hides this. **4. Actions** — prioritised: the highest-frequency × highest-impact detractor themes first, each with an owner and the metric it should move. A score with no actions is wasted. ## Programmatic Helper `scripts/nps.py` (stdlib only) computes NPS / CSAT from the rating distribution: ```bash # NPS from 0-10 counts (11 numbers, ratings 0..10): python3 scripts/nps.py nps 12 5 8 ... # CSAT % satisfied (ratings 4-5 on a 1-5 scale): python3 scripts/nps.py csat 2 3 10 40 55 python3 scripts/nps.py nps "...counts..." --json ``` ## Quality Checks - [ ] NPS is computed as %promoters − %detractors (not an average of scores) - [ ] The distribution and trend vs. last period are shown, plus a benchmark/target - [ ] Verbatims are themed into promoter/detractor drivers, with a representative quote each - [ ] Segment differences are surfaced where the data allows (the average lies) - [ ] Ends with prioritised, owned actions tied to the biggest detractor themes ## Anti-Patterns - [ ] Do not average NPS ratings — it's a net of percentages; averaging gives a meaningless number - [ ] Do not report the score without the why — the verbatims are where the action is - [ ] Do not ignore passives — they're the cheapest group to convert into promoters - [ ] Do not stop at the score — an analysis with no prioritised action changes nothing - [ ] Do not trust a tiny sample — flag low n; a 12-response NPS swing is noise, not a trend ## Based On Voice-of-customer practice — correct NPS/CSAT/CES computation, verbatim theming, and action prioritisation.