← All resources
GuideAug 9, 202616 min read

How to Build a Customer Health Score in HubSpot

Learn how to build a customer health score in HubSpot using product usage data. Step-by-step guide with calculation properties and real examples.

Quick answer: A customer health score in HubSpot combines product usage, engagement, and support data into a single metric that predicts renewal and expansion risk. The fastest way to build one is a calculation property that weights login frequency (40%), feature adoption (30%), support satisfaction (20%), and firmographic fit (10%), then triggers workflows when scores drop below your at-risk threshold.

  • Calculation property - Native HubSpot, real-time updates, no code. Limited to data already on the contact or company record.
  • Custom workflow with score increments - More flexible conditional logic, but lags behind events and harder to maintain.
  • Reverse ETL from warehouse - Most powerful for complex models, but requires data engineering and $350+ per month.
  • Zoody - Syncs product events directly to HubSpot in real time, then score in HubSpot. No warehouse, $149/mo.

What is a Customer Health Score?

A customer health score is a predictive metric that measures the likelihood a customer will renew, expand, or churn. It combines multiple signals (product usage, engagement activity, support interactions, firmographic fit) into a single number that tells your customer success and sales teams which accounts need attention and which are ready for expansion conversations.

Traditional health scores relied on engagement proxies: email open rates, meeting attendance, support ticket volume. Those metrics tell you if a customer is talking to you, but not whether they're getting value from your product. A product-usage-based health score tracks what users actually do inside your app, which is a far better predictor of retention and growth.

The score itself is just a number (typically 0-100). The value comes from the automation around it: workflows that create tasks when a score drops, dashboards that surface at-risk accounts, segments that route high-health users to expansion plays.

Why Product Usage Data Makes Health Scores More Accurate

Engagement metrics measure inputs. Product usage measures outcomes. A customer can open every email, attend every QBR, and still churn if they're not logging in or adopting core features.

The correlation between product usage and retention is mechanical. If a user logs in daily and uses three features, they've built the product into their workflow. If they haven't logged in for two weeks, no amount of email engagement will prevent churn.

Product usage signals also catch problems earlier. Support tickets and NPS surveys are lagging indicators that surface after frustration has set in. A drop in login frequency shows up weeks before a customer tells you they're unhappy.

For product-led growth companies, usage data is the entire health model. Free trial users don't attend webinars or respond to emails. Their behavior in the product is the only signal you have.

Customer Health Score vs PQL Score

A product-qualified lead (PQL) score predicts conversion likelihood for free or trial users. A customer health score predicts renewal and expansion for paying customers. Same mechanics, different outcome.

PQL scoring focuses on activation milestones and early feature adoption. Health scoring adds ongoing engagement trends, support satisfaction, and contract value. Both use product usage as the foundation.

You can run the same calculation property structure for both. The difference is which properties you weight and which thresholds trigger which workflows. A PQL score of 80 might route to sales. A health score of 30 might trigger a CSM intervention.

Key Product Usage Signals for Customer Health Scoring

Not all usage signals predict retention equally. The ones that matter most are the ones that correlate with your product's core value delivery.

Login frequency and recency - The most universal signal. Daily active users (DAU) and monthly active users (MAU) ratios tell you how sticky the product is. A customer who logged in yesterday is healthier than one who logged in three weeks ago, regardless of any other metric.

Feature adoption depth - Count of distinct features used in the last 30 days. A customer using one feature is fragile. A customer using five has integrated your product into multiple workflows and is far less likely to churn.

Activation milestones - Onboarding completion rate, time to first value, specific setup actions (connected integration, invited teammates, completed first workflow). These predict whether a customer will stick past the first 90 days.

Usage trends - Week-over-week or month-over-month changes in activity. Declining login counts are the earliest churn signal. Increasing activity often precedes expansion.

Seat utilization and team adoption - For B2B products sold per seat, the percentage of purchased seats that are active matters. An account with 10 licenses and 2 active users is at higher churn risk than one with 10 licenses and 9 active users.

Behavioral Signals That Predict Churn

Specific patterns consistently predict churn across B2B SaaS products:

  • No login in 14+ days - The single strongest signal. If a paying customer hasn't logged in for two weeks, intervention is urgent.
  • Decreasing login frequency - A customer who went from daily logins to weekly logins to bi-weekly is trending toward churn.
  • Single-user adoption in a team account - One person using the product means no organizational buy-in. When that person leaves or loses interest, the account churns.
  • Support ticket volume spike - Not the existence of tickets, but a sudden increase. It indicates frustration with a specific feature or workflow.
  • Failed payments or downgrade requests - Obvious, but often not weighted heavily enough in health models.

Growth Signals That Indicate Expansion Opportunity

