Churn rarely happens suddenly. Users go quiet, skip a few sessions, stop getting value, and only then cancel. This recipe defines the segment that catches them early and a workflow that tries to pull them back.Documentation Index
Fetch the complete documentation index at: https://loops.so/docs/llms.txt
Use this file to discover all available pages before exploring further.
What you need
- A
lastActive(date contact property) - A
churnRisk(boolean contact property) your app computes and writes (true/false) - Optional: a count property like
sessionCount30dif you want tighter rules
Define the segment
Go to the Audience page, apply filters, then save the segment. A reasonable starting definition:churnRiskIs true, ANDSubscribedIs true
churnRisk from your app as:
truewhenlastActiveis between 14 and 60 days agofalseotherwise
churnRisk directly.
syncToLoops.ts
Set up the re-engagement workflow
Add a lifecycle property
Add a boolean contact property in Loops called
churnRisk.
This should beupdated via the Update contact endpoint whenever activity changes, or in a daily sync job.Trigger on Contact updated
In the workflow builder, pick Contact updated with
churnRisk changing to true. See Workflow
triggers.Add an audience filter
Match the trigger so only currently-at-risk users continue:
churnRisk Is true.Choose between One time or Every time for the trigger frequency, depending on whether you want contacts to re-enter the workflow in the future.Set the filter scope to All following nodes, so Loops will continue evaluating each contact against the filter as the workflow progresses.Build the email sequence
Add email nodes to the workflow, with timer nodes in between.
- Day 0: “We noticed you have been quiet. Here is the one thing worth coming back for.” Personal, useful, not promotional.
- Timer 4 days
- Send a customer story or missed-feature email.
- Timer 6 more days
- Send a direct ask with a link to cancel if they prefer.
churnRisk is false.Why this works
- The segment updates automatically as
churnRiskchanges - The filter in the workflow prevents messaging users who already came back
- The 60-day upper bound protects deliverability by keeping long-dormant users out
Testing before you ship
- Send a test to your own account with
lastActivemanually set 20 days back andchurnRiskset totrue - Use the experiments feature to A/B test subject lines if volume permits

