Retention

SaaS churn prevention: how to reduce customer churn

Most churn is decided long before someone clicks cancel. Here's how to measure it properly, find out why customers leave, notice when usage drops, and follow up in a way that helps rather than nags.

Published 9 min read

On this page
  1. Why customers leave SaaS products
  2. Measure churn correctly
  3. Ask customers why they leave
  4. Spot declining engagement before customers cancel
  5. Scheduled cancellations: the last good window
  6. Follow up thoughtfully
  7. Measure whether it’s working
  8. A churn prevention checklist

Quick answer

To reduce SaaS churn: measure it properly (customer churn, revenue churn and voluntary vs involuntary), ask every cancelling customer why, watch for paying customers whose usage drops below their own normal, fix failed payments, and follow up personally while there's still time. The biggest gains usually come from onboarding and the product itself. Emails help at the margins.

Why customers leave SaaS products

Churn has a handful of root causes. Most products have two or three that dominate.

They never got to the value

A customer signs up, pokes around, and never does the thing your product is for. They might keep paying for a month or two out of good intentions, then cancel. This is an onboarding problem, and it’s often the largest source of early churn.

Adoption stalled

They got started, but only one person on the team uses it, or they only use a small part of it. When budgets get reviewed, a tool that one person opens occasionally is easy to cut.

The product doesn’t do what they need

Either a feature is missing, or they’ve outgrown you. Some of this churn is healthy. You can’t be everything to everyone, and it’s useful to know which features would have kept which customers.

Price doesn’t match value

“Too expensive” usually means “not worth it to me right now”. Sometimes the price really is wrong. More often the customer isn’t getting enough out of the product to justify it, which loops back to adoption.

Support let them down

A bug that went unanswered, or a slow reply at a bad moment. These cancellations often come with an angry comment, which at least makes them easy to spot.

Their situation changed

The business closed, the project ended, the season finished, the person who championed you left. You can’t prevent most of these, but you should count them separately so they don’t hide the churn you can.

Payments failed

Not every lost customer decided to leave. Expired cards and declined renewals are their own category with their own fixes. See involuntary churn.

Measure churn correctly

You can’t tell whether anything works without a stable measurement. Three numbers cover most of what you need:

Customer churn rate = customers who churned in the period ÷ paying customers at the start

Gross MRR churn rate = (churned MRR + contraction MRR) ÷ MRR at the start

Net revenue retention = (starting MRR + expansion − contraction − churn) ÷ starting MRR

Count only customers who were paying at the start of the period. New customers from that month belong in next month's starting number.

Example

You start the month with 200 paying customers and $10,000 MRR. During the month, 8 customers cancel ($360 MRR), some downgrade (−$90) and some upgrade (+$400).

Customer churn = 8 ÷ 200 = 4%

Gross MRR churn = ($360 + $90) ÷ $10,000 = 4.5%

Net revenue retention = ($10,000 + $400 − $90 − $360) ÷ $10,000 = 99.5%

Each one tells you something different. Customer churn says how many people leave. Revenue churn says how much money leaves, which matters more if your plans vary a lot in price. Net revenue retention says whether your existing customers, taken together, are growing or shrinking.

A few habits keep the numbers honest:

  • Split voluntary from involuntary churn. They have different causes and different fixes.
  • Keep scheduled cancellations separate from completed churn. A customer who’s cancelled but still in their paid period hasn’t churned yet. They’re your best chance to change someone’s mind.
  • Look at churn by cohort. If customers who joined in March churn far more than those who joined in January, something changed in between: your marketing, your onboarding, or your product.
  • Don’t change definitions mid-stream. See what is MRR for the choices that affect churn.

Ask customers why they leave

The cheapest churn research you’ll ever do is asking every cancelling customer one question: what’s the main reason you’re leaving?

Keep it short:

  • One question, with four to eight answers such as “too expensive”, “missing a feature I need”, “not using it enough”, “switched to another tool”, “technical problems” and “other”.
  • An optional comment box. The comments are often more useful than the answers.
  • Ask at the moment of cancellation, or in an email straight after. Response rates drop quickly with time.
  • Read the answers monthly, in aggregate. One customer’s reason is an anecdote. Thirty customers choosing “not using it enough” is a roadmap.

When someone leaves a detailed comment, reply personally. Some will tell you more. A few will stay.

Spot declining engagement before customers cancel

By the time someone cancels, they’ve usually stopped getting value weeks earlier. Usage data lets you see that drift while there’s still time to help.

Choose the activity that matters

Most products have one or two actions that represent the value customers pay for. Pick those, not page views or logins.

ProductKey activityEngagementMostly noise
Invoicing appInvoice sentClient addedLogged in
Event ticketing appEvent published, tickets soldEvent draft editedSettings page viewed
Analytics toolReport shared with a teammateDashboard viewedPassword reset
Shopify appFeature used on a live orderApp opened in adminApp installed

Logins are a weak signal. Someone can log in every day and get nothing done, or log in once a month and get exactly what they pay for.

Compare each customer with their own normal

A customer who normally uses your product five days a week and hasn’t completed a key action in two weeks is worth a look. A customer who has always used it twice a month and was quiet for two weeks isn’t.

Comparing everyone with an average flags light users forever and misses heavy users who are fading. Compare each customer with their own history instead.

A drop is a warning sign, not a verdict

Example

An event organizer has published events and sold tickets almost every weekday for six months. For the last 14 days, there’s been no key activity.

