n8n Tutorial: Churn Risk Score < 40 → Full Intervention Sequence Automation
Every SaaS business loses customers it could have saved. Not because the product failed, but because nobody moved fast enough when the warning signs appeared. A health score drops below 40, and by the
Every SaaS business loses customers it could have saved. Not because the product failed, but because nobody moved fast enough when the warning signs appeared. A health score drops below 40, and by the time a human notices — three days, a week later — the account has already emotionally churned. This n8n workflow closes that gap. It scans your customer health scores every single day, and the moment an account crosses into danger, it fires a coordinated intervention across Slack, HubSpot, your CSM's inbox, and Pipedrive — automatically, with a follow-up scheduled two days out. No dashboard-watching required.
The problem: churn happens in the silence between alerts
Health scores are useless if nobody acts on them in time. Most teams compute a churn risk score — usage decline, support tickets, login frequency, NPS — and dump it into a dashboard that someone is supposed to check. In practice, that check happens weekly at best. The window where intervention actually works is measured in hours, not days.
The second problem is coordination. A meaningful save is never a single email. It needs the CSM alerted, the CRM updated so the account owner sees context, a task created so nothing gets forgotten, and a team-wide signal so leadership knows an account is at risk. Doing all of that by hand for every at-risk account is exactly the kind of repetitive work that gets skipped when the team is busy — which is always. The result: your most valuable early-warning data produces zero action.
The solution: one daily scan, one coordinated response
This template runs on a fixed daily schedule. It pulls the current health score for every active account, filters for anyone scoring below 40, and for each at-risk account it executes a five-part intervention sequence in parallel: a Slack alert to the customer-success channel, a HubSpot property update flagging the account as at-risk, a personalized email to the assigned CSM, a Pipedrive activity so the deal owner has a concrete next step, and a scheduled 2-day follow-up that re-checks the account and escalates if nothing improved.
The entire thing is declarative and runs unattended. You set the threshold once (40 is a sensible default, but it is a single node parameter you can tune). From then on, every morning your team wakes up to a curated list of accounts that genuinely need attention — already routed to the right people, already logged in the right systems.
Step-by-step setup in n8n
Here is how the workflow is wired, node by node. If you buy the template it arrives pre-built — you only fill in credentials — but understanding the structure lets you customize it confidently.
1. Schedule Trigger. Start with a Schedule Trigger node set to a daily interval, typically 07:00 in your team's timezone so alerts land before the workday starts. Use the "Cron" expression mode (0 7 * * *) for precise control.
2. Fetch health scores. Add an HTTP Request node (or a database node like Postgres / Supabase if your scores live in your own DB) to pull the latest health data. Configure it to return account ID, account name, current score, CSM email, and HubSpot/Pipedrive record IDs in one payload. Enable pagination if you have more than a few hundred accounts.
3. Filter the at-risk accounts. Insert an IF node — or better, a Filter node — with the condition {{ $json.health_score }} < 40. Only accounts below the threshold pass through. Everything else is silently dropped, so you never spam your team with healthy accounts.
4. Loop per account. Wire a Loop Over Items (Split In Batches) node so the intervention runs once per at-risk account. This keeps API rate limits sane and lets you add a small delay between iterations if a provider throttles you.
5. The five-part fan-out. From the loop, branch into the intervention nodes:
• Slack node → "Send Message" to your #customer-success channel. Use Block Kit formatting to include the account name, score, and a direct link to the CRM record so a CSM can act in one click.
• HubSpot node → "Update Contact/Company", setting a custom property like churn_risk_stage to at_risk_intervention. This makes the flag visible everywhere HubSpot is used and triggers any HubSpot-side workflows you already have.
• Send Email (or Gmail) node → a templated message to {{ $json.csm_email }}. Personalize the subject with the account name and drop the score plus the top risk signals into the body.
• Pipedrive node → "Create Activity" on the account's deal, due today, titled "Churn intervention — [account]". This puts the task in the owner's native task list.
6. The 2-day follow-up. After the fan-out, add a Wait node configured to resume after 2 days (n8n persists the execution, so it survives restarts). On resume, re-fetch the account's score with another HTTP Request, then use an IF node: if the score is still below 40, send an escalation Slack message tagging the CSM's manager; if it recovered, log a "saved" note and exit cleanly.
7. Error handling. Set an Error Trigger workflow so any failed API call posts to a #ops-alerts channel instead of dying silently. Turn on "Retry On Fail" (3 attempts, 5s apart) for each external node.
The benefits: speed, coverage, and a paper trail
The obvious win is response time. Intervention now happens within hours of a score dropping, not whenever someone remembers to open the dashboard. That alone measurably lifts save rates, because the accounts you reach in the first day are the ones still open to a conversation.
The less obvious win is coverage. Automation does not get busy, distracted, or go on vacation. Every account below 40 gets the full treatment, every day, with zero accounts slipping through. And because every step writes to Slack, HubSpot, and Pipedrive, you get a complete audit trail — you can prove exactly which accounts were flagged, who was notified, and what happened next. That data becomes the feedback loop for improving your health score model itself.
Finally, it protects your team's focus. Instead of scanning dashboards, CSMs spend their time on the actual saving conversation, walking in with full context already assembled for them.
Common pitfalls to avoid
Alert fatigue from a bad threshold. If 40 flags 200 accounts a day, nobody reads the Slack channel. Start conservative, watch the volume for a week, and tune the threshold to a number your team can realistically action. Consider a score dropped below 40 AND wasn't already flagged condition to avoid re-alerting the same account daily.
No deduplication. Without a "last intervention date" check, an account sitting at 38 for a week gets hammered with the full sequence every morning. Store the intervention date (write it to a HubSpot property) and add a filter so an account isn't re-triggered within, say, 7 days.
Ignoring rate limits. Firing HubSpot, Slack, and Pipedrive calls for 100 accounts in one burst will hit API limits. The Loop Over Items node plus a short Wait between batches solves this — don't remove it to "make it faster."
Skipping the follow-up branch. The 2-day re-check is what turns this from a notification tool into an actual intervention system. Without it you never learn whether the intervention worked. Keep it.
Hardcoding credentials. Use n8n's credential store for every token. Never paste API keys into HTTP nodes directly — it breaks when tokens rotate and leaks secrets in exported workflows.
Ja construimos isso pra voce
Nao comece do zero. O Churn Risk Score < 40 → Full Intervention Sequence e um workflow n8n pronto para instalar — conecta suas ferramentas em minutos, sem codigo.
Instalar por $49 →