Skip to content

Five signals, fixed weights, one afternoon

How Do I Build a Customer Health Score Template in a Spreadsheet?

A customer health score template you can build in a spreadsheet this afternoon: five signals, fixed weights, three-value rules, bands and a worked example.

By , Co-founder, GainTrace · Updated · 14 min read · For Head of Customer Success, CS Operations

Short answer

Build the customer health score template in a spreadsheet with five signals: product usage (35%), relationship (25%), support (15%), commercial (15%) and sentiment (10%). Score each signal 0, 50 or 100 with a written rule, take the weighted sum, and band it: 75 and above healthy, 60 to 74 watch, 40 to 59 at risk, under 40 critical. Refresh monthly. Exempt accounts under 90 days old from the usage rule.

Leadership asked for one customer health score template by the end of the quarter. You have a CRM, a helpdesk, some product analytics, a billing system, and a customer success team of two to seven people, none of whom is a data scientist. Every CSM carries their own definition of "healthy" in their head, and the accounts that churned last quarter were green in somebody's head right up to the cancellation email.

This page is the customer health score template we would build in that situation: a spreadsheet, five signals, fixed weights, and rules simple enough that two people scoring the same account get the same number. It takes an afternoon. It will not predict churn perfectly. It will stop the team arguing about what healthy means, and it gives you a baseline to judge any platform against later.

Key takeaways
  • Use five signals and three-value rules (0, 50, 100). Two CSMs scoring the same account must get the same number, or the score is opinion with decimals.
  • Weight the signals that move before the customer decides: product usage 35, relationship 25, support 15, commercial 15, sentiment 10.
  • Band the result at 75, 60 and 40, and write the action next to each band before you score a single account.
  • Keep last month's score in its own column. The delta predicts more than the level does.
  • Score customers younger than 90 days on onboarding milestones, never on usage. New accounts scoring red is one of the recurring complaints about health scores across 3,628 public reviews.
Browse this guide

Questions this page answers

  • how do I build a health score without a data scientist or a CS platform
  • could anyone share some customer health score examples that work
  • customer health score template for google sheets
  • how do you predict churn without a data scientist
  • how do I build a customer health score in HubSpot
  • what weights should I use in a customer health score

What goes in a customer health score template?

A customer health score is a weighted sum of a few signals, each scored on the same scale. The template question is which signals, what weights, and what rule turns raw data into a score. Our answer, after reading 3,628 public reviews and the r/CustomerSuccess threads on the subject, is five categories, weighted toward the signals that move before the customer has decided anything.

The reviews are blunt about what happens without a written template. Of the 2,094 sentences where reviewers describe the problem they bought a platform to solve, 37 mention a spreadsheet or Excel, and the story is the same each time: the sheet was the health score until nobody maintained it. Another 731 reviews describe the job as "one place" or "getting out of spreadsheet hell". The sheet did not fail because it was a sheet. It failed because the rules lived in people's heads.

We had no way of giving our customers a health score (outside of 'gut feeling') or a scalable way of knowing their usage data and using that data to make decisions.
Reviewer at a mid-market SaaS, public G2 review
The template: five signals, their weights, and the three-value rule for each. Score every signal 0, 50 or 100; never anything in between.
SignalWeightScore 100 whenScore 50 whenScore 0 whenWhere it lives
Product usage3560%+ of paid seats active in the last 30 days and flat or up on the prior 3030% to 59% active, or down 20% to 40%Under 30% active, or down more than 40%Product analytics or an admin export
Relationship25Two-way contact in the last 30 days and the sponsor who signed is still in roleContact 31 to 60 days ago, or sponsor status unknownNo reply in 60+ days, or the sponsor has leftCRM activity, LinkedIn, your inbox
Support15No ticket open more than 7 days and no escalation in 90 daysOne ticket open more than 7 days, or one escalationTwo or more stale tickets, or an escalation that reached your execHelpdesk
Commercial15Last three invoices paid on time and 70%+ of licensed seats assignedOne late invoice, or 40% to 69% of seats assignedInvoice overdue 30+ days, or under 40% of seats assignedBilling system
Sentiment10NPS 9 or 10, or a positive CSAT, in the last six monthsNPS 7 or 8, or no responseNPS 0 to 6, or a written complaintSurvey tool or your inbox