That’s worth noticing. It isn’t proof they’re about to cancel. They might be on vacation, between seasons, or using a different account. Treat it as a reason to check in, not as a prediction.

Compare that with a customer who has scheduled a cancellation. That’s an explicit decision. Usage signals are guesses about intent. A scheduled cancellation is the intent, stated. They need different responses, covered below.

Avoid false positives

A warning system that cries wolf gets ignored. A few rules help:

  • Wait for enough history. Don’t judge a customer who started last week.
  • Match your product’s rhythm. Daily-use tools can be judged over days. Monthly reporting tools need weeks. Seasonal products, such as ticketing for summer festivals or tax software, need to be compared with the same time last year, or paused off-season.
  • Watch for problems on your side. If events stop arriving from every customer at once, it’s probably your tracking that broke, not your customer base.
  • Let people snooze and dismiss. “On vacation” or “seasonal, expected” are useful answers, and recording them shows which rules are noisy.

Track events from your server

Track key activity from your backend rather than the browser. Server-side events aren’t blocked by ad blockers, you only send what matters, and you don’t need personal data. With a lightweight SDK it’s a couple of calls:

import { OneMRR } from "@onemrr/node";

const onemrr = new OneMRR({ apiKey: process.env.ONEMRR_API_KEY });

// Once per account: link your account ID to its billing customer.
await onemrr.identify({
  accountId: "org_42",
  source: "stripe",
  externalCustomerId: "cus_123",
});

// Whenever something meaningful happens.
onemrr.track({ accountId: "org_42", event: "invoice_sent" });

That example uses OneMRR’s Node.js SDK, which sends only the account ID, the event name and its time. The same pattern works with any analytics tool you already run on your server.

Scheduled cancellations: the last good window

When a customer cancels “at the end of the period”, they’re still a paying customer until that date. In Stripe, that’s a subscription with cancel_at_period_end set. It’s the clearest signal you’ll get, and the last moment to respond to it.

What tends to work:

  • Ask why, if you don’t know already. The answer decides everything else.
  • Fix the actual problem if you can. A bug, a missing setting, a misunderstanding about a feature.
  • Offer a smaller plan or a pause if the reason is price or seasonality. Don’t lead with a discount for every reason. It teaches customers that cancelling gets them a better price.
  • Respect the decision. One thoughtful message, not a sequence. If they leave anyway, make it easy and leave the door open.

Note that analytics tools disagree about when a scheduled cancellation leaves MRR. Some remove it straight away, others when the paid period ends. Either is fine as long as scheduled cancellations are visible somewhere, because the MRR you’re about to lose is the MRR you can still save.

Follow up thoughtfully

Automated “we miss you” emails are easy to set up and easy to ignore. A few principles make follow-ups more useful:

  • Write like a person. Plain language, from someone’s name, with a reply address that a person reads.
  • Be specific. Refer to what they actually do in your product.
  • Ask a question. “Is anything getting in the way?” invites a reply. “Check out our new features!” doesn’t.
  • Offer help before money. A setup call or a fix is cheaper than a discount and builds more trust.
  • Review before you automate. Send drafts by hand until you trust the rules that trigger them, then automate the ones that work.
  • Cap the frequency. One email per signal. Don’t email someone who has asked to cancel as if they were merely quiet.

Example check-in

Subject: Quick check on your events

Hi Sam, I noticed you haven’t published an event in a couple of weeks, which is unusual for you. Is anything getting in the way, or just a quiet patch? If something isn’t working the way you need, reply and I’ll take a look.

No email will save every customer, and some of the people you contact were never going to leave. That’s fine. The point is to reach the ones who were drifting while they’re still deciding.

Measure whether it’s working

Retention work is easy to feel good about and hard to prove. Measure outcomes, not activity:

  • For each signal, record what happened after a fixed window: cancelled, activity recovered, still subscribed, or dismissed.
  • Compare contacted and not-contacted customers, but treat it as a correlation. You chose who to contact, so the groups aren’t random.
  • If you have the volume, hold some back. Leave a small random group without outreach and compare churn. It’s the only way to know whether the emails caused anything.
  • Watch the false-alarm rate for each rule. A rule that’s mostly dismissed needs a higher threshold or a different event.
  • Check churn by cohort over months, not weeks. Real improvements show up slowly.

A churn prevention checklist

  1. Calculate customer churn, revenue churn and net revenue retention the same way every month.
  2. Split churn into voluntary and involuntary, and set up payment retries and card-update emails.
  3. Add a one-question cancellation survey and read the results monthly.
  4. Pick one or two key events that represent value, and track them from your server.
  5. Flag paying customers whose key activity drops well below their own normal.
  6. Keep scheduled cancellations visible and respond to each one personally.
  7. Start with reviewed, personal follow-ups. Automate only what works.
  8. Measure outcomes for every signal, and adjust the rules that cry wolf.

OneMRR covers several of these: Churn Signals for usage drops, cancellation feedback when customers cancel, and scheduled cancellations with the MRR still at stake. Automatic cancellation emails need a confirmed cancellation and the customer’s email address. Stripe provides both. Shopify apps send customer emails through OneMRR’s API, and Wix cancellations are estimated, so Wix uses a survey link you send yourself.

Sources

  1. Stripe: Cancel subscriptions
  2. ChartMogul: Understanding MRR movements
  3. OneMRR docs: Set up Churn Signals
  4. OneMRR docs: Scheduled cancellations
  5. OneMRR docs: Cancellation feedback
  6. OneMRR docs: Retention and cohorts