Limited offer · Save $800 on the snapshot · Closing in 00d 00h 00m 00s Claim now →
Home / Blog / Post
🛡️ Retention 📖 7 min read

Churn prediction with health scores: the SaaS founder's setup guide

How to build a behavioral health score that predicts churn 45-60 days early — signals to track, weighting formulas, GHL workflow setup, and the CS playbook that turns an alert into a saved account.

The cancellation webhook is the last thing that happens. The churn decision was made 6–8 weeks earlier.

This is the core problem with reactive churn management. The customer stopped finding value, started looking at alternatives, and mentally moved on — all while appearing in your MRR figures as “active.” By the time the cancellation form is submitted, the conversation that could have saved the account is 45 days in the past.

Behavioral health scores change this model. They’re a weekly composite measurement of the signals that predict churn before the customer consciously decides to leave — giving your CS team a real intervention window instead of a post-mortem conversation.

45–60 days avg
Typical churn decision lead time
5–10 pts
NRR improvement (90-day baseline)
25–40%
At-risk recovery rate (early intervention)

What a health score actually measures

A health score is a composite number — typically 0–100 — calculated from behavioral signals that predict whether an account will renew or churn. The specific signals depend on your product, but the signal categories are consistent across most SaaS businesses.

Engagement signals (positive weight):

  • Login frequency in the last 30 days. Not just “has logged in” — frequency matters.
  • Core feature action count. The number of times a user took your product’s key action (submitted a form, ran a workflow, exported a report, sent a message — whatever is most central to your value proposition).
  • Seat utilization rate: active seats ÷ licensed seats. Low utilization on a team plan is a churn signal — the team isn’t using what they’re paying for.
  • Integration depth: number of integrations connected. Products deeply embedded in a customer’s workflow are significantly harder to churn.
  • Recent support ticket resolution: fast resolution correlates with satisfaction; unresolved tickets older than 7 days correlate strongly with churn.

Risk signals (negative weight):

  • Days since last login. A 14-day login gap on a daily-use product is a serious signal.
  • Usage trend direction: is the 30-day action count higher or lower than the 60-day average? Declining trend is more predictive than absolute level.
  • NPS score below 7.
  • Active billing issues: failed payments in the last 30 days.
  • Feature adoption stagnation: account created 90+ days ago but still using < 3 core features.

Example scoring model

Here’s a concrete starting framework for a mid-market B2B SaaS product (Starter/Pro/Scale tiers, team-based):

SignalDirectionWeightData source
Logins last 30 days ≥ 10Positive+20Product webhook
Core event count last 30 days ≥ 20Positive+20Product webhook
Seat utilization ≥ 60%Positive+15Billing webhook
Integration ≥ 1 connectedPositive+10Product webhook
NPS score 9–10Positive+20NPS workflow
NPS score 7–8Positive+10NPS workflow
NPS score 0–6Negative-20NPS workflow
Days since last login ≥ 14Negative-15Product webhook
Open support ticket > 7 daysNegative-20Helpdesk webhook
Failed payment in last 30 daysNegative-20Billing webhook

Maximum score: 85 (all positive signals, no risk signals). Minimum score: -55. Normalize to 0–100.

Validate this model against your historical churn data within 90 days of running it: accounts that churned should have had significantly lower scores 45–60 days before cancellation. Adjust weights if the model isn’t discriminating clearly.

Building the health score in GHL

The SaaS Snapshot implements health scores as a custom contact field (health_score) updated by a scheduled workflow running every Monday at 6am.

Step 1: Configure product event webhooks

Your product must send behavioral events to GHL so the health score calculation has live data. Configure your product to POST events to the GHL webhook endpoint (included in the snapshot) on:

  • User login (include account ID, user ID, timestamp).
  • Core feature events (include account ID, event name, timestamp).
  • Seat activity (include account ID, active_seat_count, licensed_seat_count).
  • Integration connected/disconnected events.

Each event updates the corresponding custom field on the GHL contact record. The health score calculation workflow reads these fields — it can’t function without live data from your product. Set up the webhooks in week one. If you use Zapier rather than direct webhooks, configure the Zapier GHL integration to pass the relevant fields.