The weights are a starting split, not a law. Product usage gets the most because it is the only category that changes before a renewal conversation exists. Sentiment gets the least because surveys are answered by a small, unrepresentative slice of the base. If you want to test other splits before committing, the customer success scorecard builder runs the same five-category model and shows how many points each category contributes.

The weighted score

Health score = (Usage score × Usage weight) + (Support score × Support weight) + (Engagement score × Engagement weight) + (Commercial score × Commercial weight)

Each input score
0 to 100, so the total lands on the same scale whatever the weights
Weights
must sum to 1. Start at 0.4 usage, 0.2 support, 0.2 engagement, 0.2 commercial and change them only after a backtest
Watch for
any input a CSM types by hand. It will drift upward, which is why the change column matters more than the level

How do I build a health score in a spreadsheet this afternoon?

Budget three hours for the first version, most of it spent pulling exports. Do it in one sitting so the rules are written while the data is in front of you.

  1. Export the account list from billing

    One row per paying account: name, ARR, renewal date, start date, plan, licensed seats. Billing is the source of truth because it cannot contain a customer who is not paying. Add a column for the named CSM.

  2. Add five signal columns and write the rule above each

    Paste the rule from the table into the header cell as a note. The rule is the product; the number is a by-product. If a rule needs judgement to apply, tighten it until it does not.

  3. Fill each column from its export

    Product usage from your analytics tool or a monthly active-users export. Last contact from CRM activity. Open tickets and escalations from the helpdesk. Invoice status from billing. Last survey response from the survey tool. Use VLOOKUP or XLOOKUP on the account name or ID. Do not type numbers by hand; a typed number is an opinion.

  4. Compute the score with one formula

    In the score column: =SUMPRODUCT(weights, signals)/100, where weights is a fixed row holding 35, 25, 15, 15, 10 and signals are the five cells for that account. The result is 0 to 100.

  5. Band it with conditional formatting

    Four rules on the score column: 75 and above green, 60 to 74 amber, 40 to 59 orange, under 40 red. Write the action for each band in a legend at the top of the sheet: healthy means run the expansion conversation, watch means fix the weakest signal before renewal season, at risk means open a rescue play this week, critical means escalate today.

  6. Add a previous-score column and a delta

    Before each refresh, copy the current score into a last-month column. Delta is current minus previous. Sort by delta ascending. A healthy account that dropped 20 points is a better use of Tuesday than a critical account that has been critical for a year.

  7. Add the new-customer exception

    For any account under 90 days old, replace the usage rule with three onboarding milestones (admin configured, first integration live, first weekly active user outside the champion). Score 100 if on plan, 50 if one milestone is late, 0 if two are. Without this, every new account scores red and your CSMs stop trusting the sheet in month one.

  8. Put the refresh in the calendar

    First working Monday of the month, 90 minutes, one owner. Score refreshes that depend on "when someone has time" stop within a quarter, and a health score nobody refreshes is worse than none, because people keep reading it.

What does the template look like with five accounts scored?

Here is the template applied to five accounts from a fictional 120-account book, using the rules above. The names are invented; the patterns are the ones we see most often.

Five accounts scored with the template. Each signal is 0, 50 or 100; the score is the weighted sum.
AccountARRUsage (35)Relationship (25)Support (15)Commercial (15)Sentiment (10)ScoreBand
Northwind Logistics$48,000100100501005087.5Healthy
Meridian Analytics$95,000010010010010065Watch
Bluefin Retail$30,00010050050055At risk
Harbor Dental Group$12,0005001001005052.5At risk
Cobalt Staffing (week 6)$8,00050*1001001005077.5Healthy

