How to reduce SaaS churn

Reduce SaaS churn when you have only a handful of customers: turn on failed-payment retries, card emails and cancellation reasons in your billing tool today, ask everyone who cancels why within 24 hours, message every customer who goes quiet for 7 days, offer a yearly plan in month 2 or 3, and fix the top reason people leave every Sunday.

ByDinesh BypillaReviewed byMurali SidLast checked 20 min read

You won your first paying customers, and now some of them leave: a card fails and the account cancels itself, someone stops logging in, someone clicks cancel without a word. Here is how to reduce SaaS churn when you have 2 to 20 customers: let your billing tool save the failed cards, talk to every customer who goes quiet or cancels, and fix the reason most people give. If you do nothing, every new customer you win only replaces one you lost, and your MRR stays flat.

Do these three things

About 2 hours today, then 30 to 45 minutes a day plus the calls you book. Write every message yourself until you have about 100 paying customers, and judge each fix after the next 10 cancellations.

Show the three actions in full
  1. Today: turn on failed payment retries, card reminders and cancellation reasons in your billing tool, so a failed card no longer cancels a customer who wants to stay. Then email everyone who has ever cancelled and ask why, as a short, personal win-back email.
  2. Every day: send a personal message to every paying customer who has not used your product in 7 days, and email every person who cancels or whose payment fails within 24 hours. If they do not answer, follow up twice, on day 3 and day 7. AI drafts each one; you add one true line about them.
  3. Every Sunday: count customers kept, lost by choice and lost to failed payments, and fix the reason most people gave. Judge each fix after the next 10 cancellations, not after one week.

Get help doing these

ChatGPT or Claude reads this guide and works through it with you.

1. List every paying customer, who left and why

Make one sheet with a row for every customer who has ever paid you: when they started, their plan, the last time they used your product, and, if they left, when and why. With fewer than 30 customers you can see each one, and churn is a list of names, not a percentage.

Churn has two kinds, and they need different fixes. Involuntary churn is a customer lost because a payment failed: an expired card, a new card number, a bank that said no. Voluntary churn is a customer who chose to cancel. In Recurly's July 2026 network data, about a third of SaaS churn was failed payments. Mark which kind each lost customer was, because step 2 fixes the first and steps 3 and 4 fix the second.

Fill the sheet from your billing tool. In Stripe, open Billing, then Subscriptions, set the status filter to all, and click Export. Add the last time each customer did your main action, the one thing that shows your product working for them. That is your first win. Your database has it, or track it as an event in PostHog, free up to 1 million events a month with no card. ChatGPT or Claude can write the database query if you paste in your table names.

The customer sheet
Customer | Email | Plan (monthly or annual) | Price | Started | Where they came from | Last did the main action | Status (paying, card failed, cancelled) | Left on | Why they left, in their words | Last message from you

The "Where they came from" column comes from self-reported attribution and your UTM parameters, and it matters later. If most people who leave came from one channel, that channel brings the wrong buyers. Keep the sheet in Google Sheets until it gets slow, then move it to a CRM.

  • Tool: your billing tool's export, Google Sheets, and your database or PostHog. Free.
  • Time: 1 hour.
  • You will have: one row for every customer who ever paid, with their last use and, for each one who left, failed payment or chose to leave.
  • It worked if: every customer is in the sheet, and you can say for every lost customer which kind of churn it was.
  • Common mistake: working out a churn rate with 6 customers. One cancellation is 17%, and the number tells you nothing. Count names until you have 30 customers. The other mistake is counting a failed card as "they didn't like it". Many of those people wanted to stay.

See it done: Bugmoth's customer sheet, first rows

Bugmoth is a made-up bug-reporting tool for small web teams. It costs $19 a month per team, with a 14-day trial.

Customer sheet

CustomerPlanLast did the main actionStatusWhy they left
Ana, 5-person agencyMonthly2 days agoPaying
Priya, 3-person studioMonthly12 days agoPaying
Dana, 4-person agencyMonthly4 days agoCard failed
Leo, 2-person studioMonthly26 days agoCancelledPortal: "It's too expensive"

