When to use
Use this when you need a repeatable, defensible number that tells you which accounts are healthy and which need intervention. Reach for it when building a portfolio-wide health model, or scoring a single account before a QBR, renewal, or escalation.
Not for: measuring a single support interaction's CSAT (that is customer-support); forecasting deal probability for new logos (that is sales); one-off gut-feel escalations where no scoring is needed.
Method
- Choose 4-6 signal categories across three dimensions: usage (adoption breadth, frequency, key-feature use), relationship (sponsor engagement, exec access, NPS), and commercial/support (open escalations, invoice health, seat utilization).
- For each signal, define an objective measurement and a 0-100 sub-score with explicit bands. Decision point: if a signal cannot be measured objectively, drop it or convert it to a manual red/yellow/green flag.
- Assign weights summing to 100%. Weight leading indicators (usage trend, sponsor engagement) higher than lagging ones (NPS). Decision point: if you lack usage data, weight relationship signals higher and mark the score as low-confidence.
- Compute the weighted score. Apply override rules: any critical red signal (e.g., sponsor left, contract dispute) caps the total at "at-risk" regardless of math.
- Map the score to a tier: Healthy (≥75), Watch (50-74), At-risk (<50).
- Attach the top 1-2 dragging signals and a recommended play to every non-healthy account.
- Recompute on a fixed cadence and track the trend — direction matters more than the absolute number.
Example
Account scores: usage-breadth 40/100 (weight 25%), usage-trend 30 (25%), sponsor-engagement 80 (20%), NPS 70 (10%), open-escalations 60 (10%), seat-utilization 50 (10%). Weighted = 10+7.5+16+7+6+5 = 51.5 → Watch. Trend is down two quarters and the sponsor just changed → override to At-risk. Top drags: usage-trend, seat-utilization. Recommended play: re-onboard new sponsor, run adoption push on unused seats.
Pitfalls
- All lagging indicators. A score built only on NPS and renewals tells you about churn after it is unavoidable.
- No override for critical events. A green score with a departed champion is a false negative that costs the renewal.
- Vanity precision. Reporting 73.4 implies accuracy you do not have; use tiers and trend.
- Score with no assigned play. A number nobody acts on is a dashboard, not a health system.
Output format
HEALTH SCORE — <account> | <date>
Overall: <n>/100 → <Healthy|Watch|At-risk> (trend: ↑/↓/→ vs last period) | confidence: <high|low>
Signals (score × weight):
- usage-breadth: <n> × <w>%
- usage-trend: <n> × <w>%
- sponsor-engagement: <n> × <w>%
- <signal>: <n> × <w>%
Override applied: <none | reason → capped tier>
Top drags: <signal 1>, <signal 2>
Recommended play: <play + owner>
1---2name: csm-health-score3description: Define and compute an account health score with weighted risk signals and a clear action threshold.4---56## When to use78Use this when you need a repeatable, defensible number that tells you which accounts are healthy and which need intervention. Reach for it when building a portfolio-wide health model, or scoring a single account before a QBR, renewal, or escalation.910**Not for:** measuring a single support interaction's CSAT (that is customer-support); forecasting deal probability for new logos (that is sales); one-off gut-feel escalations where no scoring is needed.1112## Method13141. Choose 4-6 signal categories across three dimensions: **usage** (adoption breadth, frequency, key-feature use), **relationship** (sponsor engagement, exec access, NPS), and **commercial/support** (open escalations, invoice health, seat utilization).152. For each signal, define an objective measurement and a 0-100 sub-score with explicit bands. Decision point: if a signal cannot be measured objectively, drop it or convert it to a manual red/yellow/green flag.163. Assign weights summing to 100%. Weight leading indicators (usage trend, sponsor engagement) higher than lagging ones (NPS). Decision point: if you lack usage data, weight relationship signals higher and mark the score as low-confidence.174. Compute the weighted score. Apply **override rules**: any critical red signal (e.g., sponsor left, contract dispute) caps the total at "at-risk" regardless of math.185. Map the score to a tier: Healthy (≥75), Watch (50-74), At-risk (<50).196. Attach the top 1-2 dragging signals and a recommended play to every non-healthy account.207. Recompute on a fixed cadence and track the trend — direction matters more than the absolute number.2122## Example2324Account scores: usage-breadth 40/100 (weight 25%), usage-trend 30 (25%), sponsor-engagement 80 (20%), NPS 70 (10%), open-escalations 60 (10%), seat-utilization 50 (10%). Weighted = 10+7.5+16+7+6+5 = 51.5 → Watch. Trend is down two quarters and the sponsor just changed → override to At-risk. Top drags: usage-trend, seat-utilization. Recommended play: re-onboard new sponsor, run adoption push on unused seats.2526## Pitfalls2728- **All lagging indicators.** A score built only on NPS and renewals tells you about churn after it is unavoidable.29- **No override for critical events.** A green score with a departed champion is a false negative that costs the renewal.30- **Vanity precision.** Reporting 73.4 implies accuracy you do not have; use tiers and trend.31- **Score with no assigned play.** A number nobody acts on is a dashboard, not a health system.3233## Output format3435```36HEALTH SCORE — <account> | <date>37Overall: <n>/100 → <Healthy|Watch|At-risk> (trend: ↑/↓/→ vs last period) | confidence: <high|low>38Signals (score × weight):39- usage-breadth: <n> × <w>%40- usage-trend: <n> × <w>%41- sponsor-engagement: <n> × <w>%42- <signal>: <n> × <w>%43Override applied: <none | reason → capped tier>44Top drags: <signal 1>, <signal 2>45Recommended play: <play + owner>46```