High health scores should route to expansion plays, not just prevent churn conversations.

  • Seat limit reached - Active users at or near license count means they need more seats.
  • Power user behavior - Users in the top decile of activity are candidates for upsell conversations (premium features, higher plans, services).
  • Cross-functional adoption - When a product spreads from one team (marketing) to another (sales), that account is ready for an enterprise conversation.
  • Integration usage - Customers who connect multiple integrations have deeper product investment and are more receptive to expansion.

How to Build a Customer Health Score in HubSpot (Step-by-Step)

Building a functional health score in HubSpot takes four steps: sync the product data, create component properties, build the calculation, segment by tier.

Setting Up Your Product Data Sync

You need product usage events on HubSpot company records before you can score them. The three ways to get that data are reverse ETL from a warehouse, custom API integration, or a direct sync tool like Zoody.

Reverse ETL tools (Hightouch, Census) require a data warehouse (Snowflake, BigQuery), transformation layer (dbt), and ongoing data engineering. Cost starts at $350/mo for the reverse ETL tool plus warehouse costs. Setup takes weeks. This makes sense if you already run a warehouse and need to sync data to multiple destinations beyond HubSpot.

Custom HubSpot API integration means your engineering team writes code to push events from your product database to HubSpot. You control the logic, but you own the maintenance. API rate limits on HubSpot Professional tier are 100 calls per 10 seconds, which matters if you're syncing high-volume events.

Zoody sends product events directly to HubSpot without a warehouse. You define the events in your product (login, feature_used, milestone_completed), Zoody tracks them via SDK, and they appear as properties on HubSpot company and contact records in real time. No data engineering, $149/mo flat rate. This is the fastest path if HubSpot is your CRM and you don't already have warehouse infrastructure.

Whichever method you choose, the events you need for health scoring are:

  • last_login_date (date property on company)
  • login_count_30d (number property, rolling 30-day window)
  • features_used_30d (number property, count of distinct features)
  • onboarding_complete (boolean or date)
  • active_seat_count (number, updated daily)

Creating Component Score Properties

Don't try to build the final health score in one calculation. Break it into component scores first, each normalized to the same scale (0-100 works well).

Login frequency score - Create a number property login_frequency_score. Use a HubSpot calculation property with conditional logic:

if login_count_30d >= 20 then 100
else if login_count_30d >= 10 then 75
else if login_count_30d >= 5 then 50
else if login_count_30d >= 1 then 25
else 0

Feature adoption score - Create feature_adoption_score:

if features_used_30d >= 5 then 100
else if features_used_30d >= 3 then 75
else if features_used_30d >= 2 then 50
else if features_used_30d == 1 then 25
else 0

Recency score - Create login_recency_score based on days_since_last_login (calculated as today - last_login_date):

if days_since_last_login <= 2 then 100
else if days_since_last_login <= 7 then 75
else if days_since_last_login <= 14 then 50
else if days_since_last_login <= 30 then 25
else 0

Support satisfaction score - If you track NPS or CSAT in HubSpot, create support_satisfaction_score:

if nps_score >= 9 then 100
else if nps_score >= 7 then 75
else if nps_score >= 5 then 50
else if nps_score >= 1 then 25
else 50

The else 50 default handles accounts with no NPS response (neutral assumption).

Building the Master Health Score Calculation

Now create the composite property customer_health_score. This is a calculation property that weights the component scores.

The formula weights product usage signals at 40%, engagement at 30%, support at 20%, and firmographic fit at 10%:

(login_frequency_score * 0.2) +
(feature_adoption_score * 0.1) +
(login_recency_score * 0.1) +
(support_satisfaction_score * 0.2) +
(email_engagement_score * 0.15) +
(meeting_attendance_score * 0.15) +
(firmographic_fit_score * 0.1)

If you don't have all these component properties yet, start with the subset you do have and normalize the weights to sum to 1. A minimal version using just product usage:

(login_frequency_score * 0.5) +
(feature_adoption_score * 0.3) +
(login_recency_score * 0.2)

The calculation updates whenever any component property changes. With Zoody or another real-time sync, that means health scores update as events happen, not on a nightly batch.

Segmenting Customers by Health Tier

Create an enumeration property health_tier with values: At Risk, Stable, Healthy, Champion. Then build a workflow that sets the tier based on score thresholds:

  • At Risk: customer_health_score < 40
  • Stable: customer_health_score >= 40 and < 60
  • Healthy: customer_health_score >= 60 and < 80
  • Champion: customer_health_score >= 80

The workflow triggers on customer_health_score change, checks which range the new score falls into, and updates health_tier. You can then filter lists, build reports, and trigger other workflows based on the tier.

Health Score Weighting: What Matters Most