Why it works: One look shows a card to fix, a customer to message today, and a reason to read, three different jobs.

2. Turn on failed payment retries and card reminders

Set your billing tool to try a failed payment again several times, to email the customer a link to fix their card, and to pause the account instead of cancelling it. Then email every customer whose payment fails yourself, within 24 hours. This is called dunning, and it saves customers who never meant to leave.

If you use Stripe Billing, set it up once. All of it is included in Stripe Billing's 0.7% fee.

  1. 1

    Turn on Smart Retries

    Open Billing, then Revenue recovery, then Retries. Turn on Smart Retries and keep Stripe's recommended setting, 8 tries within 2 weeks. Stripe picks the best times to try the card again.

  2. 2

    Pause instead of cancel

    On the same page, under Subscription status, find "If all retries for a payment fail". Choose "Pause the subscription" if your account offers it (it needs Stripe's newer flexible billing mode). If it does not, keep "Cancel the subscription" and rely on your own email below. A paused account keeps the customer's work and starts again when they pay.

  3. 3

    Turn on the customer emails

    Turn on "Send emails when card payments fail" and "Send emails about expiring cards", which goes 1 month before a saved card expires. Choose "Link to a Stripe-hosted page", so every email has a link where the customer can add a new card. Stripe also updates many saved cards by itself when the bank issues a new one, mostly in the US.

  4. 4

    Check it works

    Stripe does not send these emails in a sandbox unless the address is on your own verified email domain or belongs to a team member. Test with one of those addresses.

If you use Lemon Squeezy: it already tries a failed payment 4 times over 2 weeks and emails the customer each time. Open Settings, then Recovery, to edit the emails. If you use Paddle: it tries up to 7 times over 30 days by default; emails come with its separate Payment Recovery option.

The billing emails are not enough on their own. Many people ignore a payment email from a company. They answer one from a person. On the day a payment fails, send the personal email below from your own address. Paste the customer's name and what they did in your product last week into ChatGPT or Claude with the template, check the draft, and send it. Send it from a domain with SPF and DKIM set up, so it reaches the inbox. In Stripe, the Revenue recovery overview lists "Top customers in recovery": check it every day.

The email when a payment fails
Subject: Your [product] payment didn't go throughHi [first name],Your [product] payment of [price] didn't go through today. It's usually an expired or replaced card.You can add a new card here in a minute: [link to update the card]Nothing changes in the meantime. [What they did last week, in one line: "Your 3 projects and last week's reports are all still there."]If something else is going on, just reply.[Your first name]Follow-up 1 (day 3): Hi [first name], just checking you saw this. The link to update your card is here: [link]
Follow-up 2 (day 7): Hi [first name], your account pauses on [date] if the card isn't updated. Your work stays saved. [link]
  • Tool: Stripe Billing (or Lemon Squeezy or Paddle), Gmail, and ChatGPT or Claude to draft.
  • Time: 30 minutes, once. Then about 3 minutes for each failed payment.
  • You will have: retries, card emails and pause-not-cancel switched on, and a personal email to every customer whose payment fails.
  • It worked if: no customer is cancelled on the first failed attempt, and every failed payment in the last 90 days has had a personal email from you. In Stripe's Revenue recovery overview, most failed payments should move to "Recovered", not "Not recovered".
  • Common mistake: cancelling the account on the first failed payment, or sending billing emails from a no-reply address. A customer who replies "new card, sorry" to a no-reply address is lost.

3. Ask every customer who cancels why within 24 hours

Within 24 hours of a cancellation, email the customer yourself and ask one question: what made you cancel? Today, send the same email to everyone who has ever cancelled. Their answers tell you what to fix, and some of them come back.

First, let your billing tool collect a reason. In Stripe, open Settings, then Customer portal, then Cancellations. "Cancel subscription" and "Cancellation reason" are on by default. Keep both on, and pick the reasons people see: "It's too expensive", "I need more features", "I found an alternative", "I no longer need it", "Ease of use was less than expected" and "Other reason". You can read each answer on the customer's subscription page.

Keep cancelling easy. A customer who signed up online must be able to cancel online, in a few clicks. If you show an offer, put a clear cancel button right next to it. California has required that since 1 July 2025 for subscriptions sold to consumers, and the US Federal Trade Commission still takes action against companies that make cancelling hard. A hidden cancel button also turns a lost customer into an angry review on G2.

A portal reason is one click. Your email gets the real story. Send it within 24 hours, from your own address, like any personal message. Offer a 15-minute call. On the call, use the questions from a customer interview: what were you hoping it would do, what happened instead, what will you use now? Write every answer in your sheet, in their words. This is the most useful feedback from your first users you will get.

The email after someone cancels
Subject: Quick question about [product]Hi [first name],I saw you cancelled [product] [today / on date]. Thanks for giving it a try. I'm [your name], one of the founders.Could you tell me what made you cancel? One line is perfect, and I read every answer.[Only if their reason fits one of the offers below: one offer, in one sentence.]If it's easier to talk, here are 15 minutes on my calendar: [booking link][Your first name]

Match the offer to the reason, and make only one. In Churnkey's 2024 data from about 3 million cancellations, "budget" and "infrequent usage" were the top two reasons, about a third each.

  • If they said "too expensive": offer to pause their billing for 1 or 2 months, or a smaller plan if you have one. In Stripe, open the subscription, click the ⋯ menu, choose "Pause payment collection", set "Until a custom date" and "Void invoices". Do not offer a discount to everyone; one or two price answers are not a reason to change your price.
  • If they said they did not use it enough: offer a 15-minute call to set up the main action together, like a short product demo in their account.
  • If they need a feature: ask what it is and what they would use it for. Write it down. Do not promise it. If you build it later, tell them.
  • If they found an alternative: ask which one and what it does better. That answer goes into your competitor analysis, and into your alternatives page for that tool.
  • If they no longer need it: thank them, and ask if they know another team who has the problem now. Customers who leave on good terms still send referrals.

Stripe's portal can also show a retention coupon to everyone who cancels. Leave it off for now. You learn more from the reasons, and a discount for everyone lowers your MRR without fixing anything.

  • Tool: Stripe's customer portal (or your billing tool's cancel page), Gmail, a booking page such as a free Google Calendar appointment schedule, and your sheet.
  • Time: 1 hour today for everyone who has already cancelled. Then about 5 minutes for each cancellation, plus 15 minutes for each call.
  • You will have: a reason for every cancellation, in the customer's words, and one offer made where the reason fits.
  • It worked if: at least 1 in 3 people reply with a reason. If fewer do, cut the email to the one question.
  • Common mistake: a survey link with 8 questions, or arguing with the reason. One plain question from a founder gets answers. A form gets ignored.

