Customer health score formula (with a worked example)
Turn login counts and feature usage into one 0-100 health score. Walk through Acme Corp step by step, then see the weighted formula, CRM extension, and normalization methods.
TL;DR
Normalize four signals to 0-100, then combine: Activity (40%) + Engagement (30%) + Milestones (20%) + Recency (10%). Example: Acme Corp scores 72.6 (monitor band). Add CRM data when available. Recalculate daily or in real time.
A health score formula turns raw usage data into one number from 0 to 100. You pick signals, normalize them, weight them, and sum.
For what a health score is and when to use one, see customer health score. This page is the math.
Worked example: Acme Corp scores 72.6
Start with a real account. Same steps you would use in a spreadsheet.
Raw data for Acme Corp:
- Logged in 16 times in the last 30 days (benchmark: 20 = perfect)
- Used 6 of 10 key features, 4 return visits, medium session depth
- Completed onboarding, activated 3 of 5 core features
- Last meaningful action: 3 days ago
Step 1: Normalize each signal (0-100)
- Activity: 16/20 × 100 = 80
- Engagement: feature breadth 60% + return frequency 70% + session depth 55% ≈ 62
- Milestones: 3 of 5 core features activated, onboarding complete = 65
- Recency: 3 days ago, within the 7-day window = 90
Step 2: Apply weights
- Activity: 80 × 0.40 = 32.0
- Engagement: 62 × 0.30 = 18.6
- Milestones: 65 × 0.20 = 13.0
- Recency: 90 × 0.10 = 9.0
Step 3: Sum
- Health score = 32.0 + 18.6 + 13.0 + 9.0 = 72.6
Read the result: 72.6 sits in the monitor band (60-79). Activity (80) and recency (90) look fine. Engagement (62) and milestones (65) lag. Next step: educational outreach to drive feature adoption. For what to do at each band, see how to reduce SaaS churn.
The weighted formula
Each signal scores 0-100 on its own, then combines with fixed weights:
The Signal Stack
Health Score = (Activity × 0.40) + (Engagement × 0.30) + (Milestones × 0.20) + (Recency × 0.10)
- Activity
- Login frequency, session count, and daily active usage patterns (0-100)
- Engagement
- Feature adoption depth, interaction quality, and usage breadth (0-100)
- Milestones
- Onboarding completion, feature activation, and expansion behaviors (0-100)
- Recency
- Time since last meaningful interaction — decays rapidly after 7 days (0-100)
Activity (40%) measures event frequency over 30 days: logins, actions, features used. Declining usage is the strongest churn predictor.
Engagement (30%) measures depth: session length, return visits, feature breadth. Catches customers who log in but do not get value.
Milestones (20%) tracks cumulative wins: onboarding done, core features activated, teammates invited.
Recency (10%) measures days since last meaningful action. Scores decay fast after 7 days of silence.
Unweighted vs weighted
Unweighted average works for a first pass: add normalized metrics and divide by count.
Weighted is better once you have churn data. Not every signal predicts equally. Activity usually beats milestones for early warning.
CRM extension
When CRM data exists alongside product usage, blend behavioral and relationship signals.
Composite score with CRM data
Composite Score = (Behavioral Score × 0.85) + (CRM Health × 0.15)
CRM Health Composite Score
CRM Health = (Support Health × 0.40) + (Relationship Health × 0.40) + (Commercial Health × 0.20)
- Support Health
- Open ticket count, average resolution time, recent escalations (0-100)
- Relationship Health
- Contact count, days since last meeting, champion status (0-100)
- Commercial Health
- Deal stage, days until renewal, active expansion opportunities (0-100)
Support health covers open tickets, resolution time, and escalations. Trend matters more than count alone.
Relationship health covers contact count, days since last meeting, and champion status. Single-threaded accounts with no recent meeting carry risk even when usage looks fine.
Commercial health covers renewal timing, deal stage, and expansion pipeline. Renewal soon plus declining usage is a bad combo.
Data source modes
Not every company has SDK events and CRM data at once.
| Data Available | Mode | Calculation | Use Case |
|---|---|---|---|
| SDK events only | sdk_only | 100% Signal Stack | Product-led companies, no CRM integration |
| CRM data only | crm_only | 100% CRM Health | Sales-led companies, no SDK installed |
| SDK + CRM | sdk_and_crm | 85% Signal Stack + 15% CRM Health | Hybrid companies with both data sources |
Product-led teams without CRM use behavioral signals only. Sales-led teams without SDK use CRM health only. Teams with both get the composite score above.
Normalization methods
Different metric types need different scaling before you weight them.
| Metric type | Normalization | Example |
|---|---|---|
| Higher = better | value / max_value × 100 | 16 logins / 20 benchmark = 80 |
| Lower = better | (1 - value / max_value) × 100 | 2 tickets / 10 max = 80 (inverted) |
| Boolean | Yes = 100, No = 0 | Onboarding complete = 100 |
| Percentage | Already 0-100 | 60% feature adoption = 60 |
| Time-based (recency) | Exponential decay from last action | 3 days = 90, 14 days = 40, 30 days = 10 |
Recency uses exponential decay, not linear. Silence after 7 days drops the score quickly. By 30 days without action, recency is near zero.
Common formula mistakes
- Too many metrics. Fifteen inputs create noise. Stick to 4-7 that you can measure and act on.
- Never recalibrating. Review quarterly against actual churn. Last year's weights may be wrong today.
- One size fits all. Segment enterprise vs SMB, or adjust thresholds per motion.
- No validation. If high-score accounts still churn, your weights or signals are off.
- Manual spreadsheets only. Stale scores miss the two-week quiet period before cancel.
- Ignoring CRM. Great usage with a departing champion is still risk. Blend sources when you can.
Scores are inputs, not outcomes
A formula tells you who needs attention. It does not tell you dollars saved. Pair scores with early warning signs and save playbooks. For the business case beyond dashboards, see customer health score.
Software comparison
| Platform | Scoring Approach | Setup Time | Best For |
|---|---|---|---|
| FirstDistro | AI-powered Signal Stack — auto-learns weights from behavioral data | Under 30 minutes | SMB SaaS teams who want automated health scoring + AI recommendations |
| Gainsight | Rule-based — manual threshold configuration | Weeks to months | Enterprise teams with dedicated CS ops staff |
| ChurnZero | Rule-based with templates | Days to weeks | Mid-market teams wanting template-driven setup |
| Vitally | Rule-based + some ML options | Days | B2B SaaS teams wanting a balance of automation and control |
| Totango | Rule-based journey tracking | Weeks | Teams focused on journey-based customer success |
Rule-based tools need manual thresholds. Automated platforms calculate continuously from live events. See how FirstDistro compares to Gainsight for platform differences.
FirstDistro calls this weighted four-signal approach the Signal Stack. Same math as the Acme example above: normalize, weight, sum, act on the band.
Frequently asked questions
What is the basic customer health score formula?
Unweighted: Health Score = (sum of normalized metric scores) / (number of metrics). Weighted (recommended): Health Score = (Activity × 0.40) + (Engagement × 0.30) + (Milestones × 0.20) + (Recency × 0.10). Each input is normalized to 0-100 first.
Should I use weighted or unweighted health scores?
Start unweighted for simplicity. Move to weighted once you know which metrics predict churn in your product. Activity usually matters more than milestones, so equal weights often mis-rank accounts.
How many metrics should I include in my health score formula?
Aim for 4-7. Fewer than 4 misses risk. More than 7 adds noise. The worked example uses four behavioral signals: activity, engagement, milestones, and recency.
How do I weight metrics in my health score formula?
Weight by correlation with churn. A common starting point: Activity 40%, Engagement 30%, Milestones 20%, Recency 10%. Activity gets the highest weight because declining usage is the strongest churn predictor.
How often should I recalculate health scores?
Daily or real time. Weekly or monthly spreadsheets miss accounts that go quiet for two weeks and never come back. Automated scoring updates as events arrive.
Can I include CRM data in my health score formula?
Yes. Composite Score = (behavioral score × 0.85) + (CRM health × 0.15). CRM health blends support (40%), relationship (40%), and commercial (20%) signals when tickets, meetings, and renewal data exist.
Can I have different formulas for different customer segments?
Yes. Enterprise and SMB healthy usage patterns differ. A startup may log in daily; an enterprise team may log in weekly. Use segment-specific thresholds or weights to avoid false alarms.
Stop churn before it starts
FirstDistro monitors customer health in real-time using the Signal Stack formula and alerts you when accounts are at risk.
Guided onboarding · See the right rollout path
Summary
Definition
A customer health score formula is the calculation that transforms raw customer behavioral data into a single health score (0-100). It defines which metrics you track, how you normalize them, how you weight them, and how they combine into the final score.
Formula
Health Score = (Activity × 0.40) + (Engagement × 0.30) + (Milestones × 0.20) + (Recency × 0.10)
Key Signals
- Activity (40%): Event frequency over the last 30 days
- Engagement (30%): Session depth, return frequency, feature breadth
- Milestones (20%): Feature adoption checkpoints (cumulative)
- Recency (10%): Days since last meaningful action
Thresholds
Framework
Weighted four-signal formula (activity, engagement, milestones, recency) with optional CRM extension. FirstDistro calls this approach the Signal Stack.