Your customer success team is reacting to churn instead of preventing it, because manual health scoring is slow, inconsistent, and blind to early warning signals buried in product usage and support tickets.
Manual health scoring doesn't scale. Your best CS rep might catch that a customer hasn't logged in for three weeks, but by then the relationship is already cooling. A systematic health score—refreshed every week, fed by product data, support interactions, and billing patterns—catches drift before the customer notices it themselves. Here's the workflow: Every Monday morning, your system pulls the previous week's engagement metrics (DAU, feature adoption, session length), ingests support ticket sentiment from your helpdesk, and checks billing health (payment failures, usage overage trends). These signals feed into a weighted scoring model that outputs a single health score per account (0–100, with 100 = thriving). Accounts that drop below a threshold (typically 40–50) trigger an automated alert to the assigned CS owner, including a summary of what changed. The key insight: You're not trying to predict churn with ML magic. You're building a repeatable, auditable system that surfaces the same signals your best CS rep would notice—but for every customer, every week, without fatigue or bias. Why this matters: At-risk accounts don't announce themselves. They show up as a pattern: fewer logins, longer response times to support, a spike in billing disputes. Most teams catch these signals too late. A weekly refresh gives you a seven-day head start to reach out, understand what changed, and offer help before the customer decides to leave. The workflow also creates accountability. Instead of 'we should check in on that account,' you have a documented reason: 'Health score dropped from 65 to 38 this week due to zero product engagement and two unresolved support tickets.' That clarity makes it easier to prioritize CS time and measure intervention success.
Trigger: Weekly schedule (e.g., Monday 8 AM UTC). Alternatively, trigger on manual refresh or when a new support ticket is marked 'critical.'
Query product analytics platform (Amplitude, Mixpanel, or custom warehouse) for each customer: DAU/WAU, feature adoption rate, session count, and days since last login. Flag accounts with zero activity in past 14 days.
Pull support ticket data from Zendesk, Intercom, or Help Scout: ticket volume (past 30 days), average resolution time, CSAT/NPS score, and sentiment classification. High ticket volume + low CSAT indicates friction.
Retrieve from billing system (Stripe, Zuora, Chargebee): current MRR, payment failures in past 60 days, contract renewal date, and any dunning activity. Flag accounts with failed payments or upcoming renewal within 30 days.
Clean and standardize all signals (handle missing values, align timestamps, deduplicate accounts). Validate data quality; log any missing integrations or API failures for manual review.
Apply weighted scoring model: product engagement (40%), support health (30%), billing stability (20%), and account maturity (10%). Score range 0–100. Use rules-based thresholds or ML model trained on historical churn. Document weighting rationale for transparency.
Classify accounts into tiers: Green (75–100), Yellow (50–74), Red (0–49). Identify newly at-risk accounts (score drop >15 points week-over-week). Create separate lists for expansion opportunities (high engagement, low support) and churn risk (low engagement, high support friction).
Add account context: CS owner, last touch date, contract value, primary use case, and known issues. Include recent product updates or feature releases relevant to the account. Attach recommended next actions (e.g., 'Schedule QBR', 'Offer training', 'Escalate to support').
Write health scores and risk segments back to Salesforce, HubSpot, or Pipedrive. Update custom fields for score, risk tier, and last refresh timestamp. Sync to BI dashboard (Tableau, Looker, Metabase) for real-time visibility.
Send Slack notification to CS channel with newly Red-flagged accounts and top Yellow accounts. Include account name, score, primary risk driver, and CS owner. Link to CRM record and recommended action.
Create CSV or dashboard snapshot: total accounts by risk tier, week-over-week score movement, top risk drivers (e.g., 'No login in 14 days', 'High support volume'), and accounts with improving scores. Email to CS leadership and operations.
Record all score updates with timestamp, previous score, new score, and contributing signals. Store in audit table for compliance and historical analysis. Enable CS team to understand why a score changed.
CS ops or leadership reviews flagged anomalies: accounts with contradictory signals (e.g., high engagement but high support volume), data quality issues, or scores that don't match intuition. Adjust weights or investigate data gaps.
1. Connect your product analytics tool (Amplitude, Mixpanel, or custom event logs) to pull weekly DAU, feature adoption, and session metrics per account. 2. Integrate your support platform (Zendesk, Intercom, Freshdesk) to extract ticket count, resolution time, and sentiment score (use NLP or manual tagging) for each customer. 3. Pull billing data from your payment processor (Stripe, Zuora) to flag failed payments, usage overages, or downgrade signals. 4. Build or configure a scoring model: Assign weights to each signal (e.g., 40% engagement, 30% support health, 20% billing, 10% tenure/contract value). Use a simple weighted sum or a logistic regression model trained on historical churn data. 5. Set thresholds: Define what 'at-risk' means for your business (e.g., score < 45). Optionally, create sub-tiers (e.g., 'critical' < 30, 'warning' 30–50). 6. Route alerts: Send weekly reports to CS managers with flagged accounts, sorted by risk level. Include the score breakdown so CS knows what to address. 7. Log all scores and changes in a database or CRM field for trend analysis and intervention tracking.