See it done: Bugmoth's email to Leo after he cancelled

To: Leo, who runs a 2-person studio and picked 'It's too expensive' when he cancelled

Subject: Quick question about Bugmoth

Hi Leo,

I saw you cancelled Bugmoth today. Thanks for giving it a try. I'm Sam, one of the founders.

You picked "too expensive". Could you tell me a bit more? Was it the price itself, or that you didn't use it enough to be worth $19?

If it's a quiet month for client work, I can pause your billing for 2 months instead, and your projects stay as they are. Just reply "pause".

Sam

Why it works: It answers the reason he gave in the portal with one offer, and still asks for the real story.

4. Message every paying customer who has not used your product in 7 days

Every day, find every paying customer who has not done your main action in the last 7 days, and send each one a short personal message. "Not using it enough" is one of the two most common reasons people give when they cancel. A message the week they go quiet reaches them before they decide.

Make the list once, and it fills itself every day. In PostHog, open People, then Cohorts, and click "+ New Cohort". Add "Did not complete event or action", pick your main action, and set "in the last 7 days". Add a filter for paying customers. Dynamic cohorts refresh every 24 hours. If you do not use PostHog, ask ChatGPT or Claude to write a database query for the same list.

Then, every day:

  1. Open the list. For each new name, look at what they did last: which feature, how much, when.
  2. Paste that into ChatGPT or Claude with the template below and ask for a draft. Make the first line true and about them. About 3 minutes a message.
  3. If they do not reply, follow up twice, on day 3 and day 7, as replies in the same thread. Stop when they reply, use the product again, or say no.
  4. Offer a 15-minute call to anyone who says they are stuck. On the call, fix the problem together, the way you would on a discovery call: listen first, then show them.

