Back to Blog
RevOpsHubSpotSaaS

Customer health score: why most B2B SaaS teams build it wrong (and how to fix it in HubSpot)

Abhishek Singla Apr 30, 2026 11 min read

I had a call last year with the COO of a 65-person SaaS company. They had an 11% annual churn rate climbing month over month. Their CS team was working 60-hour weeks trying to save accounts. And they had a "customer health score" in their CRM.

When I pulled up the score, I understood immediately why nothing was working. Their health score was essentially a contact engagement score. It counted email opens, website visits, and NPS submissions. It said nothing about product usage, contract value at risk, or whether the contact who clicked the email was even the person who made renewal decisions.

They were measuring the wrong thing, at the wrong time, on the wrong person.

This is the most common failure pattern I see in B2B SaaS companies that have "implemented" customer health scoring. They built a score. It just doesn't predict anything.

What a customer health score is actually supposed to do

A customer health score is a number (or set of numbers) that tells you how likely a customer account is to renew, expand, or churn before the renewal conversation happens. That's the whole job.

If your score doesn't predict those outcomes better than a gut call from your CS rep, it's not doing its job.

Most articles about customer health scores spend a lot of time on the "what" and almost none on the "how to make it actually work." This post is the latter.

Why most health scores don't predict churn

The reason most health scores fail is that they measure activity instead of value delivery. Here's what that looks like in practice.

A typical failing health score tracks:

  • Contact email open rate
  • Support ticket count (often weighted backwards)
  • NPS score collected once per year
  • Login frequency from whoever is listed as the primary contact

None of these reliably predict renewal. Email opens tell you someone clicked. They don't tell you whether the buyer still believes in the product. Support tickets could indicate high engagement or complete frustration. NPS is a lagging indicator collected long after the at-risk signal has passed. And if your CS contact is different from your economic buyer, their login activity tells you almost nothing about whether the account renews.

I've seen companies with green health scores churn accounts the following week. The score looked fine because the champion was active. But the CFO had already decided to cut the tool from the budget.

The core problem

Measuring activity instead of value delivery is the reason most health scores fail.

A customer can be highly active and still churn. What matters is whether they're getting the outcome they bought the product for.

The two things that actually predict churn

Across 50+ RevOps engagements, two factors consistently separate predictive health scores from vanity dashboards:

Economic buyer engagement, not champion engagement. If you track the behavior of the person who signed the contract (or their replacement), you're measuring something real. If you're tracking whoever is listed as the primary contact in your CRM, you may be measuring the wrong person entirely.

Product adoption at the workflow level. Not just "did they log in," but "did they complete the core workflow that delivers the value they paid for." For a sales tool, that's not logins. It's deals created, outreach sequences run, or forecasts submitted. For an ops platform, it's automations running or reports being consumed. Usage depth beats usage frequency every time.

The five signals worth tracking

Here are the signals I recommend for most B2B SaaS companies. You won't use all five. Pick the ones you can actually measure reliably.

Core product adoption. One or two actions that represent the value moment of your product. This is the single most predictive signal for most tools. For a RevOps tool, it might be "automated workflows triggered per week." For a sales tool, it might be "sequences enrolled and completed."

Economic buyer engagement. Responses to QBR invitations, executive email opens, participation in renewal prep calls. You need at least one data point that touches the decision-maker, not just the power user.

Support sentiment trend. Not ticket volume, but whether recent support interactions are neutral, frustrated, or escalated. A frustrated ticket is worth ten positive ones in terms of churn signal.

Contract utilization. Are they using what they're paying for? If a customer pays for 50 seats and only 12 are active, they're a churn risk even if those 12 users are satisfied.

Renewal timeline proximity. Not a signal in itself, but it should weight every other signal. A score of 6/10 three months from renewal requires immediate action. A 6/10 twelve months out allows time for a structured recovery plan.

Signals that feel good
Email open rates from CS contact
Total login count
NPS submitted once per year
Support ticket volume
Number of features used (breadth)
Signals that predict churn
Economic buyer response rate
Core workflow completion rate
Support escalation trend
Seat utilization vs. contract
Depth of core use case (value moments)

Segment your customers before you build the score

One of the biggest mistakes I see is building a single health score for an entire customer base. This almost never works.

A startup paying $5K/year and a mid-market company paying $80K/year have different renewal timelines, different decision-making processes, and different product usage patterns. A single model gives you misleading signals for both.

At minimum, segment by:

Contract value. High-value accounts need individual human attention. Low-value accounts can be managed with automated playbooks. Your health score model should reflect this split.

Product tier. Customers on your enterprise tier have different value drivers than those on a starter plan. Don't force the same adoption model onto both.

Company size. A 5-person team and a 200-person team will show different adoption patterns on the same plan. What looks like low engagement for an SMB might be normal usage for a solo user at an enterprise.

I recommend two to three health score models. Most B2B SaaS companies can get away with a high-touch model for their top 20% of accounts by ARR and a scaled model for everyone else.

Building a customer health score in HubSpot without Gainsight

Most content about customer health scoring assumes you're using Gainsight, Totango, or ChurnZero. These are expensive platforms most B2B SaaS companies at Series A or B can't justify.

You can build a functional health score in HubSpot. It won't be as sophisticated as Gainsight, but if you're starting from nothing, it's good enough to get you actionable signals without the six-figure platform cost.

Here's how I set it up for clients on our CRM RevOps engagements:

Step 01
Define signals
Pick 3-5 signals that predict churn for your specific product. Not generic templates.
Step 02
Map to HubSpot
Create company-level properties, build integrations for product usage data, connect support tools.
Step 03
Build the score
Use calculated properties or score workflows (Operations Hub) to run the model weekly.
Step 04
Build playbooks
Alerts, tasks, sequences, and escalation paths so every score drop triggers a specific action.

