Skip to main content
Go to Settings → Health Score Settings to configure how health scores are calculated. Changes apply to all accounts and take effect on the next daily calculation.

Factor Weights

Each of the six scoring factors contributes a percentage of the overall 0–100 score. Adjust weights to reflect what matters most to your team. Weights should sum to 100%; setting a factor to 0% disables it. Without CSM Pulse:
FactorDefault Weight
Email Response Time25%
Open Requests20%
Meeting Frequency20%
Issue Resolution20%
Recent Activity15%
Contact Activity0%
Indicators0%
Contact Activity and Indicators default to 0%. Opt into them once you have the underlying data flowing — Vitally / API for contact activity, Segment or PostHog for indicators. See Indicators below for the participation flow.
With CSM Pulse enabled: When an account has a CSM Pulse score updated within the last 90 days, it’s included at the weight you configure:
FactorDefault Weight
Email Response Time20%
Open Requests16%
Meeting Frequency16%
Issue Resolution16%
Recent Activity12%
Contact Activity0%
Indicators0%
CSM Pulse20%
If your team regularly sets CSM Pulse scores, give it 15–25% weight so human judgment influences the final score. If your team rarely uses it, keep it at 0%.
If an account has no CSM Pulse (or it’s older than 90 days), the weight is redistributed proportionally across the other factors — no account is penalized for missing a pulse.

Tier Configuration

Health tiers map score ranges to labels and colors used throughout the app. Each tier has a minScore, a label, and a hex color.
TierScore RangeDefault Color
Healthy80–100Green (#22c55e)
Needs Attention60–79Yellow (#eab308)
At Risk40–59Orange (#f97316)
Critical0–39Red (#ef4444)
Rename tiers to match your team’s language — “Champion” instead of “Healthy” or “Watch List” instead of “Needs Attention”.
Tier boundaries also affect Extreme Pulse — if you raise the Healthy threshold, the floor for a pulse=10 override rises to match.

Scoring Thresholds

Thresholds define what counts as excellent, good, fair, or poor for each factor. Tune these to match your team’s service level expectations.
FactorExcellentGoodFairPoor
Email Response Time< 4 hrs< 12 hrs< 24 hrs< 48 hrs
Open Requests0≤ 2≤ 5≤ 10
Meeting Frequency≥ 4 / 6mo≥ 2 / 6mo≥ 1 / 6mo
Issue Resolution< 3 days< 7 days< 14 days< 30 days
Recent Activity< 3 days< 7 days< 14 days< 30 days
Contact Activity< 1 day< 3 days< 7 days< 14 days
Contact Activity measures how recently a contact at the account was active. Data comes from Vitally (lastSeenTimestamp) or the API (contactActivityAt). When set via API, the API value takes priority over Vitally data.
Enterprise customers with longer sales cycles and less frequent contact may need relaxed Meeting Frequency and Recent Activity thresholds.

Extreme Pulse Settings

When a CSM gives an account a pulse of 1 or 10, that high-conviction signal overrides automated metrics:
  • Pulse = 1 → account lands in Critical, regardless of other metrics
  • Pulse = 10 → account lands in Healthy, regardless of other metrics
The tier guarantee derives from your tier configuration — changing the Healthy threshold automatically adjusts the pulse=10 floor.

Options

SettingDescriptionDefault
EnabledToggle extreme pulse amplification on or offOn
AmplifierMultiplier applied to CSM Pulse weight (1.0–3.0×)1.5×
Extreme Pulse ExpirationDays until a pulse=1 or pulse=10 rating expires30 days
Normal Pulse ExpirationDays until a pulse=2–9 rating expires90 days
Amplifier example: With a base CSM Pulse weight of 20% and a 1.5× amplifier, the effective weight for an extreme score becomes 30%, giving the CSM’s signal more pull before the tier guarantee is applied. Why extreme pulse expires faster: Extreme ratings carry more risk of becoming stale. The shorter window (30 days by default) encourages re-evaluation of flagged accounts. When amplification is active on an account, an indicator appears on the health score gauge:
  • ↑ (green) — boosted by pulse = 10
  • ↓ (red) — reduced by pulse = 1
Hover over the score gauge for details on which override was applied.

Indicators

The Indicators tab lets you fold any of your saved Indicators into the health score as a single weighted factor. Useful when product-usage signals like Power user or Active in last 7 days should drive the health number — not just inform it.

Setup flow

1

Set the Indicators weight

On the Weights tab, set Indicators above 0. This unlocks the Indicators tab. The slider participates in the 100% weight sum just like any other factor.
2

Pick which indicators participate

On the Indicators tab, check each indicator you want to include in the composite. Indicators come from Settings → Indicators.
3

Set sub-weights

Each included indicator gets a Sub-weight input. Sub-weights are relative within the composite — they don’t sum to 1 — they just determine how much each indicator pulls relative to its peers. Equal weights make every indicator count the same.
4

Configure scoring per indicator

How each indicator’s value maps to a 0–100 component score:
  • Yes / no indicators — set the score for true (default 100) and the score for false (default 0).
  • Number indicators — set four thresholds (excellent / good / fair / poor) that map to 100 / 80 / 60 / 40 / 20, plus a Direction dropdown (Higher is better or Lower is better).
5

Save

Changes apply on the next health score calculation. Trigger a recalc by saving the modal — the next nightly run picks up the new shape.

How the composite scores

Per indicator:
  • Boolean → value === true ? trueScore : falseScore (defaults 100 / 0)
  • Number → threshold curve. Example with direction: higher_is_better and excellent: 50, good: 20, fair: 5, poor: 0:
    • value ≥ 50 → 100
    • value ≥ 20 → 80
    • value ≥ 5 → 60
    • value ≥ 0 → 40
    • else → 20
The composite is a sub-weighted average of these per-indicator scores. The composite then plugs into the outer health score as the Indicators factor.

Disabled indicators

Indicators that are disabled (toggle on the Indicators settings page) or that haven’t been computed yet for an account are silently skipped — you don’t have to remove them from this config. The composite only averages over indicators that contributed.

When the Indicators factor is dropped entirely

If no participating indicator has a computed value for an account (common for newly-connected orgs), the Indicators factor weight is redistributed across the other factors — same behavior as Contact Activity when no Vitally data exists. Accounts aren’t penalized for missing data.