Also watch the first 30 days of every new customer. Most people who leave early never got set up properly. Offer every new paying customer a 15-minute setup call in their first week, and check they did the main action at least twice in their first 2 weeks. Your onboarding emails can cover the rest.

The message to a quiet customer
Subject: [their company] and [product]Hi [first name],[One true line about what they did: "You set up 3 projects in [product] last month."]I noticed nobody on your team has [done the main action] for about [N] days. Is something in the way, or is it just a quiet month?If it would help, I can fix the setup with you in 15 minutes: [booking link][Your first name]
  • Tool: PostHog's free plan or a database query, Gmail, and ChatGPT or Claude to draft.
  • Time: 15 minutes to build the cohort, then about 15 minutes a day plus 3 minutes a message.
  • You will have: a message to every paying customer the day they hit 7 quiet days, and a note in your sheet of what each one said.
  • It worked if: at least 1 in 3 quiet customers reply or do the main action again within 7 days. If fewer do, make the first line more about what they did, and ask one plain question.
  • Common mistake: an automatic "We miss you!" email to everyone. It reads like a robot and gets no reply. The other mistake is waiting until they cancel. By then the decision is made.

If your product is used once a month by nature, like invoicing or a monthly report, use "in the last 35 days" instead of 7.

See it done: Bugmoth's message to Priya

To: Priya, who runs a 3-person studio and has had no client bug report for 12 days

Subject: your client sites and Bugmoth

Hi Priya,

You added Bugmoth to 2 client sites last month, and the bakery site sent 4 reports.

Nothing has come in for about 12 days. Is the button still on the sites, or is it just a quiet month?

If it would help, I can add it to your newer client sites with you in 15 minutes: [booking link]

Sam

Why it works: It names what she did, asks one easy question, and offers help instead of a feature list.

5. Offer an annual plan to monthly customers in their second or third month

Every day, check which monthly customers are 45 to 75 days in and still using your product each week, and offer each one a yearly plan with 2 months free. Customers on yearly plans stay longer, which raises their lifetime value, and you get a year of cash up front.

ChartMogul's billing report (May 2025, 2024 data) found that for products under $25 a month, 62% of customers on yearly plans stayed, against 41% on monthly plans. Its December 2025 report advises asking monthly customers to switch around months 2 to 3, once they use the product.

Set it up once in Stripe. Add a yearly price to your product, at 10 times your monthly price. If you plan to raise your prices soon, do it first, so the yearly price starts from the new one. Then open Settings, then Customer portal, and turn on "Switch plan", so customers can move to the yearly price themselves. Add the yearly price to your pricing page too. Turn on "Send emails about upcoming renewals", so every yearly customer gets a reminder before the next year's charge. A surprise yearly charge brings refund requests and angry reviews.

Offer it only to customers who did the main action at least once a week in the last month. Asking a quiet customer to pay for a year reminds them to cancel. Send them the step 4 message instead.

The yearly plan offer
Subject: [product] for a year, 2 months freeHi [first name],[One true line: "Your team has sent 40 reports through [product] since [month]."]If you plan to keep using it, you can switch to yearly: [yearly price] a year instead of [12 × monthly price]. That's 2 months free. You can switch in a minute here: [link to the customer portal]No pressure at all. Monthly stays exactly as it is.[Your first name]
  • Tool: Stripe (a yearly price, "Switch plan" and renewal reminders in the customer portal), Gmail.
  • Time: 30 minutes, once. Then about 3 minutes a message.
  • You will have: a yearly price, a way to switch in the portal, and an offer sent to every active monthly customer in month 2 or 3.
  • It worked if: at least 1 in 5 customers you ask switch to yearly. If none do after 10 offers, ask two of them why; the price gap may be too small, or they are not sure yet.
  • Common mistake: offering yearly to everyone on day 1, before they have seen the product work. Wait until they use it every week. A free trial is where they decide to pay; month 2 or 3 is where they decide to stay.

