You are probably losing customers right now and you do not even know it.
Involuntary churn happens when a customer wants to keep paying you but their payment fails. Their card expired. Their bank flagged the transaction. They hit their credit limit. The subscription cancels automatically. The customer never even knew it happened.
This is different from voluntary churn, where a customer actively decides to leave. Involuntary churn is silent. It shows up as a slowly declining MRR number that nobody can explain.
How Bad Is It Really?
Industry data puts involuntary churn at 20-40% of total churn for most SaaS companies. For a typical B2B SaaS with 5% annual voluntary churn, involuntary churn adds another 2-4% on top.
Here is the math for a $50K MRR company:
- 9% annual involuntary churn rate
- $4,500/month in lost revenue
- $54,000/year walking out the door
- Most of it recoverable with the right system
At $10K MRR the numbers are smaller but the percentage is the same. You lose $900/month. Over a year that is $10,800 you earned and then lost to a credit card expiration date.
The Three Causes
1. Expired cards (40-50% of failures)
Credit cards expire every 3-4 years. At any given time, roughly 3% of your customer base has a card that will expire this month. If you do not warn them before the expiry date, the next charge fails.
Some payment processors (Stripe, Braintree) support automatic card updater networks that silently update expired card numbers. This catches about 60% of expired cards. The other 40% need a manual update from the customer.
2. Insufficient funds (25-35% of failures)
The customer's card is valid but they do not have enough balance or credit. This is common with debit cards and cards near their limit. Retrying the charge a few days later often works because the customer has deposited money or paid their credit card bill.
3. Bank declines (15-25% of failures)
The issuing bank blocks the transaction. This can happen because of fraud detection algorithms, international transaction blocks, or bank-side technical issues. These are the hardest to recover because the customer needs to contact their bank.
What Actually Works
Stripe Smart Retries (Automatic)
If you use Stripe, turn on Smart Retries. It uses machine learning to pick the optimal time to retry a failed charge based on historical success patterns. This alone recovers about 15-20% of failed payments with zero effort from you.
Go to Stripe Dashboard > Settings > Billing > Subscriptions > Smart Retries. Toggle it on.
Pre-expiry warnings (Proactive)
Stripe sends a customer.source.expiring webhook event 30 days before a card expires. Most SaaS companies ignore this event entirely.
Set up a simple email that fires on this event: "Hey, your card ending in 4242 expires next month. Update it here to avoid any interruption: [link to billing portal]"
This is the highest-ROI intervention because you reach the customer while everything is still working. No failed payment. No disruption. Just a friendly heads up.
Dunning emails (Reactive)
When a payment fails, send a sequence of emails asking the customer to update their payment info:
- Day 0: "Your payment failed. Update your card here." (Friendly, informative)
- Day 3: "Your subscription is at risk. Update your payment to keep access." (Urgency)
- Day 7: "Last chance before your account is paused." (Scarcity)
- Day 14: "We have paused your account. Reactivate instantly here." (Final)
The key is timing. Too aggressive and you annoy the customer. Too passive and they forget. 4 emails over 14 days is the sweet spot based on industry benchmarks.
Direct billing portal link
Every dunning email should include a direct link to update payment info. Not "log into your account." Not "go to settings." A one-click link that takes them straight to the card update form.
Stripe provides this via the Customer Portal: stripe.billingPortal.sessions.create({ customer: customerId }). Send the URL in every dunning email.
The Tools Landscape
Building all of this yourself is possible but slow. Here is what exists:
| Tool | Price | What it does |
|---|---|---|
| Stripe Smart Retries | Free (built-in) | Automatic retry optimization |
| Stripe Customer Portal | Free (built-in) | Self-service card update page |
| Rebill | $19/mo | Dunning emails + expiry warnings + analytics |
| ChurnWard | $29/mo | Dunning emails |
| Baremetrics Recover | $58/mo | Dunning emails + analytics |
| Stunning | $99/mo | Dunning emails + in-app prompts |
| Churn Buster | $249/mo | Full dunning suite + optimization |
| Gravy | $1,200+/mo | Human-assisted recovery calls |
The difference between $19/mo and $249/mo is mostly support and enterprise features. The core functionality (send emails when payments fail) is the same.
Quick Start Checklist
If you do nothing else, do these three things today:
- Turn on Stripe Smart Retries — free, 5 minutes, recovers 15-20%
- Set up the Customer Portal — free, gives customers a self-service card update link
-
Handle
customer.source.expiring— one webhook + one email template, catches cards before they fail
If you want the full dunning system without building it yourself, connect Stripe to Rebill in 30 seconds and let it handle the rest.
The Real Cost of Doing Nothing
Every month you wait is another month of leaked revenue. A $30K MRR company losing 9% to involuntary churn is losing $2,700/month. Over 6 months that is $16,200. Over a year, $32,400.
The fix takes less than an hour. The cost of not fixing it compounds every single month.
I build payment systems for SaaS companies. Rebill handles dunning emails and payment recovery starting at $19/mo. Try the free churn calculator to see what failed payments are costing you.
Top comments (0)