The 40/30/20/10 weighting framework (product usage, engagement, support, firmographic) is a starting point, not gospel. The right weights depend on your product, sales motion, and customer base.

For product-led growth companies where users self-serve and rarely talk to your team, product usage should be 60-70% of the score. Engagement metrics (email opens, webinar attendance) matter less because high-intent users often ignore marketing content.

For high-touch enterprise sales where customers have dedicated CSMs and regular QBRs, engagement can be 40-50% because relationship strength predicts renewal. But product usage still matters, it's just harder to track when customers run on-premise or behind firewalls.

The way to determine your weights is to run a churn correlation analysis. Export the last 12 months of customer data with all your component scores at the time of renewal decision. Run a logistic regression with churn (yes/no) as the outcome. The coefficients tell you which signals actually predicted churn in your data.

If login recency has a coefficient of 0.8 and email engagement has 0.2, weight login recency 4x higher. If feature adoption shows no correlation (coefficient near zero), drop it from the model or reduce its weight to 5%.

Test your model by scoring historical customers and checking if high scores correlated with renewals and low scores with churn. If the model would have flagged 70%+ of churned accounts as at-risk 30 days before renewal, it's working. If not, adjust the weights or add new signals.

Iterate every quarter. Product changes, customer segments shift, and what predicts churn in month 1 might not predict it in month 12. A health score is a live model, not a set-it-and-forget-it formula.

Automating Customer Success Workflows with Health Scores

The score itself does nothing. The workflows around it drive intervention and expansion.

HubSpot Workflow Examples

At-risk intervention workflow:

  • Trigger: health_tier changes to "At Risk"
  • Action 1: Create task for assigned CSM: "Customer health dropped to at-risk. Review product usage and schedule check-in."
  • Action 2: Send internal Slack notification (via webhook) to CS channel
  • Action 3: Add to "At-Risk Customers" list for weekly review meeting

Expansion play workflow:

  • Trigger: health_tier is "Champion" AND active_seat_count / purchased_seat_count > 0.8
  • Action 1: Create task for account executive: "High-health account nearing seat limit. Reach out for expansion conversation."
  • Action 2: Enroll in upsell email sequence (case studies, feature announcements for higher tiers)

Onboarding nudge workflow:

  • Trigger: days_since_signup > 7 AND onboarding_complete is false AND health_tier is "Stable" or "At Risk"
  • Action 1: Send email with setup checklist and link to onboarding resources
  • Action 2: Create task for onboarding specialist: "Customer stuck in onboarding, hasn't completed activation."

Proactive outreach based on score drop:

  • Trigger: customer_health_score decreases by 15+ points in 7 days
  • Action: Send email from CSM: "Noticed you've been less active recently. Anything we can help with?"

The key is to act on tier changes and score trends, not just absolute values. A customer who drops from 85 to 65 in two weeks needs attention even though 65 is still "Healthy." The velocity matters.

Reporting and Monitoring Health Score Trends

Build a HubSpot dashboard with:

  • Health tier distribution - Pie chart showing percentage of customers in each tier
  • Average health score by plan - Compare free, pro, enterprise tiers
  • Health score trend over time - Line chart of mean score by month
  • At-risk account list - Table of companies with health tier "At Risk", sorted by ARR descending
  • Churn correlation report - If you log churn date, plot health score 30/60/90 days before churn

Export this data monthly and compare predicted at-risk accounts to actual churn. If customers are churning with high health scores, your model is missing a signal. If at-risk customers are renewing, your thresholds are too conservative.

For customer success leadership, the metric that matters is intervention success rate: of the accounts flagged as at-risk 60 days before renewal, what percentage did your team save? If the rate is low, either the score is wrong or the intervention playbook needs work.

FAQ

How to build a customer health score?

Sync product usage data to your CRM (login frequency, feature adoption, activation milestones), create component score properties for each signal (normalized 0-100), build a weighted calculation property that combines them (40% product usage, 30% engagement, 20% support, 10% firmographic), then segment customers into health tiers (at-risk, stable, healthy, champion) and trigger workflows when scores drop.

How to calculate a health score?

Use a weighted formula: (login_frequency_score * 0.2) + (feature_adoption_score * 0.1) + (login_recency_score * 0.1) + (support_satisfaction_score * 0.2) + (engagement_score * 0.3) + (fit_score * 0.1). Normalize each component to the same scale first. Adjust weights based on what actually predicts churn in your historical data.

What is a CSM score?