See it done: Bugmoth's yearly offer to Ana

To: Ana, who runs a 5-person agency, 60 days into her monthly plan

Subject: Bugmoth for a year, 2 months free

Hi Ana,

Your clients have sent 31 bug reports through Bugmoth in the last 2 months, all with screenshots.

If you plan to keep using it, you can switch to yearly: $190 a year instead of $228. That's 2 months free. You can switch in a minute here: [link]

No pressure at all. Monthly stays exactly as it is.

Sam

Why it works: It starts with what her team already got from Bugmoth, and the saving is in dollars, not a percentage.

6. Count churn every Sunday and fix the top reason customers leave

Every Sunday, write one row: customers at the start of the week, new customers, customers lost by choice, customers lost to failed payments, and customers saved. Then pick the reason most people gave for leaving, and fix that one thing.

The Sunday row
Week | Customers at start | New | Left by choice | Lost to failed payment | Saved (paused, card fixed, came back) | Quiet customers messaged | Top reason given

Once you have 30 or more customers, work out your monthly churn rate too: customers lost this month divided by customers at the start of the month. Before 30, count names. Then use these rules, in this order, once you have reasons from the last 10 people who left:

  1. Most were lost to failed payments: check every setting in step 2 is on, and send your personal email the same day the payment fails.
  2. Most never did the main action, or stopped in the first 30 days: the problem is setup, not loyalty. Fix the first steps with improving your activation rate, and offer a setup call to every new customer.
  3. Most said they did not use it enough: send the step 4 message sooner, at 5 days instead of 7, and look at what the people who stay do every week.
  4. Most said it is too expensive: read their words before you touch the price. If they are small teams who barely used it, the price is not the problem. If they used it and still said it costs too much, test a smaller plan for new customers using how to price a SaaS product.
  5. Most need a missing feature: build it only if 3 or more customers asked for the same thing. Building what one customer asked for is a common mistake for a technical founder. If it is a link to a tool they already use, an integration may be the fix.
  6. Most were the wrong kind of customer: they were never a good fit. Change who you market to: rewrite your ideal customer profile and your value proposition, and look at which channel they came from.

When you fix a reason, email everyone who left for it and tell them, in one line, with a link to come back. That is the best win-back email you can send. Change one thing at a time, and judge it after the next 10 cancellations. At this size, skip A/B tests: you do not have the numbers.

Churn also changes your other numbers. A customer who stays 4 months is worth far less than one who stays 2 years, so your lifetime value sets how much you can spend to win one: put both in your customer acquisition cost sums. Once a month, put the Sunday rows into your monthly marketing review. Your happiest long-time customers are the right ones to ask for a testimonial or a case study.

  • Tool: your customer sheet.
  • Time: 20 minutes every Sunday.
  • You will have: one row a week, the top reason customers leave, and one fix to work on.
  • It worked if: you can say, for the last 10 people who left, why each one left, and fewer of the next 10 leave for the reason you fixed.
  • Common mistake: changing the price, the onboarding and the emails in the same week. Then you cannot tell what worked. The other mistake is chasing new customers while the same reason keeps losing old ones. If almost nobody leaves and you still do not grow, churn is not your problem: get growth moving again instead.

See it done: Bugmoth's Sunday row

The Sunday row

