Skip to main content
Every account in Zudo gets a health score between 0 and 100. It’s calculated automatically each night as a weighted average of factors — so you always have a current read on your portfolio without manual work.
The Health Score Breakdown dialog: the account's overall score out of 100, then a card for each factor with its weight, its score and recent examples
If a factor has no data (e.g. no email threads exist yet), Zudo applies a neutral score or redistributes that factor’s weight so the account isn’t unfairly penalized.

The factors

Email response time

How quickly your team responds to customer emails over the last 90 days.
No email threads? This factor defaults to 50 (neutral). Response time is measured against your configured business hours, so nights and weekends don’t penalize you.

Open requests

The number of unresolved feature requests linked to the account.

Meeting frequency

How many meetings you’ve had with the account in the last 6 months.
Zero meetings scores 40, not as missing data. Regular engagement is expected.

Issue resolution

Average days to resolve engineering issues linked to this account’s requests over the last 90 days.
No issues resolved in 90 days? Scores 70 — having no issues is generally a positive signal.

Recent activity

Days since the last touchpoint (email or meeting) with this account.
No recorded activity at all scores 20. Accounts with zero interaction history are considered at risk.

Contact activity

Days since the account was last active. Where that date comes from is configurable per organization under Settings → Organization → Last active — you order the sources (contact last-seen, Segment or PostHog product events, or a date trait such as one synced from Vitally) and the first with a value wins. With nothing configured it uses the newest contact last-seen date. A manual override set via the API always takes priority over every configured source.
No contact activity data? This factor is excluded and its weight is redistributed across the remaining factors.

NPS

The most recent NPS answer from someone on the account, scored out of ten. Every other factor here is a proxy for whether the customer is happy; this one is the customer saying so. Scored on the raw answer rather than by band, which is a deliberate choice. A 6 is a detractor and a 7 is not, so banding would score them 0 and 100; this scores them 60 and 70. The bands are a convention for the NPS calculation, not a claim that a 6 is as bad as a 0 — and a CSM reading “they said 6” expects a middling contribution, not a catastrophic one. Segments, flags and the account page still read the band. Only answers from the last 365 days count. Past that an answer stops counting rather than fading: a score from two years ago is not weak evidence about today, it is evidence about a different product. A year rather than something shorter because the survey’s own default waits three months between asking the same person, so a tighter window would leave this factor dark on an account that is answering exactly as intended.
Never been answered, or no answer inside the window? This factor is excluded and its weight is redistributed across the remaining factors. An account nobody has answered for is scored on everything else, not penalized for a survey it was never shown.
NPS defaults to 0%, so switching Zudo on or turning on the survey does not move any score by itself. You opt in under Health Score Settings. When you do, every account with an answer inside the window is rescored on the next run — so expect scores to move once, and tell your team before you do it.

Indicators

A composite of any number of Indicators you’ve configured to participate in scoring. Indicators are predicates over your product-usage events — Power user, Active in last 7 days, Logins last 30 days, etc. Each participating indicator is scored 0–100:
  • Yes / no indicators — true contributes a configurable score (default 100), false contributes a configurable score (default 0).
  • Number indicators — scored by a threshold curve you set (excellent / good / fair / poor → 100 / 80 / 60 / 40 / 20), with a direction toggle for higher is better vs lower is better.
Sub-weights inside the Indicators factor only weight indicators relative to each other within the composite — they don’t affect the outer 100% weight sum. Configure participating indicators on the Indicators tab in Health Score Settings.
The Indicators factor is excluded from the score when no participating indicators have computed values yet — its weight is redistributed across the other factors, same as Contact Activity behavior.

Traits

Any trait you choose, counted as a factor of its own. The built-in factors measure what Zudo sees for itself — replies, meetings, requests. The number that says most about whether a customer stays is often one only your business knows how to work out: the return a customer gets on your product, seats in use against seats bought, sessions against their plan. If it’s a trait — synced from an integration, filled in by your team, or calculated by a smart trait — it can count toward health. Each trait you add appears in the breakdown under its own name, with its own weight:
  • Number traits are scored on the same curve as everything else. You set excellent, good, fair and poor; a value at or past each scores 100, 80, 60 or 40, and anything short of poor scores 20. Choose whether higher or lower is better.
  • Yes / no traits score what you say each answer is worth, 100 for yes and 0 for no unless you change them.