Reading the five rows

Northwind is the account you expect: active, responsive, one ticket dragging. Run the expansion conversation. Meridian is the one that fools everyone: the calls are warm, the invoices are paid, the NPS is a 9, and 12% of seats logged in last month. It reads as green in every meeting and scores 65 because the weights refuse to let charm outvote usage. Bluefin is the opposite: heavy users who are angry, with an escalation open and a detractor score. Usage alone would call it healthy. Harbor Dental has adequate usage and a sponsor who left in July; nobody on their side has replied since. That is the relationship column doing its job. Cobalt is six weeks in, so the asterisk marks the onboarding rule: one milestone late, everything else on track. Without the exception its usage would score 0 and it would sit at 60, in the watch band, for the crime of being new.

A login-only score would have called Bluefin healthy and made Meridian the only red. Both calls are wrong, and that is the whole argument for five signals instead of one.

Which rules stop people gaming the score?

The change column

The change column scores the direction of each input over 30 days, next to the column that scores its level. An account at 60% usage that was at 85% last month is a different account from one that has sat at 60% all year, and only the change column can tell them apart.

The most common failure of a spreadsheet score is not the maths. It is a CSM nudging a cell to make a review go faster. The r/CustomerSuccess thread that asked for health score examples describes it exactly.

We can not go on this way, because many tasks are marked as completed just by adjust the customer health scores based on personal judgment.
r/CustomerSuccess, 2026

Four rules keep the sheet honest, and each is cheap:

  • Three values only. A signal is 0, 50 or 100. "Feels like a 70" is not available, so there is nothing to nudge.
  • No override column. If a CSM believes the score is wrong, they change the input data or propose a rule change at the monthly refresh, with an example account. The rule improves for everyone or it does not change.
  • Every input is a lookup. The moment a column is typed by hand, it becomes the column people argue about.
  • Log rule changes in a tab with the date. A score whose rules moved twice this quarter cannot be trended, and the trend is the part that predicts.

The one score that does need a human is sentiment, and only because survey coverage is thin. Allow the CSM to score sentiment 0 from a written complaint, but require the complaint to be linked in the cell note.

The change column

Input change = (This month's value Last month's value) ÷ Last month's value × 100

This month's value
the raw input, not its score: logins, active seats, tickets, days since contact
Why it beats the level
an account at 60% usage that was at 85% last month is falling. One at 60% all year is stable. The level column cannot tell them apart

What will the spreadsheet never tell you?

The person who wrote the most-read thread on this subject had already built the sheet. He was asking why it was not helping.

Right now our "risk detection" is a health score I built in a spreadsheet. Red when logins drop. Problem is, by the time logins drop, the decision to leave already happened weeks earlier. I'm flagging accounts I should have called a month ago.
r/CustomerSuccess, 2026

Most health scores we have seen are a weighted average of whatever data was easy to export, refreshed when someone remembered. The template above is better than that because the rules are written down, but it has four limits you should know before you present it to leadership.

  • It is monthly. A usage drop in week one shows up at the next refresh, up to five weeks later. The account in the quote above churned in that gap.
  • It sees seats, not depth. "Active" in most exports means logged in. A customer who logs in to export their data before leaving looks active.
  • It has no history until you give it some. The delta column is the most predictive thing in the sheet and it is empty for the first month and thin for three.
  • It is one score for one product. If you sell two products or bill by parent and child accounts, the sheet needs a row per relationship, and most teams give up here.

None of these are reasons not to build it. They are the reasons the sheet is a 90-day tool, and the list of things to check when it says green and the customer churns anyway. That failure has nine known causes, and we walk through each in why your health score is wrong.

When should we move off the spreadsheet?

The sheet stops working at a predictable point, and it is a capacity point rather than a data point. Here is the check we would run each quarter.