Step 1: Create a custom health score property on the Company object. HubSpot's native score properties work at the contact level. For account-level scoring, you need a custom property on Company, updated via workflow or a tool like Coefficient to pull product data in.

Step 2: Define your signals as HubSpot properties or activities. For each signal, you need a corresponding property in HubSpot. Product usage signals usually require an API integration or webhook from your product backend. Support signals can pull from Intercom or Zendesk via native integrations.

Step 3: Build the score workflow. Use HubSpot's calculated properties (Operations Hub required) or a workflow that runs weekly and updates the health score based on property conditions. I build this as a point-addition model: core usage adds 30 points, economic buyer engagement adds 25, support trend adds 20, seat utilization adds 15, and renewal proximity adjusts the weight of everything else.

Step 4: Build the alert and action layer. A health score no one acts on is worse than no score at all. This is where our HubSpot automation work comes in. Build workflows that:

  • Alert the CS owner when a score drops more than 10 points in 30 days
  • Create a task for the AE when a high-ARR account drops below 60
  • Enroll at-risk accounts into a specific CS re-engagement sequence
  • Schedule QBRs 90 days before renewal if the score is below 70

The validation step most teams skip

After you build the health score, validate it against actual churn. This is where most implementations go wrong.

Pull a sample of accounts that churned in the past 6 months. What was their health score 90 days before churn? 60 days? 30 days?

If your score didn't drop below 60 for accounts that churned, your model isn't predictive. You need to recalibrate the signals or the weights.

Do the same analysis for renewals. Accounts that renewed and expanded should have had meaningfully higher scores than accounts that churned. If there's no real difference, your signals are wrong.

Plan for one recalibration cycle after the first 90 days. Some signals will matter more than you expected. Others will turn out to be noise. That's normal. A health score is calibrated over time, not built perfectly on day one.

22%
annual churn before health scoring
14%
churn after proactive scoring (2 months)
71%
save rate with proactive intervention
34%
save rate when reacting to churn signal

What to do when a score drops

The score is not the deliverable. The action is.

When a health score drops, most CS teams send a generic check-in email. That's reactive and often too late. Here's what I recommend instead, broken by severity:

Score drop of 5-10 points: automated email from the CS owner with a specific question tied to the signal that dropped. Not "just checking in." Something like: "I noticed usage on [core feature] dropped last month. Is there something we can help with?" You need to know if it's a training gap, a product issue, or a priority shift.

Score drop of more than 10 points: human task created in HubSpot for the CS owner to call the economic buyer directly. Not the champion. The buyer. You need to understand if this is a product issue, a relationship issue, or a budget issue. Those require completely different responses.

Score crosses below your at-risk threshold (I use 55 as a default): executive escalation. Your VP of CS or CEO should know about this account. The accounts you can save are the ones you identify 60-90 days before renewal. The accounts you can't save are the ones you find out about at the renewal call itself.

How to connect health scoring to expansion revenue

Most teams use health scores purely for churn prevention. That leaves revenue on the table.

Accounts with high health scores are your best expansion candidates. When you see a score of 85+ and the account is using 80% of their contracted seats, that's the signal to have an upgrade conversation. A targeted call with a specific use case for the expansion, not a generic "did you know we have an enterprise plan" email.

I build a second workflow layer in HubSpot that creates expansion tasks when health is high and seat utilization is high. These route to the AE, not the CS rep, because expansion is a sales conversation. If you want to see how this connects into a broader go-to-market motion, that's a longer conversation.

If you're building this from scratch and your CRM data is messy, health scoring on top of bad data will give you bad signals. Clean the data first.

Need help building a health score that actually works?

We set up customer health scoring in HubSpot for B2B SaaS teams without the Gainsight price tag. Book a free 30-minute session to see what we would build for your team.

Book a session →

FAQ

What is a customer health score?

A customer health score is a numerical measure of how likely a customer account is to renew, expand, or churn before the renewal conversation happens. It's built from a set of signals that are weighted and combined into a single number (usually 0-100) at the account level. The goal is to give CS and sales teams a way to prioritize attention before accounts reach a crisis point.

How often should I update my customer health score?

Weekly is the right cadence for most B2B SaaS teams. Daily is overkill for accounts on annual contracts. Monthly misses signals fast enough to act on. Set the workflow to run every Sunday night so CS teams start Monday with current scores and can act on any drops during the week.

Can I build a customer health score in HubSpot without Operations Hub?

You can build a basic version. HubSpot's contact score property works natively without Operations Hub. For company-level scores and calculated properties, you need Operations Hub (Pro or above). If budget is a constraint, you can maintain a custom "health score" property updated via workflow logic with point-addition rules, which doesn't require calculated properties. It's more manual to maintain but functional.

What's the difference between a health score and a churn prediction model?

A health score is a rules-based system you design and calibrate manually. A churn prediction model uses machine learning to identify patterns in historical churn data. Health scores are more interpretable and actionable for most teams. Churn prediction models can be more accurate but require a large dataset and data science resources. For most B2B SaaS teams under 500 customers, start with a health score. The discipline of defining what signals matter will teach you more about your customers than a black-box model.

How do I get product usage data into HubSpot?

Most product analytics tools (Mixpanel, Amplitude, Segment) have native HubSpot integrations or can push events to HubSpot via API. If your product doesn't have an analytics layer yet, you can build basic usage tracking with Segment's free tier and connect it to HubSpot via the native integration. Alternatively, build a simple API call from your product backend that updates a custom HubSpot company property each time a user completes a core workflow. That single signal is often enough to start.