CSM score is another term for customer health score, named because customer success managers use it to prioritize outreach and identify at-risk accounts. Some teams distinguish between a "health score" (predictive, based on product usage and engagement) and a "relationship score" (CSM's subjective assessment of account strength), then combine both into a composite CSM score.

What is a good customer health score?

A score above 70 (on a 0-100 scale) typically indicates a healthy account with low churn risk and potential for expansion. Scores between 40-70 are stable but require monitoring. Below 40 is at-risk and needs immediate intervention. The exact thresholds depend on your model and what correlates with actual renewal behavior in your customer base. Test by scoring historical data and checking if high scores predicted renewals.

{
 "meta_description": "Learn how to build a customer health score in HubSpot using product usage data. Step-by-step guide with calculation properties and real examples.",
 "word_count": 2240,
 "tag": "Guide",
 "faq_schema": {
 "@context": "https://schema.org",
 "@type": "FAQPage",
 "mainEntity": [
 {
 "@type": "Question",
 "name": "How to build a customer health score?",
 "acceptedAnswer": {
 "@type": "Answer",
 "text": "Sync product usage data to your CRM (login frequency, feature adoption, activation milestones), create component score properties for each signal (normalized 0-100), build a weighted calculation property that combines them (40% product usage, 30% engagement, 20% support, 10% firmographic), then segment customers into health tiers (at-risk, stable, healthy, champion) and trigger workflows when scores drop."
 }
 },
 {
 "@type": "Question",
 "name": "How to calculate a health score?",
 "acceptedAnswer": {
 "@type": "Answer",
 "text": "Use a weighted formula: (login_frequency_score * 0.2) + (feature_adoption_score * 0.1) + (login_recency_score * 0.1) + (support_satisfaction_score * 0.2) + (engagement_score * 0.3) + (fit_score * 0.1). Normalize each component to the same scale first. Adjust weights based on what actually predicts churn in your historical data."
 }
 },
 {
 "@type": "Question",
 "name": "What is a CSM score?",
 "acceptedAnswer": {
 "@type": "Answer",
 "text": "CSM score is another term for customer health score, named because customer success managers use it to prioritize outreach and identify at-risk accounts. Some teams distinguish between a health score (predictive, based on product usage and engagement) and a relationship score (CSM's subjective assessment of account strength), then combine both into a composite CSM score."
 }
 },
 {
 "@type": "Question",
 "name": "What is a good customer health score?",
 "acceptedAnswer": {
 "@type": "Answer",
 "text": "A score above 70 (on a 0-100 scale) typically indicates a healthy account with low churn risk and potential for expansion. Scores between 40-70 are stable but require monitoring. Below 40 is at-risk and needs immediate intervention. The exact thresholds depend on your model and what correlates with actual renewal behavior in your customer base."
 }
 }
 ]
 },
 "howto_schema": {
 "@context": "https://schema.org",
 "@type": "HowTo",
 "name": "How to Build a Customer Health Score in HubSpot",
 "description": "Step-by-step guide to building a customer health score in HubSpot using product usage data and calculation properties",
 "step": [
 {
 "@type": "HowToStep",
 "name": "Sync product usage data to HubSpot",
 "text": "Set up a product data sync using reverse ETL (Hightouch, Census), custom API integration, or a direct sync tool like Zoody. Track events like last_login_date, login_count_30d, features_used_30d, onboarding_complete, and active_seat_count."
 },
 {
 "@type": "HowToStep",
 "name": "Create component score properties",
 "text": "Build normalized score properties (0-100 scale) for each signal: login_frequency_score, feature_adoption_score, login_recency_score, support_satisfaction_score. Use HubSpot calculation properties with conditional logic to map raw values to scores."
 },
 {
 "@type": "HowToStep",
 "name": "Build the master health score calculation",
 "text": "Create a customer_health_score calculation property that weights component scores: (login_frequency_score * 0.2) + (feature_adoption_score * 0.1) + (login_recency_score * 0.1) + (support_satisfaction_score * 0.2) + (engagement_score * 0.3) + (fit_score * 0.1)."
 },
 {
 "@type": "HowToStep",
 "name": "Segment customers by health tier",
 "text": "Create a health_tier enumeration property with values At Risk, Stable, Healthy, Champion. Build a workflow that sets the tier based on score ranges: At Risk (below 40), Stable (40-60), Healthy (60-80), Champion (80+)."
 },
 {
 "@type": "HowToStep",
 "name": "Automate workflows based on health changes",
 "text": "Set up workflows that trigger on health_tier changes or score drops: create CSM tasks for at-risk accounts, send intervention emails, route high-health accounts to expansion plays, notify teams via Slack when scores drop."
 }
 ]
 },
 "speakable_selectors": [
 "article > blockquote:first-of-type",

Compare alternatives

Explore use cases

Try it on your own HubSpot

Zoody is in beta, so every feature is free right now. Connect your HubSpot, put real product signals on your records, and work directly with the founder.

More resources