Voluntary vs. involuntary churn: what's the difference?
Churn has two completely different causes — and most SaaS dashboards don't separate them:
- Voluntary churn: the customer decided to cancel. They didn't get enough value, found a better product, ran out of budget, or just stopped needing what you built. The fix is product improvement, onboarding, or better customer success.
- Involuntary churn: the customer lost access not because they chose to leave, but because their payment failed. Expired card, bank declined the charge, insufficient funds. They still want your product — they just have a payment problem.
The fix for each is completely different. Voluntary churn requires changing your product or value delivery. Involuntary churn requires sending the right email at the right time with a link to update their payment method.
How to measure your involuntary churn rate
Before you can fix it, you need to know how much you're losing. In Stripe, you can find this in a few places:
Method 1: Stripe Dashboard
Go to Billing → Subscriptions and filter by Status: Incomplete or Past Due. These are subscriptions where a payment has failed and hasn't yet been retried or recovered. The count and total value here is your current involuntary churn exposure.
Method 2: Stripe Webhooks (programmatic)
Subscribe to the invoice.payment_failed webhook event. Each time this fires, it represents one involuntary churn risk. Log these events with timestamp and invoice value. Over 30 days:
- Involuntary churn rate = (payment_failed events × average invoice value) / MRR
- Recovery rate = payment_succeeded events following a prior failure / total payment_failed events
Method 3: Estimate with the industry benchmark
If you're not yet tracking this, assume 5–7% of your monthly charges are failing. For a $10,000 MRR SaaS, that's $500–700/month in revenue at risk every single month. For $50,000 MRR, that's $2,500–3,500.
Key insight
Involuntary churn is cumulative. If you lose $700/month and don't recover it, after 12 months you've lost $8,400 in annual revenue — from customers who never actually chose to cancel.
Why involuntary churn is hard to see
There are three reasons most founders don't realize how much involuntary churn they have:
- It looks like regular churn. When a subscription lapses due to a failed payment, it shows up in your churn rate alongside customers who intentionally cancelled. Without segmentation, you can't tell which is which.
- Stripe's default behavior is quiet. Stripe will retry the charge over the next 4–8 days using Smart Retries, but it won't proactively notify your customer with a clear, actionable message. Its built-in dunning emails are generic and often land in spam.
- The customer doesn't know either. Many payment failures happen because a card expired or a bank flagged an unusual charge. The customer didn't choose to cancel — they may not even know their payment failed.
The D+1 / D+3 / D+7 recovery sequence
The most effective way to reduce involuntary churn is a timed email sequence that:
- Contacts the customer within hours of the failure (not days)
- Gives them a direct link to update their payment method
- Escalates urgency with each follow-up
- Stops automatically the moment payment succeeds
Day 1 email — Within 2 hours of failure
Tone: Helpful, not alarming. Many customers don't know their payment failed. Keep it to 3–4 sentences. Include a one-click link to update their card (Stripe's customer portal or a Billing Portal session URL).
Subject: "Quick note about your [Product] payment"
Day 3 email — Gentle reminder
Tone: A bit more direct. Acknowledge it's been a few days. Remind them what they'll lose access to. Keep the card update link prominent.
Subject: "Still having trouble with your payment — easy fix here"
Day 7 email — Final notice
Tone: Specific about consequences. Name the exact date their account will be suspended. This email has the highest conversion rate because urgency is real and specific.
Subject: "Your [Product] account will be paused tomorrow"
Critical: the stop condition
Your sequence must stop the moment payment succeeds. Sending a "final warning" after a customer has already fixed their card is a trust-destroying experience. Subscribe to invoice.payment_succeeded and use it to halt the sequence immediately.
What recovery rates to expect
- 20–30% — Baseline with any automated sequence
- 30–40% — Typical with a well-configured D+1/D+3/D+7 sequence and good subject lines
- 40–60% — Top performers with personalised messaging, fast Day 1 timing, and failure-reason customisation (expired card vs. bank decline)
Speed matters more than almost anything else. Getting that Day 1 email out within 2 hours of the failure — rather than 24 hours later — can increase recovery rates by 15–20 percentage points.
Voluntary churn vs. involuntary churn: which to fix first?
Both matter, but involuntary churn has a higher immediate ROI because:
- The customer already wants your product — you're not trying to change their mind
- The fix is an email, not a product change
- Recovery can start within days of setup
- The cost of inaction is 5–9% MRR disappearing permanently every month
Voluntary churn requires understanding why people are leaving, product iteration, and better onboarding — a months-long process. Involuntary churn can be substantially reduced in a week with an automated email sequence.
Building it yourself vs. using a tool
Building yourself
- Subscribe to
invoice.payment_failedandinvoice.payment_succeededwebhook events - Track recovery status per subscription in your database
- Set up a cron job to trigger D+1, D+3, D+7 emails via a transactional email provider (Resend, Postmark)
- Generate Stripe Billing Portal session URLs for each customer
- Handle edge cases: customer cancels during recovery, card permanently invalid, email bounces
Build time: 1–2 days. Ongoing maintenance required.
Using RecoverKit
RecoverKit connects to Stripe via OAuth and runs the entire D+1/D+3/D+7 recovery sequence automatically. No code required. Takes 3 minutes to set up. Free during beta.
Other ways to reduce involuntary churn
Beyond the recovery email sequence, these tactics also help:
- Enable Stripe Smart Retries: Stripe's ML-powered retry system picks the optimal time to retry failed charges. It's enabled by default for subscription invoices but worth verifying in your billing settings.
- Use card updater services: Card networks (Visa, Mastercard) provide account updater services that automatically update card details when a customer gets a new card number. Stripe supports this automatically for most cards.
- Collect backup payment methods: During onboarding, encourage customers to add a backup card. This reduces failure rates at the source.
- Send pre-expiry reminders: If you know a card will expire before the next billing date (Stripe expiry data is available in the PaymentMethod object), send a reminder 30 days before.