How to

How to build a customer health dashboard

The health score is green until the week the customer churns. Here is the model behind a score that moves earlier, the prompts to build it, and what it takes to run it.

The short answer

A customer health dashboard is four parts: signals grouped by category rather than blended into one score, weights you can change without a rebuild, trend as the main display, and an action path to a named owner. The reason most health scores fail is that they blend usage, support and relationship signals into one number, so a collapse in one is masked by strength in another. Show the categories separately and let the blended figure be secondary.

customer-health.helix-app.ai

Customer health

4

Declining fast

1.9M

Contract value at risk

11

Renewing this quarter

62%

Interventions that recovered

31
44
58
22
71
UsageAdoptionSupportRelationshipCommercial

Halden Foods, overall score 38. Two categories are in the poor band and three are fine, which is exactly what a single blended number hides.

A sketch of one account, scored by category rather than blended. Usage collapsing while support looks quiet is the pattern a single health number is worst at showing.

What matters here

  • A health dashboard is four parts: categorised signals, adjustable weights, trend as the main view, and an action path.
  • Show categories separately. One blended number hides the case where usage collapsed but support tickets look fine.
  • Direction beats level. An account at 60 and falling needs attention before an account that has sat at 45 for two years.
  • Include at least one relationship signal. Product usage alone misses the churn caused by your champion leaving.
  • Validate the score against actual churn before trusting it. A score nobody has back-tested is a shared opinion with a colour attached.
  • The dashboard reads usage, support and CRM data, so managed credentials and scoped access are part of the build.

Who this is for

You run customer success or the operations behind it. You already know your renewal dates and your escalation paths. What you want is a signal that moves before the renewal conversation, and a score you can defend to the person whose account it turned red.

How it works in practice

What a customer success manager does with it weekly, and what it tells a leader quarterly.

  1. 1

    Signals arrive grouped, not blended

    Usage, adoption, support, relationship and commercial each score separately, so a collapse in one is never masked by strength in another.

  2. 2

    Weights stay editable

    Contribution per signal sits in a file you change in the first quarter, repeatedly, without a rebuild.

  3. 3

    Trend is the main view

    Scores snapshot daily, so the chart is real history rather than a recalculation, and direction sits next to level.

  4. 4

    The portfolio ranks by value at risk

    Not by score. A small account at 20 should not outrank a large one at 55 and sliding.

  5. 5

    A declining account becomes a named action

    With an owner, the category that moved, and a next step with a date. A dashboard with no action path is a report.

  6. 6

    You find out whether the score works

    Load accounts that churned and see what the score said 30, 60 and 90 days before. Usually two signals do all the work.

What a health dashboard is made of

A health dashboard is not a traffic light on an account list. It is four parts, and the first one is where the credibility comes from.

Categorised signals

Product usage, breadth of adoption, support burden, relationship strength and commercial signals, each scored separately. Blending them is a display choice, not a modelling one.

Adjustable weights

The contribution of each category and each signal, in one editable file. You will change these repeatedly in the first quarter, and every change needs to be a config edit rather than a release.

Trend

The score over time per account, with the direction and rate of change shown alongside the level. A falling account matters more than a low stable one.

An action path

A declining account produces a named owner, a reason drawn from the category that moved, and a next step with a date. A dashboard with no action path is a report.

These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix

The prompts

Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.

  1. Signals, kept apart on purpose

    The modelling decision that determines whether the score is any use.

    In this Helix project, build me a customer health dashboard.
    
    The mistake almost every health score makes is blending everything into
    one number, so usage collapsing gets masked by a quiet support queue. So
    keep five categories separate all the way through the data model: usage,
    adoption, support, relationship and commercial. Blending them is a display
    choice at the end, not a modelling one at the start.
    
    Put the signal definitions in a file I can edit: a key, a category, which
    direction is good, thresholds for good, watch and poor, and a weight.
    
    Seed it with these: weekly active users against licensed users, distinct
    features used, days since anyone logged in, open tickets, escalations in
    the last 90 days, days since we last met them, how many contacts are
    engaged, payment delays, and expansion or contraction last term.
    
    The last two relationship signals are the ones teams leave out, and
    champion departure is the churn cause they most often miss.
    
    I sign in through Helix, so do not build a login page. Read the signed-in
    user from the runtime. And do not put any key or connection string in the
    code: if this needs to reach another system, tell me and I will create the
    connection in my workspace.
  2. Score it, then check whether the score is any good

    The back-test, built early rather than never.

    Score each signal against its thresholds, roll up to a category, then roll
    categories into an overall figure using the weights in that file. Show the
    overall score, but always with the five category scores beside it. A
    category in the poor band has to stay visible even when the total looks
    healthy.
    
    Snapshot every score daily, so trend is history rather than a
    recalculation.
    
    Then build the back-test, and build it now rather than later. Let me load
    a list of accounts that churned or contracted with their dates, and report
    what the score and each category said 30, 60 and 90 days beforehand. Show
    me which individual signals had predictive value and which were noise.
    
    Without that, a health score is a shared opinion with a colour attached.

    Worth knowing. Most health scores are never validated. The back-test usually shows two or three signals doing all the work.

  3. The screen a CSM opens on Monday

    Ranked by money at risk, not by score.

    Build the portfolio view for whoever is signed in: their accounts, sorted
    by risk, showing score, direction over 30 days, renewal date, contract
    value, and which category is currently weakest.
    
    Rank by contract value at risk rather than score alone. A small account at
    20 outranking a large one at 55 and falling gets the priorities exactly
    backwards.
    
    Then the account view: the overall score charted over time, each category
    charted, and the individual signals behind whichever category is weakest.
    Let me annotate the chart with events I record, like an escalation or a
    champion leaving.
    
    And flag any account that dropped more than a threshold I set in the last
    30 days, regardless of where it started.
  4. Turn a red account into something someone does

    The action path, and the uncomfortable report that follows it.

    When an account crosses into a risk band or drops sharply, create a draft
    intervention assigned to its owner, pre-filled with the category that
    moved and the signals behind it. Alert the owner and their manager with
    the reason in the message, not just the score.
    
    Track what happened to each intervention: what was done, by when, and the
    outcome.
    
    Then report whether accounts that received an intervention recovered more
    often than those that did not. That is uncomfortable and it is the only
    honest measure of whether this dashboard is worth running.
    
    Finally a renewal view: accounts renewing in the next two quarters, ranked
    by score and value. That list is where a renewal forecast should start.
  5. Connect it to real systems

    The step that turns a working prototype into something with your data in it.

    Now connect it to the systems we actually run, so it works on real data
    rather than the rows you seeded.
    
    Anything in angle brackets is a placeholder. Swap it for whatever we use
    instead, and have the app name the connection it wants rather than assume
    a vendor, so changing my mind later is a config change and not a rewrite.
    
    <Amplitude>. Read active users, feature breadth and last login, which is
    the usage half of the score.
    
    <Zendesk>. Read ticket volume and escalations, which is the signal teams
    already have and rarely weight.
    
    <Salesforce>. Read contract value, renewal dates and who the engaged
    contacts are.
    
    <Google Calendar>. Read days since the last meeting, which is the
    relationship signal most scores omit.
    
    <Okta>. Verify identity and read the manager chain, which is what the app
    uses to give an owner their accounts and leadership the whole book.
    
    <Snowflake>. Read the history behind each signal, which is what makes the
    back-test possible.
    
    <Looker>. Publish the book view for the leadership review without a second
    export.
    
    <Slack>. Alert an owner when an account drops sharply, with the category
    that moved in the message.
    
    Only write where I have said to write. Everything else is read only.
    
    Do not write a key, a token or a connection string anywhere in the code,
    and do not ask me to paste one. Tell me which connections you need and I
    will create each as an authentication in my Helix workspace. Reference
    them by alias.

    Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.

  6. Ship it

    The last step of every build: a URL, and the right people on it.

    Deploy my app.

    Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. Account health and contract values are commercially sensitive, so set Access Control before sharing: owners see their portfolio, leadership sees the book.

What it connects to

A health score is only as good as the signals behind it, and they live in four different systems.

  • Amplitude

    Read active users, feature breadth and last login, which is the usage half of the score.

  • Zendesk

    Read ticket volume and escalations, which is the signal teams already have and rarely weight.

  • Salesforce

    Read contract value, renewal dates and who the engaged contacts are.

  • Google Calendar

    Read days since the last meeting, which is the relationship signal most scores omit.

  • Okta

    Verify identity and read the manager chain, which is what the app uses to give an owner their accounts and leadership the whole book.

  • Snowflake

    Read the history behind each signal, which is what makes the back-test possible.

  • Looker

    Publish the book view for the leadership review without a second export.

  • Slack

    Alert an owner when an account drops sharply, with the category that moved in the message.

Each line says whether the app reads, writes or both. Anything not described as writing should be read only.

Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.

Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.

Running it for real

The build gets you a working dashboard. It reads product usage, support and CRM data, and it drives conversations with customers, so it needs to be run properly.

AI Deployment

Get it to a URL people can open

One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.

App Security

Put your identity provider in front of it

Account health and contract values are commercially sensitive. SSO means people sign in with their existing account, and access is scoped so an owner sees their portfolio while leadership sees the whole book.

App Security

Connect the system of record with managed credentials

Pulling usage, support and CRM data on a schedule needs real access to each system. Granting it to the app rather than pasting keys into it means credentials can be rotated or revoked without a redeploy.

App Registry

Put a name on it

Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.

Cost Management

Know what it costs to run

Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.

Questions people ask

What is a customer health dashboard?

It combines usage, adoption, support, relationship and commercial signals into a per-account view of renewal risk, with the trend shown alongside the level. Its purpose is to move the risk conversation earlier than the renewal date.

Why do health scores fail to predict churn?

Usually because they blend everything into one number, so a collapse in usage is masked by a quiet support queue. Scoring each category separately and showing them alongside the overall figure keeps the failing signal visible.

What signals should a health score include?

Active users against licensed users, feature breadth, recency of login, support ticket volume and escalations, days since the last customer meeting, number of engaged contacts, payment behaviour, and expansion or contraction. The relationship signals are the ones most often omitted and most often decisive.

How do I know if my health score works?

Back-test it. Load accounts that churned or contracted with their dates, and check what the score and each category said 30, 60 and 90 days beforehand. It usually shows a few signals doing the work and several adding noise.

Should accounts be ranked by score or by value?

By contract value at risk, which combines both. Ranking by score alone puts a small account at 20 above a large one at 55 and falling, and the second is the more urgent conversation.

Can I build this without an engineering team?

Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build from CSV imports. The judgement calls are your signals, your thresholds and your weights, and the back-test is what tells you whether you got them right.

Last reviewed September 2026.

Build it, then run it properly

Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.