How Failed Payments Are Silently Killing Your SaaS Revenue
Here's a number most SaaS founders don't track: involuntary churn.
Not the customers who cancel because they're unhappy. The ones who want to keep paying but can't — because their credit card expired, hit its limit, or the bank flagged the transaction.
On average, involuntary churn accounts for 20-40% of total churn in subscription businesses. For a SaaS doing $50K MRR, that's $4,500-$9,000 in annual revenue quietly disappearing.
The Math Behind Failed Payments
Let's break it down:
- Average card expiration rate: ~25% of cards per year
- Average payment failure rate: 5-10% of renewal attempts
- Average recovery rate without dunning: ~15% (banks auto-retry)
- Average recovery rate with dunning: 40-60%
If you're not running a dunning process, you're recovering less than a quarter of what you could be.
A Real Example
Say you have:
- 500 subscribers at $49/month = $24,500 MRR
- 7% monthly payment failure rate = 35 failed payments
- Without dunning: ~5 recovered naturally = $245 saved
- With dunning: ~17 recovered = $833 saved
- Monthly difference: $588
- Annual difference: $7,056
That's a senior developer's bonus. From payments your customers already agreed to make.
Why Payments Fail
The top reasons, based on Stripe's own data:
- Insufficient funds (30-35%) — Timing issue. Retry in 3-5 days.
- Card expired (25-30%) — Customer needs to update. Email them.
- Bank decline (15-20%) — Fraud detection or processing issue. Retry.
- Card lost/stolen (10%) — Customer needs new card. Reach out.
- Processing error (5-10%) — Temporary. Auto-retry usually works.
Each reason needs a different recovery strategy. A single "your payment failed" email won't cut it.
The 3-Step Dunning Sequence That Works
After analyzing recovery patterns across subscription businesses, here's what consistently performs:
Step 1: Immediate (Day 0)
Subject: "Quick heads up — we couldn't process your payment"
Tone: Helpful, not alarming. Include a direct link to update payment details. Mention the specific plan they're on so it feels personal.
Recovery rate at this step: 25-35%
Step 2: Gentle Follow-up (Day 3)
Subject: "Your [Product] access expires soon — update your card"
Slightly more urgent. Mention what they'll lose access to. Include the amount and next retry date.
Cumulative recovery rate: 40-50%
Step 3: Final Notice (Day 7)
Subject: "Last chance to keep your [Product] account active"
Direct but respectful. Make it clear this is the final attempt. Offer to help if there's an issue with billing.
Cumulative recovery rate: 50-60%
Implementation Options
DIY with Stripe Webhooks
Listen for invoice.payment_failed events and trigger emails via Resend, SendGrid, or Postmark. Works, but you need to:
- Handle retries yourself
- Build the email templates
- Track recovery metrics
- Handle edge cases (multiple failures, plan changes during dunning)
Dedicated Dunning Tools
Tools like ChurnGuard connect via Stripe Connect OAuth and handle the entire dunning flow automatically. Setup takes ~5 minutes.
The ROI calculator at paymentrescue.dev/calculator shows exactly how much you're leaving on the table.
Beyond Email: Advanced Recovery Tactics
Smart retry timing — Don't retry at midnight. Retry when the bank is most likely to approve (morning, weekday, after payday).
Card updater services — Stripe's Automatic Card Updating handles some expired cards silently. Make sure it's enabled.
In-app notifications — For active users, show a banner in your app alongside the email.
SMS for high-value accounts — For enterprise plans, a text message can cut through inbox noise.
Measuring Recovery Performance
Track these metrics monthly:
- Payment failure rate: Target < 5%
- Recovery rate: Target > 50%
- Revenue recovered: Track in absolute dollars
- Time to recovery: How quickly you're getting payments back
If you're also building APIs, tools like CaptureAPI can help generate visual reports and dashboards showing your recovery metrics over time.
FAQ
How aggressive should dunning emails be?
Never aggressive. These are customers who want to pay you. The tone should be helpful and informative. "Hey, your card didn't go through" not "PAY NOW OR LOSE ACCESS."
Should I pause service during dunning?
Best practice: maintain full access during the dunning period (7-14 days). Locking users out immediately increases voluntary churn on top of the involuntary churn.
Does dunning work for annual subscriptions?
Absolutely — and it's even more important. A single failed annual payment is 12 months of revenue at risk.
Stop losing revenue to expired credit cards. Check your potential recovery at paymentrescue.dev/calculator.
Top comments (0)