WeekCustomers at startNewLeft by choiceLost to failed paymentSavedQuiet customers messagedTop reason given
1401 (Leo)01 (Dana's new card)1 (Priya)"Too expensive" (1)

The decision: Dana's card failed but she added a new one after the personal email, so she counts as saved, not lost. Leo is the only reason so far. Sam writes it down, sends the step 3 email, and changes nothing until 10 people have said why they left.

Why it works: One reason is not enough to change anything, so they keep asking and wait for 10 before they fix one thing.

Your churn checklist for the next 3 months

0 of 13 done

Work through this list with an AI assistant

It drafts the work and keeps track of what is done.

Step 1 · List every paying customer, who left and why

Step 2 · Turn on failed payment retries and card reminders

Step 3 · Ask every customer who cancels why within 24 hours

Step 4 · Message every paying customer who has not used your product in 7 days

Step 5 · Offer an annual plan in month two or three

Step 6 · Count churn every Sunday and fix the top reason

Frequently asked questions

What is a good churn rate for SaaS?

For a young SaaS, losing 3 to 5% of customers a month is typical: CRV, a venture firm, gave that range in June 2026 for companies under $1 million ARR, a year of revenue. But with fewer than 30 customers, one cancellation moves the rate by several points. Count names, read the reasons, and work out a churn rate once you have 30 customers.

How do you calculate churn rate?

Take the customers who left during the month and divide by the customers you had on the first day of the month. If you started with 40 and 2 left, that is 5%. Leave out customers who joined during the month. Revenue churn uses the same sum with MRR instead of customers.

Should I offer a discount when someone cancels?

Not to everyone. Ask why first. A discount helps only when the price is the real reason and they still use the product. For "too expensive", a 1 or 2 month pause often fits better. For "didn't use it", offer a setup call. Make one offer, with a clear cancel button next to it, and write down what they chose.

How do I reduce churn in the first 30 days?

Early churn is almost always setup. Offer every new customer a 15-minute setup call in the first week, check they do the main action at least twice in the first 2 weeks, and message anyone who goes quiet for 7 days. The full method is in improving your activation rate and turning free trials into paying customers.

Do I need a churn tool like Churnkey?

Not yet. Churnkey starts at $250 a month, billed yearly, in October 2026, which is more than many young SaaS products earn. Stripe Billing already includes retries, card emails, cancellation reasons and a retention coupon, and a sheet plus your own emails covers the rest. Look at a paid tool once you lose more customers a month than you can email yourself.

Sources

  1. 1.Automate payment retries — Stripe Docs, checked 12 October 2026
  2. 2.Pause subscriptions after payment failure — Stripe Docs, checked 12 October 2026
  3. 3.Automate customer emails — Stripe Docs, checked 12 October 2026
  4. 4.Revenue recovery analytics — Stripe Docs, checked 12 October 2026
  5. 5.How cards work: automatic card updates — Stripe Docs, checked 12 October 2026
  6. 6.Add a cancellation page to the customer portal — Stripe Docs, checked 12 October 2026
  7. 7.Configure the customer portal — Stripe Docs, checked 12 October 2026
  8. 8.Pause payment collection — Stripe Docs, checked 12 October 2026
  9. 9.Stripe Billing pricing — Stripe, checked 12 October 2026
  10. 10.Recovery and dunning — Lemon Squeezy Docs, checked 12 October 2026
  11. 11.Automatic payment failure retries for all Paddle Billing users — Paddle Developer changelog, 9 January 2025
  12. 12.PostHog pricing — PostHog, checked 12 October 2026
  13. 13.Cohorts — PostHog Docs, checked 12 October 2026
  14. 14.Churn rate benchmarks (July 2026 data) — Recurly, checked 12 October 2026
  15. 15.Billing is the invisible force behind your growth — ChartMogul, 18 May 2025
  16. 16.The SaaS Retention Report: The AI churn wave — ChartMogul, 10 December 2025
  17. 17.State of Retention 2025 — Churnkey, updated 11 September 2026
  18. 18.Churnkey pricing — Churnkey, checked 12 October 2026
  19. 19.SaaS churn rate benchmarks for investors — CRV, 19 June 2026
  20. 20.California Automatic Renewal Law amendments take effect on July 1, 2025 — Cooley, 4 June 2025
  21. 21.FTC revives click-to-cancel rule: new risks for subscription businesses — Jones Day, May 2026

Next article to read

How to raise prices without losing customersOnce customers stay, this shows how to charge what the product is worth.Read it next

Guides that link here

Cite this page

Dinesh Bypilla (2026). How to reduce SaaS churn. Scout7 Academy. https://scout7.ai/academy/retention/how-to-reduce-saas-churn

Written by Dinesh Bypilla, Agentic systems engineer at Scout7. Reviewed by Murali Sid. Last checked 12 October 2026.

Quote any part of this guide with a link back to this page. © 2026 Scout7.

Markdown version of this page: https://scout7.ai/academy/retention/how-to-reduce-saas-churn.md