SaaS Churn Prevention Emails: Build a Save Sequence Before Renewal
Churn prevention emails work when they fire on a usage signal plus a renewal date, not on a calendar blast. If you send “we miss you” to everyone whose renewal is close, you annoy healthy accounts and miss the ones actually drifting. The practical setup is: send product events into your email tool, store the renewal date on the contact record, build a dynamic risk segment, then run a three-email save sequence that exits the moment the account shows signs of life again. This tutorial walks through that build step by step, with the exact settings, a worked example, and how to verify each piece before you turn it on.
What You'll Set Up and What You Need
The core idea is a trigger you can measure and a deadline you can count down to. A cancellation event is a lagging signal — by the time it fires, the decision is made. A leading signal (no login, a removed seat, a key feature untouched) gives you weeks of runway before the renewal date.
Before you start, confirm you have:
- A product event stream, or at least a way to send events from your app. You need event names and properties, not just pageviews.
- A renewal date stored on the contact record. Without it, you cannot time the sequence.
- A sending domain with DKIM, SPF and DMARC configured. Save emails from a domain that fails authentication land in spam, which defeats the purpose.
- A tool that supports event triggers, waits, conditions and webhooks. Mailerflow covers this with visual automations (triggers on events, dates, inactivity and website behavior), dynamic segments, and signed real-time webhooks with retries and delivery logs.
If you are testing on Mailerflow's Free plan, note the ceiling: 2,500 contacts, 10,000 emails a month, and 3 active automations. That is enough for one save sequence and a couple of experiments. Paid plans remove the email cap and raise the automation limit.
Step-by-Step: From Usage Signal to Save Sequence
Step 1: Define the churn signal you can actually measure
Pick one leading indicator. Not a composite health score — one signal you can explain to a colleague in a sentence.
Good candidates:
- No login in 14 days
- Seats dropped in the last 30 days
- A key feature unused for 21 days (e.g. no report exported)
- An admin removed a teammate
- A support ticket tagged
cancellation
Send the events with clear names and useful properties. For example:
{
"event": "user.login",
"contact_email": "admin@example.com",
"properties": { "plan": "team", "seats": 6, "renewal_date": "2026-12-01" }
}
Use consistent naming (seat.removed, feature.report_exported) so segment rules stay readable six months from now.
Verify: fire a test event and confirm it appears on the contact timeline in your email tool. If it does not show up, fix that before building anything else.
Step 2: Store renewal date and plan on the contact record
Create four custom fields:
| Field | Type | Example |
|---|---|---|
renewal_date |
date | 2026-12-01 |
plan |
text | team |
seats |
number | 6 |
mrr |
number | 294 |
Map these from your billing system. A CSV import works for a first pass; Mailerflow's CSV import runs duplicate and validity checks and supports custom fields and tags. For ongoing sync, push them via the API whenever billing changes.
Verify: open a test contact and confirm the date renders in the format and timezone you expect. A renewal date stored as a string in the wrong timezone will shift your send days by one.
Step 3: Build the risk segment
Write the rules literally, then translate them into your tool. Example:
planis notfree- AND
renewal_dateis within the next 30 days - AND (
last_loginmore than 14 days ago ORseatsdecreased in the last 30 days)
Dynamic segments re-evaluate continuously, so contacts enter when they go quiet and leave when they come back. That property is what makes the whole sequence safe to run. If you would rather start from a description, Mailerflow's AI segmentation can draft a segment from plain language — review the rules it produces before saving.
Verify: compare the segment count against a manual export from your product database. A large mismatch usually means a timezone problem or an event name that never fires.
Step 4: Write the save sequence (three emails, not five)
Three emails, timed relative to renewal_date. One call to action each.
Email 1 — renewal minus 21 days. Value reminder plus one concrete next action.
- Subject:
Your December report is ready to build - Preview:
Two clicks and your team dashboard is live again. - CTA: a deep link into the feature they stopped using.
Email 2 — renewal minus 10 days. Handle the most common objection, and offer a path that is not cancellation.
- Subject:
Not using all six seats? - Preview:
You can drop to three and keep your data. - CTA: change plan, or book a 15-minute call.
Email 3 — renewal minus 3 days. Direct and low-friction.
- Subject:
Want us to pause your plan instead? - Preview:
Keep your data, stop the charge, restart anytime. - CTA: pause plan.
Keep the copy plain-text in feel. No guilt (“we miss you”), no fake urgency. If drafting three variants feels slow, Mailerflow's AI email builder takes a description and returns a complete responsive design plus subject lines and preview text — useful for getting a first version you then edit by hand.
Verify: send each email to yourself and check the CTA link resolves to the right in-app page for a logged-in user.
Step 5: Configure the automation
Structure it exactly like this:
- Trigger: contact enters segment
Renewal risk 30d. - Wait until 21 days before
renewal_date. - Condition: still in segment? If yes, send Email 1.
- Wait 11 days.
- Condition: still in segment AND has not logged in since sequence start? Send Email 2.
- Wait 7 days.
- Condition: still in segment? Send Email 3.
- Exit condition: contact logs in, or
renewal_datechanges.
Mailerflow's AI automation builder can draft this structure from a one-sentence description for you to review before activation, and automations support “send when the contact is most active” if you want to shift send time per contact.
Verify: create a test contact with a renewal_date 25 days out and step through the timeline view to confirm each wait and condition lands on the day you expect.
Step 6: Route replies and cancellations back into the product
Email alone does not save an account. Add a webhook step: on email clicked or a submitted “talk to us” form, send a signed webhook to your app so a CSM task is created. Mailerflow's signed real-time webhooks include retries and delivery logs, and the delivery log is where you confirm the webhook actually fired.
Also handle suppression. If a contact cancels, tag them cancelled and add an exit rule so they stop receiving save emails immediately.
Verify: trigger a test click and confirm the webhook arrives with a valid signature and appears in the delivery log. Then tag a test contact cancelled and confirm they leave the segment.
A Worked Example: 14-Day Inactivity Before a Monthly Renewal
This is an illustrative scenario, not a customer story.
Northwind Analytics sells a reporting tool at $49/month. Monthly renewals fall on the 1st. One account has 6 seats ($294 MRR), renews 2026-12-01, and the admin last logged in 19 days ago. Last week, one seat was removed.
- Nov 9: the
seat.removedevent fires. The contact entersRenewal risk 30d. - Nov 10 (renewal minus 21): Email 1 sends. Subject:
Your December report is ready to build. The CTA deep-links to the report builder. - Nov 15: the admin logs in. The exit condition fires. Emails 2 and 3 never send. This is the sequence working, not failing.
- If no login: Email 2 sends Nov 21 with the seat-reduction offer. Email 3 sends Nov 28 with the pause option.
- If the admin clicks the “talk to us” CTA: the signed webhook creates a CSM task within seconds, and the CSM sees the account, the $294 at risk, and which email drove the click.
How to Check It Works
Run this checklist before you call the sequence live:
- Segment membership. Create a test contact with a future
renewal_dateand confirm they enter the segment. - Send timing. Check the automation timeline shows each email on the expected day.
- Exit conditions. Log a test login event and watch the contact leave the segment.
- Delivery health. Review delivery, bounce and complaint numbers in analytics after the first real sends.
- Webhook integrity. Confirm the signature is valid and that retries appear in delivery logs when your endpoint is down.
- Suppression. Tag a test contact
cancelledand confirm no further save emails send.
On deliverability: send from your own domain with DKIM, SPF and DMARC set up and verified, and let your tool suppress bounces and complaints automatically. Mailerflow handles the guided setup, automatic verification, and automatic suppression of bounces and complaints, plus reputation monitoring and warm-up limits. One caveat on measurement: opens are approximate, so judge this sequence on clicks and replies.
Common Mistakes and Fixes
- Triggering on cancellation. Too late to email about. Trigger on a leading signal instead.
- Sending to everyone near renewal. Health-blind sends train people to ignore you. Gate on the risk segment.
- No exit condition. A user who logs in on day two should not get two more “come back” emails. Add the exit rule first.
- Asking for a call when the user needs a docs link. Match the CTA to the likely blocker.
- Ignoring admin vs end-user. The admin controls the renewal; the end user controls usage. Send to the right one.
- Not suppressing cancelled accounts. Save emails to someone who already left read as desperate and hurt sender reputation.
- One template for every risk type. A seat reduction and a 14-day silence are different problems. Different copy.
- Forgetting timezone. “21 days before renewal” computed in the wrong zone sends a day early or late.
Next Steps
Run one signal for 30 days before adding a second. Once inactivity is stable, add seat reduction as a separate segment with its own copy. Connect the webhook to your CRM so save attempts are visible to sales, and review the segment weekly to catch false positives — accounts that are quiet for good reasons.
On cost: paid plans include unlimited emails, so adding a second sequence does not change what you pay for sending, and free migration help is available on eligible paid plans if you are moving contacts, suppression lists, templates and core automations from another tool.
Start with the signal, not the copy. Pick your leading indicator today, build the segment, and confirm it matches your product data before you write a single email.
FAQ
How many emails should a churn prevention sequence have? Three is usually enough: a value reminder, an objection-handling offer, and a low-friction exit like a pause or downgrade. More than that, without new information in each email, reads as pressure.
Should churn prevention emails come from a person or the brand? For high-value accounts, a named person (CSM or founder) gets better replies. For self-serve accounts, brand sending is fine. Either way, make the reply address monitored — a reply that goes nowhere is worse than no reply option.
What if I don't have product event data yet? Start with what you have: renewal date plus last email engagement, or a manual health tag your team updates. That is weaker than real usage data, but it is a working sequence you can improve once events are flowing.
How do I avoid annoying healthy customers? Gate every send on the risk segment and add exit conditions on the first sign of activity. If a customer logs in, they should leave the sequence immediately.
Can I pause a plan instead of cancelling? Offer it as an explicit option in the final email. A pause keeps the data and the relationship, and it is often an easier yes than a discount. Make sure your billing system actually supports the pause before you promise it.
Put this into practice in Mailerflow: create your first campaign or automation by telling the AI what you want. Start free.