Step 2: The health score calculation workflow

The calculation workflow runs on a weekly scheduled trigger (every Monday, 6am). For each paying account in the “Converted” pipeline stage:

  1. Read raw signal values from custom fields.
  2. Apply weighting formula using GHL’s mathematical action blocks.
  3. Normalize result to 0–100.
  4. Write to health_score custom field.
  5. Write health_score_trend (current score minus previous week’s score — positive = improving, negative = declining).
  6. Evaluate score against thresholds and branch accordingly.

Step 3: Alert branches

The SaaS Snapshot ships three alert branches:

Red zone (score < 40): Immediate high-priority task created for the assigned CS rep. Automated personal email from the account owner (written to read like a person, not a sequence email): “Hi [Name], I noticed you haven’t been in [Product] as often lately — wanted to check in personally. Is there something we could do better, or something I can help you with? Happy to spend 20 minutes on a quick call if useful.” Calendar booking link inline.

Yellow zone (score 40–65): Low-priority CS task. Automated email with 2–3 targeted resources tied to features the account likely hasn’t adopted (pulled from the health score data — if seat utilization is the weak signal, email about team features; if integration depth is low, email about integrations).

Green zone recovery (previously red/yellow, now ≥ 70): Close the at-risk task. Log the recovery event (date, prior score, current score, what CS action preceded the recovery). Do not send an email — let the account breathe. The recovery event becomes a data point for understanding what interventions work.

The intervention that actually saves accounts

The health score alert is only as valuable as the CS response it triggers. And the highest-performing CS interventions share three characteristics: they’re personal, specific, and fast.

Generic approach (low recovery rate): “Hi [Name], we noticed you haven’t logged in as much lately. Here are some resources to help you get started.”

Personal + specific approach (high recovery rate): “Hi [Name], I was looking at your account and noticed your team has been using [Product] for project management but hasn’t connected your CRM yet — that’s usually where customers get the most value because [specific outcome]. Would you be up for a 20-minute screenshare? I can have it configured for your workflow before we get off the call.”

The second approach requires knowing something specific about the account. The health score data — especially the event-level signals — gives you exactly that context. Logins are low + no integrations connected = surface the integration value prop. Seat utilization is low = address team adoption. Support ticket is open = resolve the ticket first, retention conversation second.

What good looks like at 90 days

With health score monitoring and alert workflows running for 90 days:

  • CS team shift: from reactive (fielding cancellation requests) to proactive (catching accounts at 35-point health scores with 60 days of intervention runway).
  • NRR improvement: typically 5–10 percentage points in the first 90 days for teams that weren’t running any proactive retention before. At $300k ARR, five points of NRR improvement is $15k/year retained.
  • Model validation: you now have 90 days of actual health score data matched against churn events. You can see which signals most accurately predicted the churns that actually happened and recalibrate weights accordingly.
  • Cultural shift: “This account is at 32” means something specific to everyone in the Monday CS standup. Shared vocabulary around account health changes how CS teams prioritize their time.

Combining with NPS

Health scores and NPS are complementary signals that disagree more often than you’d expect.

An NPS score is a point-in-time self-report: how the customer felt in the 5 minutes they filled out the survey. A health score is a continuous behavioral measure: what they’re actually doing week over week.

Accounts that score NPS 8 but show a 3-week login gap and declining feature usage are a specific at-risk profile — “lukewarm advocates who are quietly disengaging.” Neither signal alone catches them; both together do.

The SaaS Snapshot wires NPS responses into the health score calculation automatically. A detractor response immediately decrements the health score by 20 points — potentially triggering a same-day CS alert for an account that was already in yellow zone.

★ Skip the manual build

Health score + churn prediction ship pre-built in the SaaS Snapshot

Ready to ship the system?

Install the SaaS Snapshot in 24 hours

Every workflow above — already built, refined across 80+ SaaS teams, installed for you for $1,200 one-time.

Get the Snapshot — $1,200 Schedule a demo
Book Demo Get Snapshot