Understanding health scores
Learn how FirstDistro calculates health scores, what each component means, and how to improve scores for your customer accounts.
The 30-second version
Your health score is a number from 0 to 100 that tells you how well a customer account is doing.
- 70-100: Healthy (green) — the account is active, engaged, and adopting your product.
- 40-69: At-risk (amber) — something needs attention. Usage may be declining or key milestones haven't been reached.
- 0-39: Critical (red) — the account is in danger. Immediate outreach is recommended.
The score combines four signals: Activity, Engagement, Milestones, and Recency. If your CRM is connected, a fifth signal (CRM health) is added.
How the overall score is calculated
Each component has a weight that determines how much it contributes to the overall score.
Without crm
| Component | Weight |
|---|---|
| Activity | 40% |
| Engagement | 30% |
| Milestones | 20% |
| Recency | 10% |
With crm connected
| Component | Weight |
|---|---|
| Activity | 35% |
| Engagement | 25% |
| Milestones | 15% |
| Recency | 10% |
| CRM health | 15% |
Worked example
Let's say a customer has these component scores:
- Activity: 80 x 40% = 32 points
- Engagement: 50 x 30% = 15 points
- Milestones: 75 x 20% = 15 points
- Recency: 60 x 10% = 6 points
Overall score: 68 — This account is at-risk. Engagement is the biggest area for improvement.
Activity score
The activity score measures how many events the account generated in the last 30 days.
| Events in last 30 days | Score |
|---|---|
| 0 | 0 |
| 1-5 | 20 |
| 6-15 | 40 |
| 16-30 | 60 |
| 31-50 | 80 |
| 50+ | 100 |
"Why is my activity score 80?" — The account generated between 31 and 50 events in the last 30 days. That's strong usage but not yet at the highest tier. Reaching 50+ events would push the score to 100.
How to improve activity scores
- Ensure your SDK is tracking all meaningful user actions (page views, feature usage, key workflows).
- Look for accounts that were recently active but have gone quiet — they may need a check-in.
- Consider adding event tracking for features you've recently launched.
Engagement score
The engagement score measures how deeply users interact with your product. It has three sub-components:
| Sub-component | Weight | What full marks mean |
|---|---|---|
| Session length | 40% | Average session lasts 5+ minutes |
| Session depth | 40% | Average of 10+ events per session |
| Consistency | 20% | Active every day of the month |
The formula:
Engagement = (
min(avgSessionDuration / 300s, 1) × 40 +
min(avgEventsPerSession / 10, 1) × 40 +
(daysActive / 30) × 20
) × 100
"What does engagement 100 mean?" — A score of 100 means users are spending at least 5 minutes per session, performing 10+ actions per session, and logging in every day. This represents deep, consistent product usage.
How to improve engagement scores
- Focus on onboarding: guide users to valuable features early.
- Look at session depth — if users visit but don't do much, the UI or workflow may need attention.
- Track consistency: accounts that log in regularly are healthier than those with sporadic bursts.
Milestone score
The milestone score tracks key product adoption moments. It's based on how many distinct milestones the account has reached.
| Milestones reached | Score |
|---|---|
| 0 | 0 |
| 1 | 50 |
| 2 | 75 |
| 3+ | 100 |
Default milestones include events like account_created, first_feature_used, and integration_connected. You can configure custom milestones in your event settings.
How to improve milestone scores
- Define milestones that map to your product's "aha moments".
- Use milestone data to identify accounts stuck in onboarding.
- If an account has 0 milestones, they likely need hands-on help getting started.
Recency score
The recency score measures when the account was last active. More recent activity scores higher.
| Last seen | Score |
|---|---|
| Less than 1 day ago | 100 |
| 1-3 days ago | 80 |
| 4-7 days ago | 60 |
| 8-14 days ago | 40 |
| 15-30 days ago | 20 |
| More than 30 days ago | 0 |
How to improve recency scores
- Set up alerts for accounts that haven't been seen in 7+ days.
- Use autopilot emails to re-engage accounts showing inactivity.
- Investigate sudden drops — they may indicate a product issue or personnel change.
Crm score (when connected)
When your CRM (HubSpot or Attio) is connected, FirstDistro adds a fifth scoring component that incorporates relationship and support data.
The CRM score has three sub-components:
Support health (40%)
| Signal | Scoring |
|---|---|
| No open tickets | 100 |
| 1-2 open tickets | 60 |
| 3+ open tickets | 20 |
| High-priority ticket open | 0 |
Relationship health (40%)
| Signal | Scoring |
|---|---|
| Recent meeting (last 14 days) | 100 |
| Recent email (last 7 days) | 80 |
| Some contact (last 30 days) | 50 |
| No recent contact | 0 |
Commercial health (20%)
| Signal | Scoring |
|---|---|
| Active deal, recently updated | 100 |
| Active deal, stale | 50 |
| No active deal / churned | 0 |
How to improve crm scores
- Resolve support tickets promptly — open tickets drag down the score.
- Maintain regular contact with accounts, especially at-risk ones.
- Keep deal stages up to date in your CRM.
Risk levels and what to do
| Risk level | Score range | What it means | Recommended action |
|---|---|---|---|
| Healthy | 70-100 | Account is thriving | Monitor and nurture. Look for expansion opportunities. |
| At-risk | 40-69 | Warning signs present | Investigate the lowest-scoring component. Reach out proactively. |
| Critical | 0-39 | Immediate attention needed | Prioritize this account. Schedule a call. Check for product issues. |
Trends
Trends indicate whether a score is getting better or worse compared to recent history.
- Improving: Current score is 10+ points above the 7-day average.
- Declining: Current score is 10+ points below the 7-day average.
- Steady: Score is within 10 points of the 7-day average.
Trends are calculated for both the overall health score and each individual component.
Frequently asked questions
What does 68 mean?
A score of 68 means the account is in the at-risk range (40-69). The score is calculated from the weighted average of Activity, Engagement, Milestones, and Recency. To understand why it's 68, look at the component breakdown — the lowest-scoring component is your biggest opportunity.
Why is my activity score 80?
An activity score of 80 means the account generated between 31 and 50 events in the last 30 days. This is strong but not at the maximum tier. The score reflects event volume, not a count — "80" doesn't mean "80 events."
What does engagement 100 mean?
An engagement score of 100 means users are deeply and consistently using the product: 5+ minute sessions, 10+ actions per session, and logging in daily. This is the best possible engagement level.
Is it 80 activities or activity score of 80?
It's an activity score of 80, not 80 activities. The score is calculated from event volume buckets. An activity score of 80 corresponds to 31-50 events in the last 30 days.
How do i get it up?
Look at the component breakdown to find the lowest scorer — that's your biggest lever. Each component section above includes specific improvement tips. Generally: increase product usage (Activity), deepen engagement (Engagement), ensure key features are adopted (Milestones), and maintain regular activity (Recency).
How often do scores update?
Health scores recalculate in real-time when you view a customer detail page. The nightly batch job updates all scores for trend tracking and alerts.
Why did a score change suddenly?
Common causes:
- A user stopped logging in (Recency drops fast after 3 days)
- A burst of activity from a product launch (Activity spikes)
- A milestone was reached for the first time (Milestone jumps from 0 to 50)
- CRM data changed (support ticket opened/closed)
Can i customize the scoring?
You can customize which events count as milestones in your event settings. The scoring weights and buckets are standardized across all accounts to ensure consistent benchmarking.
Related pages
- Event tracking guide — learn how to track the events that feed into health scores.
- Getting started — set up your FirstDistro SDK.