Account Health Scorer
Portfolio-level triage for CSMs managing 100+ enterprise accounts. Converts a flat portfolio export into a ranked risk register and a weekly action list.
Inputs
portfolio.csv: account_id, vertical, contract_value, renewal_date, trailing_90d_spend, trailing_90d_spend_prior, open_tickets, last_qbr_date, active_users, licensed_users- Optional overrides file for accounts with known context (executive change, M&A, budget freeze)
Synthetic sample in references/sample_portfolio.csv.
Workflow
- Run
scripts/score.pyto compute per-account signals: spend velocity delta, utilization ratio (active/licensed), support burden per dollar, days since last touch, days to renewal. - Apply the weighting model in
references/scoring_model.md. Renewal proximity acts as a multiplier on risk, not an additive term. An at-risk account 60 days from renewal outranks a worse account 300 days out. - Segment output into four queues: Act This Week, Monitor, Stable, Expansion Candidates.
- For each Act This Week account, generate a one-line reason code tied to the specific signal that triggered it.
Output format
Ranked table per queue, then a ## This Week section listing at most 8 accounts with reason codes and a suggested first action for each.
Guardrails
- Cap the action list. A triage that outputs 40 priorities is not a triage.
- Reason codes must reference the computed signal, never a generic label like "low engagement."