> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pivotal.app/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pivotal.app/_mcp/server.

# Health score

Pi assigns every Customer a health score from 0 to 100 that summarizes whether the account is on track. The score updates nightly at 02:00 in your workspace timezone, and on a handful of live events: phase changes, task completions or overdue tasks, support tickets, and CRM stage updates. You see the current score on the customer page's **Health** tab, in the Customers list as a colored pill, and as the sort key behind [What's at risk](/product/ask-pi/whats-at-risk).

## What feeds the score

Five signals roll up, each weighted differently:

| Signal              | Weight | What it measures                                                   |
| ------------------- | ------ | ------------------------------------------------------------------ |
| Onboarding velocity | 30%    | Days in current phase vs the workspace average for that phase      |
| Recent activity     | 20%    | Comments, task updates, and portal logins in the last 14 days      |
| Task health         | 20%    | Ratio of done to overdue tasks in active onboardings               |
| Contract size       | 15%    | `plan` and `arr` custom field, normalized against your workspace   |
| Support load        | 15%    | Open and recently closed tickets (HubSpot or Zendesk if connected) |

You can see the signal-level breakdown on the **Health** tab. Click any row to expand into the underlying data: which tasks are overdue, which phase is dragging, which tickets are open.

## The three buckets

Pi maps the raw 0-100 score onto three buckets that show up everywhere a score is displayed:

* **Healthy** (70-100, green). Account is tracking. Default state for a customer in active onboarding.
* **Watch** (40-69, yellow). One or two signals are degrading. Worth a check-in but not urgent. Shows up in the "Watch" lane on the Workbench.
* **At risk** (0-39, red). Multiple signals are degrading or one is severe. Surfaces in the Workbench risk lane and in `whats-at-risk` prompts.

The boundaries are workspace settings under **Admin > Health score**. You can tighten or loosen them if your portfolio runs hot or cold.

## How it interacts with the `at_risk` status

The score and the `status` field are independent.

* The **score** is Pi's automatic read. It updates on its own.
* The **`at_risk` status** is a flag you or a teammate sets on the Customer record. It does not move on its own.

When a score drops into the red bucket, Pi does not auto-flip `status` to `at_risk`. It nudges you instead: a new entry in the [activity feed](/product/customers/customer-history) and a card in the Workbench inbox. You decide whether to set the status. See [at risk and churned](/product/customers/at-risk-and-churned) for what flipping the status triggers.

## Webhooks

A score drop of 10 points or more fires a `customer.health_score_dropped` event. A bucket transition (Healthy to Watch, Watch to At risk) fires `customer.health_bucket_changed`. Useful for piping into Slack or your ops tooling. See [webhooks overview](/webhooks/overview).

## Related

* [At risk and churned](/product/customers/at-risk-and-churned)
* [What's at risk](/product/ask-pi/whats-at-risk)
* [Webhooks overview](/webhooks/overview)

Email **[help@pivotal.app](mailto:help@pivotal.app)** with a screenshot of where you got stuck and the customer or onboarding id from the URL.