> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zudo.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Health Scoring

> How Zudo calculates the 0–100 account health score and what drives each factor.

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.

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.

| Average response time | Score |
| --------------------- | ----- |
| Under 4 hours         | 100   |
| Under 12 hours        | 80    |
| Under 24 hours        | 60    |
| Under 48 hours        | 40    |
| 48+ hours             | 20    |

<Note>
  No email threads? This factor defaults to 50 (neutral). Response time is measured against your configured [business
  hours](/settings/organization), so nights and weekends don't penalize you.
</Note>

### Open requests

The number of unresolved feature requests linked to the account.

| Open requests | Score |
| ------------- | ----- |
| 0             | 100   |
| 1–2           | 80    |
| 3–5           | 60    |
| 6–10          | 40    |
| 11+           | 20    |

### Meeting frequency

How many meetings you've had with the account in the last 6 months.

| Meetings (last 6 months) | Score |
| ------------------------ | ----- |
| 24+                      | 100   |
| 12–23                    | 80    |
| 6–11                     | 60    |
| Fewer than 6             | 40    |

<Note>Zero meetings scores 40, not as missing data. Regular engagement is expected.</Note>

### Issue resolution

Average days to resolve engineering issues linked to this account's requests over the last 90 days.

| Avg resolution time | Score |
| ------------------- | ----- |
| Under 3 days        | 100   |
| Under 7 days        | 80    |
| Under 14 days       | 60    |
| Under 30 days       | 40    |
| 30+ days            | 20    |

<Note>No issues resolved in 90 days? Scores 70 — having no issues is generally a positive signal.</Note>

### Recent activity

Days since the last touchpoint (email or meeting) with this account.

| Days since last activity | Score |
| ------------------------ | ----- |
| Under 3                  | 100   |
| Under 7                  | 80    |
| Under 14                 | 60    |
| Under 30                 | 40    |
| 30+                      | 20    |

<Warning>No recorded activity at all scores 20. Accounts with zero interaction history are considered at risk.</Warning>

### Contact activity

Days since a contact at the account was last active. This data comes from Vitally (contact `lastSeenTimestamp`) or can be set via the [API](/api-reference/accounts#update-account). When both sources exist, the API value takes priority.

| Days since last contact activity | Score |
| -------------------------------- | ----- |
| Under 1                          | 100   |
| Under 3                          | 80    |
| Under 7                          | 60    |
| Under 14                         | 40    |
| 14+                              | 20    |

<Note>
  No contact activity data? This factor is excluded and its weight is redistributed across the remaining factors.
</Note>

### Indicators

A composite of any number of [Indicators](/accounts/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](/settings/health-score-config#indicators).

<Note>
  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.
</Note>

***

## Default weights

Weights determine how much each factor influences the final score. Your admin can adjust these in [Health Score Settings](/settings/health-score-config).

### Without CSM Pulse

| Factor              | Weight |
| ------------------- | ------ |
| Email Response Time | 25%    |
| Open Requests       | 20%    |
| Meeting Frequency   | 20%    |
| Issue Resolution    | 20%    |
| Recent Activity     | 15%    |
| Contact Activity    | 0%     |
| Indicators          | 0%     |

<Note>
  **Contact Activity** and **Indicators** default to 0% — opt into them in [Health Score
  Settings](/settings/health-score-config) once you have the underlying data flowing (Vitally / API for contact
  activity, Segment / PostHog for indicators).
</Note>

### With CSM Pulse

When a CSM Pulse is set and less than 90 days old, the weights shift to include your manual assessment:

| Factor              | Weight |
| ------------------- | ------ |
| Email Response Time | 20%    |
| Open Requests       | 16%    |
| Meeting Frequency   | 16%    |
| Issue Resolution    | 16%    |
| Recent Activity     | 12%    |
| Contact Activity    | 0%     |
| Indicators          | 0%     |
| CSM Pulse           | 20%    |

<Tip>
  No CSM Pulse set? The 20% is redistributed proportionally across the other factors — accounts without a pulse aren't
  penalized.
</Tip>

## Health tiers

The final score maps to one of four tiers shown throughout the app:

| Score  | Tier            |
| ------ | --------------- |
| 80–100 | Healthy         |
| 60–79  | Needs Attention |
| 40–59  | At Risk         |
| 0–39   | Critical        |

Tier labels, score boundaries, and colors are all configurable in [Health Score Settings](/settings/health-score-config).

## 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 [Alerts](/app/alerts) and task list.

***

## Health tiers

The final score maps to one of four tiers, each with a color indicator:

| Tier                | Score range | Color  |
| ------------------- | ----------- | ------ |
| **Healthy**         | 80–100      | Green  |
| **Needs Attention** | 60–79       | Yellow |
| **At Risk**         | 40–59       | Orange |
| **Critical**        | 0–39        | Red    |

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](/accounts/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.

<Warning>
  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.
</Warning>

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.

<Note>Alerts trigger only on tier drops. Tier improvements do not generate alerts.</Note>

***

## 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](/settings/health-score-config).
