Customer Health Scorecard Skill
Produce a structured, data-driven health scorecard for a customer account — giving the CSM and leadership a clear view of renewal risk, expansion potential, and the actions needed to move the account in the right direction.
Required Inputs
Ask for these if not already provided:
- Account name and tier (enterprise / mid-market / SMB)
- Contract value (ARR) and renewal date
- Product usage data — logins, DAU/MAU ratio, key feature adoption
- Support data — open tickets, CSAT or NPS score, recent escalations
- Engagement data — last QBR date, executive sponsor status, champion name
- Commercial data — payment history, expansion conversations, seats used vs. licensed
- Any known risks or recent changes at the account
Scoring Framework
Score each dimension 1–5. Weight as shown. Calculate weighted total out of 100.
| Dimension |
Weight |
What to Score |
| Product Adoption |
30% |
DAU/MAU ratio, breadth of features used, power users identified |
| Engagement |
20% |
QBR cadence, executive sponsor active, champion strength |
| Outcomes |
20% |
Customer hitting their stated goals / success metrics |
| Support Health |
15% |
Ticket volume trend, unresolved escalations, CSAT |
| Commercial |
15% |
On-time payments, seats utilised, expansion signals |
Score → RAG conversion:
- 80–100: Green (healthy, renew likely)
- 60–79: Amber (at risk, needs attention)
- 0–59: Red (high churn risk, escalate)
Programmatic Helper
This skill ships with a stdlib-only Python script that applies the weights above and converts the weighted total to a RAG status — so the headline score is computed identically every time and weights always sum to 100%.
# Five scores 1-5 in order: adoption engagement outcomes support commercial
python3 scripts/health_score.py --scores 4 3 4 2 5 --account "Acme Corp"
# Or from JSON (lets you override the default weights per account/segment)
python3 scripts/health_score.py --input account.json
It returns the per-dimension weighted points, the total out of 100, and the RAG band (Green ≥80, Amber 60–79, Red <60) with a one-line next step. Run it to set the headline number, then write the dimension detail and actions below around it. Add --json for downstream tooling.
Output Format
Customer Health Scorecard: [Account Name]
CSM: [Name] | Tier: [Enterprise / Mid-Market / SMB]
ARR: £/$/€[X] | Renewal date: [Date] | Days to renewal: [N]
Overall health: [Green / Amber / Red] — [Score]/100
Last updated: [Date]
Health Score Summary
| Dimension |
Score (1–5) |
Weight |
Weighted Score |
Trend |
| Product Adoption |
[1–5] |
30% |
[X] |
↑ / → / ↓ |
| Engagement |
[1–5] |
20% |
[X] |
↑ / → / ↓ |
| Outcomes |
[1–5] |
20% |
[X] |
↑ / → / ↓ |
| Support Health |
[1–5] |
15% |
[X] |
↑ / → / ↓ |
| Commercial |
[1–5] |
15% |
[X] |
↑ / → / ↓ |
| Total |
— |
100% |
[X]/100 |
|
Dimension Detail
Product Adoption — [Score]/5
- DAU/MAU ratio: [X]% (benchmark: >25% = healthy)
- Key features adopted: [List features in use]
- Features not adopted: [List unused high-value features]
- Power users identified: [Yes / No — how many]
- Assessment: [1–2 sentences on adoption health]
Engagement — [Score]/5
- Last QBR: [Date] — [Outcome summary]
- Next QBR: [Scheduled / Overdue]
- Executive sponsor: [Active / Passive / Vacant]
- Champion: [Name, role, strength: strong / moderate / weak]
- Assessment: [1–2 sentences]
Outcomes — [Score]/5
- Customer's stated goals: [List 2–3 goals from onboarding or last QBR]
- Progress against goals: [On track / Partial / Off track]
- Evidence of value: [Metric or quote that demonstrates ROI]
- Assessment: [1–2 sentences]
Support Health — [Score]/5
- Open tickets: [N] (priority breakdown: P1: X, P2: X, P3: X)
- CSAT / NPS: [Score] (benchmark: >8 CSAT / >30 NPS = healthy)
- Unresolved escalations: [Yes / No — details if yes]
- Ticket trend (last 90 days): Increasing / Stable / Decreasing
- Assessment: [1–2 sentences]
Commercial — [Score]/5
- Seats licensed: [N] | Seats active: [N] ([X]% utilisation)
- Payment history: [On time / Late — details]
- Expansion signals: [Yes — describe / No]
- Downgrade or cancellation signals: [Yes — describe / No]
- Assessment: [1–2 sentences]
Top Risks
| Risk |
Severity |
Mitigation |
| [Risk description] |
High / Medium / Low |
[Specific action to mitigate] |
Recommended Actions
Immediate (this week):
- [Action — owner — deadline]
This month:
- [Action — owner — deadline]
Before renewal:
- [Action — owner — deadline]
Renewal Forecast
| Scenario |
Probability |
ARR at risk |
| Full renewal at current ARR |
[X]% |
£/$/€0 |
| Renewal with contraction |
[X]% |
£/$/€[X] |
| Churn |
[X]% |
£/$/€[full ARR] |
Recommended renewal play: [Expand / Hold / Save / Manage out]
Scoring Rubric (0–40)
Score any output of this skill before handing it over; 32+ is ship-quality.
| Dimension |
0 |
5 |
10 |
| Score integrity |
Weighted total doesn't compute from the dimension scores and stated weights, or the RAG band contradicts the total |
Arithmetic is correct but weights were adjusted silently, or the headline RAG smooths over a dimension that tells a different story |
Total computes exactly (score × weight on the 1–5 scale, out of 100), RAG matches the 80/60 bands, and any dimension that contradicts the overall status is called out rather than averaged away |
| Evidence per dimension |
Dimension scores asserted with no supporting data ("engagement feels weak") |
Most dimensions cite data, but at least one score leans on gut feel or a stale data point presented as current |
Every dimension score is anchored to named, dated evidence (usage figures, ticket counts, QBR dates, seat utilisation) and benchmarks are applied where the format provides them |
| Risk specificity |
Risks are labels ("low engagement", "churn risk") with no people, dates, or dollar amounts |
Risks are real but partially vague — severity assigned without a mitigation, or mitigations without owners |
Every risk names the person/event/amount involved ("champion departs 25 July, no successor"), carries a severity, and has a mitigation someone could start this week |
| Renewal calibration |
Forecast missing, probabilities don't sum to 100%, or the recommended play ignores the score |
Forecast present and sums correctly, but ARR-at-risk figures don't reconcile to contract line items, or the play is generic |
Probabilities sum to 100%, ARR at risk maps to actual contract components, the play (Expand/Hold/Save/Manage out) follows from the score and risks, and actions are owned, dated, and sequenced against the renewal date |
Quality Checks
Anti-Patterns
1---2name: cs-health-scorecard-23description: Build a customer health scorecard for a specific account. Use when asked to score account health, assess renewal risk, build a health dashboard, or evaluate an account's likelihood to renew or expand. Produces a structured health scorecard with a RAG status, dimension scores, key risks, and recommended actions.4---56# Customer Health Scorecard Skill78Produce a structured, data-driven health scorecard for a customer account — giving the CSM and leadership a clear view of renewal risk, expansion potential, and the actions needed to move the account in the right direction.910## Required Inputs1112Ask for these if not already provided:13- **Account name** and tier (enterprise / mid-market / SMB)14- **Contract value** (ARR) and **renewal date**15- **Product usage data** — logins, DAU/MAU ratio, key feature adoption16- **Support data** — open tickets, CSAT or NPS score, recent escalations17- **Engagement data** — last QBR date, executive sponsor status, champion name18- **Commercial data** — payment history, expansion conversations, seats used vs. licensed19- **Any known risks or recent changes** at the account2021## Scoring Framework2223Score each dimension 1–5. Weight as shown. Calculate weighted total out of 100.2425| Dimension | Weight | What to Score |26|---|---|---|27| **Product Adoption** | 30% | DAU/MAU ratio, breadth of features used, power users identified |28| **Engagement** | 20% | QBR cadence, executive sponsor active, champion strength |29| **Outcomes** | 20% | Customer hitting their stated goals / success metrics |30| **Support Health** | 15% | Ticket volume trend, unresolved escalations, CSAT |31| **Commercial** | 15% | On-time payments, seats utilised, expansion signals |3233**Score → RAG conversion:**34- 80–100: Green (healthy, renew likely)35- 60–79: Amber (at risk, needs attention)36- 0–59: Red (high churn risk, escalate)3738## Programmatic Helper3940This skill ships with a stdlib-only Python script that applies the weights above and converts the weighted total to a RAG status — so the headline score is computed identically every time and weights always sum to 100%.4142```bash43# Five scores 1-5 in order: adoption engagement outcomes support commercial44python3 scripts/health_score.py --scores 4 3 4 2 5 --account "Acme Corp"4546# Or from JSON (lets you override the default weights per account/segment)47python3 scripts/health_score.py --input account.json48```4950It returns the per-dimension weighted points, the **total out of 100**, and the **RAG band** (Green ≥80, Amber 60–79, Red <60) with a one-line next step. Run it to set the headline number, then write the dimension detail and actions below around it. Add `--json` for downstream tooling.5152## Output Format5354---5556# Customer Health Scorecard: [Account Name]5758**CSM:** [Name] | **Tier:** [Enterprise / Mid-Market / SMB]59**ARR:** £/$/€[X] | **Renewal date:** [Date] | **Days to renewal:** [N]60**Overall health:** [Green / Amber / Red] — [Score]/10061**Last updated:** [Date]6263---6465## Health Score Summary6667| Dimension | Score (1–5) | Weight | Weighted Score | Trend |68|---|---|---|---|---|69| Product Adoption | [1–5] | 30% | [X] | ↑ / → / ↓ |70| Engagement | [1–5] | 20% | [X] | ↑ / → / ↓ |71| Outcomes | [1–5] | 20% | [X] | ↑ / → / ↓ |72| Support Health | [1–5] | 15% | [X] | ↑ / → / ↓ |73| Commercial | [1–5] | 15% | [X] | ↑ / → / ↓ |74| **Total** | — | 100% | **[X]/100** | |7576---7778## Dimension Detail7980### Product Adoption — [Score]/581- **DAU/MAU ratio:** [X]% (benchmark: >25% = healthy)82- **Key features adopted:** [List features in use]83- **Features not adopted:** [List unused high-value features]84- **Power users identified:** [Yes / No — how many]85- **Assessment:** [1–2 sentences on adoption health]8687### Engagement — [Score]/588- **Last QBR:** [Date] — [Outcome summary]89- **Next QBR:** [Scheduled / Overdue]90- **Executive sponsor:** [Active / Passive / Vacant]91- **Champion:** [Name, role, strength: strong / moderate / weak]92- **Assessment:** [1–2 sentences]9394### Outcomes — [Score]/595- **Customer's stated goals:** [List 2–3 goals from onboarding or last QBR]96- **Progress against goals:** [On track / Partial / Off track]97- **Evidence of value:** [Metric or quote that demonstrates ROI]98- **Assessment:** [1–2 sentences]99100### Support Health — [Score]/5101- **Open tickets:** [N] (priority breakdown: P1: X, P2: X, P3: X)102- **CSAT / NPS:** [Score] (benchmark: >8 CSAT / >30 NPS = healthy)103- **Unresolved escalations:** [Yes / No — details if yes]104- **Ticket trend (last 90 days):** Increasing / Stable / Decreasing105- **Assessment:** [1–2 sentences]106107### Commercial — [Score]/5108- **Seats licensed:** [N] | **Seats active:** [N] ([X]% utilisation)109- **Payment history:** [On time / Late — details]110- **Expansion signals:** [Yes — describe / No]111- **Downgrade or cancellation signals:** [Yes — describe / No]112- **Assessment:** [1–2 sentences]113114---115116## Top Risks117118| Risk | Severity | Mitigation |119|---|---|---|120| [Risk description] | High / Medium / Low | [Specific action to mitigate] |121122---123124## Recommended Actions125126**Immediate (this week):**1271. [Action — owner — deadline]128129**This month:**1301. [Action — owner — deadline]131132**Before renewal:**1331. [Action — owner — deadline]134135---136137## Renewal Forecast138139| Scenario | Probability | ARR at risk |140|---|---|---|141| Full renewal at current ARR | [X]% | £/$/€0 |142| Renewal with contraction | [X]% | £/$/€[X] |143| Churn | [X]% | £/$/€[full ARR] |144145**Recommended renewal play:** [Expand / Hold / Save / Manage out]146147---148149## Scoring Rubric (0–40)150151Score any output of this skill before handing it over; 32+ is ship-quality.152153| Dimension | 0 | 5 | 10 |154|---|---|---|---|155| Score integrity | Weighted total doesn't compute from the dimension scores and stated weights, or the RAG band contradicts the total | Arithmetic is correct but weights were adjusted silently, or the headline RAG smooths over a dimension that tells a different story | Total computes exactly (score × weight on the 1–5 scale, out of 100), RAG matches the 80/60 bands, and any dimension that contradicts the overall status is called out rather than averaged away |156| Evidence per dimension | Dimension scores asserted with no supporting data ("engagement feels weak") | Most dimensions cite data, but at least one score leans on gut feel or a stale data point presented as current | Every dimension score is anchored to named, dated evidence (usage figures, ticket counts, QBR dates, seat utilisation) and benchmarks are applied where the format provides them |157| Risk specificity | Risks are labels ("low engagement", "churn risk") with no people, dates, or dollar amounts | Risks are real but partially vague — severity assigned without a mitigation, or mitigations without owners | Every risk names the person/event/amount involved ("champion departs 25 July, no successor"), carries a severity, and has a mitigation someone could start this week |158| Renewal calibration | Forecast missing, probabilities don't sum to 100%, or the recommended play ignores the score | Forecast present and sums correctly, but ARR-at-risk figures don't reconcile to contract line items, or the play is generic | Probabilities sum to 100%, ARR at risk maps to actual contract components, the play (Expand/Hold/Save/Manage out) follows from the score and risks, and actions are owned, dated, and sequenced against the renewal date |159160## Quality Checks161162- [ ] Score is based on data, not gut feel — each dimension has evidence163- [ ] Risks are specific (not "low engagement" — something like "executive sponsor left in March, no replacement identified")164- [ ] Actions have owners and deadlines165- [ ] Renewal probability is calibrated against pipeline reality166- [ ] Trend arrows reflect direction of change vs. last scorecard, not just current state167168## Anti-Patterns169170- [ ] Do not score health dimensions on gut feel — every score needs specific supporting evidence171- [ ] Do not give a Green status to accounts with unresolved P1 issues or missed milestones172- [ ] Do not list risks vaguely — "low engagement" without specifics is not actionable173- [ ] Do not leave recommended actions without named owners and deadlines174- [ ] Do not conflate product usage frequency with product value delivery