For example, with a Monthly ROI smart trait scored higher-is-better at 20 / 5 / 2 / 1, an account returning 6× its subscription scores 80 on that factor, and one returning less than it pays scores 20. To score how closely you’re in touch, add the Zudo traits Days Since Customer Wrote and Days Since We Wrote, lower-is-better. They count in both directions across email, support and Slack, and across a whole parent account, so a quiet customer and a customer you’ve stopped reaching out to each show up. Contact alone can’t tell a renewal conversation from a cancellation one, so weigh it alongside something that reads what’s said, such as CSM Pulse.
An account with no value for the trait is scored on its other factors: the trait’s weight is shared among them, the way NPS works for an account nobody has answered for. A missing value is not counted as a bad one.
Add traits on the Traits tab in Health Score Settings. The health score’s own Zudo traits — Health Score, Health Tier and the two pulse scores — can’t be added, since the score would be feeding on itself or counting a pulse twice.

Default weights

Weights determine how much each factor influences the final score. Your admin can adjust these in Health Score Settings.

Without CSM Pulse

Contact Activity, NPS and Indicators default to 0% — opt into them in Health Score Settings once you have the underlying data flowing (Vitally / API for contact activity, the in-app survey for NPS, Segment / PostHog for indicators).

With CSM Pulse

When a CSM Pulse is set and less than 90 days old, the weights shift to include your manual assessment:
No CSM Pulse set? The 20% is redistributed proportionally across the other factors — accounts without a pulse aren’t penalized.

Parent accounts

A parent account has no activity of its own, so it isn’t scored on the factors above. It takes the scores of the accounts inside it: by default their average weighted by MRR, or optionally the lowest of them. A CSM Pulse set on the parent account is blended in as usual. See How a parent account is calculated.

Health tiers

The final score maps to one of four tiers shown throughout the app: Tier labels, score boundaries, and colors are all configurable in Health Score Settings.

Extreme Pulse amplification

When a CSM sets a Pulse of 1 or 10, Zudo applies special handling:
  • Pulse = 1 guarantees the account lands in the Critical tier, regardless of how good the automated metrics look.
  • Pulse = 10 guarantees the account lands in the Healthy tier, regardless of how poor the automated metrics look.
The CSM Pulse weight is also amplified (1.5x by default) so your high-conviction signal carries more influence in the weighted average. Extreme pulse scores expire after 30 days (vs. 90 days for standard scores) to prevent stale overrides from persisting. When amplification is active, an indicator appears on the health score gauge: ↑ (green, boosted) or ↓ (red, reduced).

Tier drop alerts

When an account’s health score drops into a lower tier (e.g. Healthy → Needs Attention), Zudo automatically creates a high-priority task to make sure it gets attention. These appear in your Flags and task list.

Health tiers

The final score maps to one of four tiers, each with a color indicator: Your admin can customize tier thresholds, labels, and colors to match your organization’s expectations.

CSM Pulse

CSM Pulse lets you inject your own qualitative read into the health score. When your gut tells you something the data doesn’t show — a sponsor leaving, a budget freeze, a surprise expansion — you can set a Pulse score (1–10) with a required note to document your reasoning. To set a CSM Pulse, navigate to the account page and find the CSM Pulse section. Enter a score from 1 to 10 and add a note explaining your assessment. Learn more about CSM Pulse

Extreme Pulse Amplification

When you set a Pulse of 1 or 10, Zudo treats this as a high-conviction signal and applies special handling:
  • Pulse = 1 guarantees the account lands in the Critical tier, regardless of how the automated metrics look.
  • Pulse = 10 guarantees the account lands in the Healthy tier, even if the automated metrics are poor.
This is designed for situations where you have direct knowledge that automated data can’t capture — for example, a customer who told you they’re switching vendors next month, or one who just signed a three-year expansion deal. In addition to the tier guarantee, the Pulse weight is also amplified (1.5× by default) to give your assessment more influence in the weighted calculation.
Extreme scores (1 or 10) expire after 30 days rather than the standard 90 days. You’ll need to refresh the Pulse more frequently when using extreme ratings.
A small indicator appears on the health score gauge when extreme amplification is active — a green arrow (↑) for a boosted score (Pulse = 10) or a red arrow (↓) for a reduced score (Pulse = 1).

Tier drop alerts

When an account’s health tier drops — for example, from Healthy to Needs Attention — Zudo automatically:
  1. Creates a task assigned to you titled “Health score dropped to [Tier] for [Account Name]”, with HIGH priority if the account dropped to Critical.
  2. Sends you an email notification with the account name, previous tier, new tier, current score, and a direct link to the account.
Alerts trigger only on tier drops. Tier improvements do not generate alerts.

Configuration

Your organization’s health score weights, tier thresholds, and factor benchmarks are all configurable. If the defaults don’t match your business model, ask your admin to adjust them in Health Score Settings.