The spreadsheet has stopped working when two or more of these are true

  • More than 150 accounts are scored, or more than three people score them.
  • Three or more of the five signals need a manual export each month.
  • The monthly refresh has been skipped or run late twice in the last two quarters.
  • Someone outside customer success (finance, the CEO, a board deck) now reads the score.
  • You have caught a churn after the fact that the sheet had flagged, and nobody acted because nobody looked.
  • A CSM has asked which of their 40 amber accounts to call first, and the sheet cannot say.

Zero or one of these true: keep the sheet, tighten the rules, and spend the money elsewhere. Two or more: the score is no longer the bottleneck, the refresh is, and the honest comparison is the cost of a platform against the hours the refresh consumes plus the churn that slipped through the gap. We set that comparison out, with the admin-time figures from the review corpus, in spreadsheet to customer success platform.

Visibility on customer health was a best guess and monitoring product usage was extremely time consuming and manual.
Head of Customer Success, mid-market SaaS, public G2 review

How does GainTrace score the same signals automatically?

GainTrace runs the same five-signal model across every account and re-scores as the data changes, with the inputs pulled from billing, CRM, product usage and support rather than exported by hand. Product signals replaces the usage column with depth and trend rather than logins, and churn prediction ranks the amber accounts so a CSM knows which of the 40 to call first. The rules stay visible: every score breaks down signal by signal, the way the sheet does.

Frequently asked questions

Can I build a customer health score in HubSpot instead of a spreadsheet?

Yes, and the template is the same. Create five custom number properties on the company object, fill them with workflows or imports, and use a calculated property for the weighted sum. The limit is the inputs: product usage and invoice status usually still arrive by monthly import, so the refresh cadence is the same as the sheet. Score bands become a list property you can filter and report on.

How many signals should a customer health score have?

Five is the practical ceiling for a team without a data function. Fewer than three and one signal dominates, which is a metric with extra steps. More than six and the refresh takes a day and the weights become arbitrary. If you want a sixth, it should be a second usage measure, such as depth of feature use, rather than a second survey.

What weights should I use for a customer health score?

Start at product usage 35, relationship 25, support 15, commercial 15, sentiment 10, then adjust after one quarter by asking which signals were red on the accounts that churned. Keep the leading signals (usage and relationship) above half of the total. If sentiment or support ends up above 20, the score is measuring how loud customers are rather than whether they will renew.

How often should I update a spreadsheet health score?

Monthly, on a fixed day, with one owner, for about 90 minutes. Weekly is better in theory and does not survive in practice, because five exports a week is a part-time job. If weekly matters to you, that is the signal to automate the inputs rather than the reminder to work harder.

How do I score a customer who signed up last month?

Do not use the usage rule for the first 90 days. Score them on onboarding milestones instead: admin configured, first integration live, first weekly active user beyond the champion. Score 100 on plan, 50 with one milestone late, 0 with two. Accounts under 90 days scoring red is one of the recurring complaints about health scores in the review corpus, and it is a rule error, not a data error.

Do I need product usage data to build a health score at all?

You can start without it, using relationship, support, commercial and sentiment with the weights rescaled to total 100. Be clear with leadership that the result is a relationship score, not a health score, and that it will miss the quiet customer who stopped using the product months ago. Get a monthly active-users export from engineering before the second refresh; it is a one-hour ask.

How this was researched

We read 3,628 public G2 reviews of the three most-reviewed customer success platforms, extracted the 2,094 sentences that describe the problem the reviewer bought the tool to solve and the 1,269 that describe a pain, and counted the ones about spreadsheets, gut-feel scoring and new accounts scoring red. We read the r/CustomerSuccess threads on building a health score without a data scientist and quote them here. The template weights and bands are the same ones our scorecard tool uses; they are a defensible starting split, not a published benchmark.

Next steps

Build the sheet this afternoon, then see the same five signals scored for every account without the exports. Start free or book a demo.

See GainTrace first in your Google results

Add as a preferred
source on Google
View markdown