You're probably leaving money on the table. Most SaaS companies are. Failed payments account for 20-40% of all churn, and the typical recovery process is either nonexistent or barely optimized.
This guide is a structured audit of your entire payment recovery workflow. Work through each section, check off the items, and you'll walk away with a clear picture of what's working, what's broken, and where the revenue opportunity is.
Set aside 2-3 hours. Pull up your Stripe Dashboard, your email service, and your analytics. Let's go through it.
Section 1: Know your failure rate
Before optimizing recovery, you need to know the scale of the problem.
Audit items
[ ] Pull your payment failure rate for the last 3 months.
Go to Stripe Dashboard > Payments > filter by status "Failed." Calculate:
Payment Failure Rate = Failed Payments / Total Payment Attempts
Industry average: 5-8% of subscription charges fail. If you're above 10%, something else might be wrong (wrong MCC code, high-risk card types, checkout issues).
[ ] Break down failures by type.
In Stripe, look at the decline codes on failed charges. Group them:
- Soft declines (insufficient funds, temporary errors): typically 70-80% of failures
- Hard declines (expired card, invalid number, fraud): typically 20-30%
This ratio matters. Soft declines are easier to recover (retry often works). Hard declines require the customer to act (new card).
[ ] Calculate your involuntary churn rate.
Involuntary Churn Rate = MRR Lost to Failed Payments / Starting MRR
Below 0.5%: you're in good shape. 0.5-1.5%: room for improvement. Above 1.5%: significant revenue at risk.
[ ] Calculate the dollar amount.
Multiply your monthly involuntary churn MRR by 12 for the annual direct loss. Then multiply by the average remaining customer lifetime for the full compounding impact. (See our guide to calculating revenue lost to involuntary churn for the full formula.)
This number is your business case for investing in payment recovery.
Section 2: Review your retry settings
Stripe's retry configuration directly affects how many payments are recovered automatically, before any email or SMS is sent.
Audit items
[ ] Check whether Smart Retries is enabled.
Go to Settings > Billing > Subscriptions. Smart Retries uses Stripe's ML model to pick optimal retry times. It outperforms fixed schedules. If it's off, turn it on unless you have a specific reason not to.
[ ] If using manual retries, review the schedule.
How many retries? What intervals? A common anti-pattern: retries clustered too close together (Day 1, Day 2, Day 3). Space them across your grace period. If your grace period is 10 days, retries on Day 1, Day 4, and Day 8 cover more ground.
[ ] Check what happens after all retries fail.
Is the subscription canceled, marked as unpaid, or left as past_due? "Mark as unpaid" is the best default for most businesses. It preserves the subscription for easy reactivation while letting you restrict access.
If your setting is "cancel the subscription," customers who want to come back need to re-subscribe from scratch. That friction costs you recoveries.
[ ] Verify your grace period length.
The grace period is the time between first failure and final action (suspension or cancellation). For B2B SaaS: 10-14 days. For B2C: 7-10 days.
Too short and you don't give customers enough time to act. Too long and you're providing free service while waiting.
Section 3: Audit your dunning emails
Your emails are the primary recovery mechanism. If they're weak, everything downstream suffers.
Audit items
[ ] Count your dunning emails.
How many emails are in your sequence? How many days does it span? The sweet spot: 4-5 emails over 10-14 days. If you're sending 1-2 emails, you're leaving recoveries on the table. If you're sending 7+, you risk fatiguing customers and driving opt-outs.
[ ] Read each email as if you're the customer.
Open every email in your dunning sequence. For each one, answer:
- Is the problem immediately clear?
- Do I know exactly what to do?
- Is there one prominent CTA?
- Does the tone match the urgency level (informational early, urgent later)?
- Would I act on this?
If the answer to any of these is no, the email needs work.
[ ] Check subject lines.
Are they specific or vague? "Problem with your payment" is better than "Account notification." Personalized subject lines (with the customer's name) typically lift open rates by 5-10%.
Pull open rates for each email if you have them. Below 30% open rate on your first email means the subject line is weak.
[ ] Check CTAs.
Every email should have one clear call to action: update the payment method. The CTA should be a button (not just a text link), prominently placed, with action-oriented text ("Update my card" rather than "Click here").
Does the CTA link take the customer directly to the payment update page? Or does it drop them on the homepage or login page? Every extra click between the email and the payment update form costs you conversions. Test the link yourself.
[ ] Check mobile rendering.
Send each email to yourself and open it on your phone. Over 60% of emails are read on mobile. If the CTA button is too small, the text is too long, or the layout breaks on a small screen, your email isn't doing its job.
[ ] Review escalation in tone.
Your sequence should escalate:
- Email 1: Informational ("Your payment didn't go through")
- Email 2: Reminder ("Your card is still being declined")
- Email 3: Urgent ("Your account will be suspended")
- Email 4: Final ("Your account has been suspended")
If all four emails have the same mild tone, there's no urgency curve. If the first email is already threatening, there's nowhere to escalate.
Section 4: Check email deliverability
An email that lands in spam recovers nothing.
Audit items
[ ] Check your sender domain authentication.
Verify that SPF, DKIM, and DMARC are configured for the domain your dunning emails come from. Use a tool like MXToolbox or mail-tester.com to check. If these aren't set up, your emails are more likely to be filtered as spam.
[ ] Check your sender reputation.
If you're using a shared sending domain (like a default SendGrid or SES domain), your reputation depends on other senders. A dedicated sending domain gives you control over your own reputation.
Check your domain's reputation with Google Postmaster Tools if you send to a significant number of Gmail addresses.
[ ] Review bounce rates.
Pull the bounce rate from your email service. Hard bounces above 2% indicate stale email addresses in your customer base. Soft bounces above 5% indicate deliverability issues.
[ ] Test spam folder placement.
Send your dunning emails to test addresses across providers (Gmail, Outlook, Yahoo). Do they land in the inbox or spam/promotions? If they're going to spam, review your content for spam triggers: excessive caps, spammy phrases, poor HTML formatting, or missing unsubscribe links.
[ ] Check unsubscribe rates.
What percentage of customers unsubscribe from your dunning emails? Above 1% per email suggests your frequency is too high or your tone is off. Unsubscribed customers can never be recovered via email, so high opt-out rates compound over time.
Section 5: Review your payment update experience
Getting the customer to click is only half the battle. The payment update page needs to work flawlessly.
Audit items
[ ] Test the full payment update flow.
Click the CTA link in your dunning email. Walk through the entire flow as a customer would:
- Does the link require login? (Ideally not. Use a magic link or token-based authentication.)
- Does the page load quickly?
- Is the form simple? (Card number, expiry, CVC. Nothing else.)
- Does the payment retry automatically after the card is updated?
- Is there clear confirmation that the payment succeeded?
[ ] Check the payment update page on mobile.
Same flow, but on your phone. Is the form usable? Are inputs large enough? Does the page scroll correctly?
[ ] Verify automatic retry after card update.
When a customer updates their payment method, does Stripe automatically retry the failed invoice? If not, the customer updates their card but the payment doesn't go through until the next scheduled retry. That gap costs you recoveries.
In Stripe, you can use the pay endpoint on the invoice to retry immediately after a card update. Make sure your integration handles this.
[ ] Check error handling.
What happens if the new card is also declined? Is there a clear error message? Can the customer try a different card? Unhelpful error messages ("Something went wrong") leave customers stuck.
Section 6: Analyze recovery by decline type
Not all failures deserve the same treatment. Your recovery approach should vary by decline reason.
Audit items
[ ] Compare recovery rates for soft vs hard declines.
Pull your recovery data segmented by decline type. Soft declines should recover at 50-70%. Hard declines at 25-40%. If either is significantly below these benchmarks, dig deeper.
[ ] Check if you're differentiating your messaging.
A customer whose card expired needs to hear "Your card ending in 4242 has expired. Enter a new card." A customer with insufficient funds needs to hear "Your payment didn't go through. We'll retry in a few days, or you can update your card now."
If you're sending the same generic email regardless of decline type, you're missing an optimization that typically lifts recovery by 3-5%.
[ ] Review hard decline handling specifically.
For hard declines, retries won't help. Is your messaging direct about this? Does the first email for a hard decline make it clear that the customer must update their payment method?
[ ] Check for "do_not_honor" declines.
This is a catch-all code from card issuers. It can be soft or hard, and the correct response isn't always clear. If "do_not_honor" is a significant portion of your failures (it often is), review whether your retry strategy handles it appropriately. Treating it as a soft decline (retry once, then escalate to customer notification) is a reasonable default.
Section 7: Evaluate your use of SMS
SMS is the highest-impact channel most SaaS companies aren't using for dunning.
Audit items
[ ] Are you using SMS in your dunning sequence?
If no: this is likely your biggest single opportunity. Adding SMS recovers an additional 15-25% of failed payments that email alone misses.
If yes: review the following items.
[ ] How many SMS messages are in your sequence?
One or two is the sweet spot. More than that and you're creating a negative experience and risking compliance issues.
[ ] When in the sequence do SMS messages fire?
SMS works best in the middle of the sequence (Day 3-5), after the customer has received at least one email. It's an escalation, not a first touch.
[ ] Do your SMS messages include a direct link?
Every SMS should have a shortened URL that takes the customer straight to the payment update page. An SMS without a link is a notification with no easy action path.
[ ] Do you have phone numbers for your customers?
What percentage of your customer base has a phone number on file? If it's below 30%, the impact of SMS will be limited by coverage. Consider adding phone number collection to your signup or onboarding flow.
[ ] Are you compliant with SMS regulations?
In the US, TCPA requires prior express consent before sending marketing messages via SMS. Transactional messages (like payment failure notifications) have more flexibility, but you should still have opt-in consent documented. In Europe, GDPR applies. Consult your legal team if you're unsure.
Section 8: Benchmark against industry standards
Compare your metrics to industry benchmarks to understand where you stand.
Benchmarks
| Metric | Below Average | Average | Good | Excellent |
|---|---|---|---|---|
| Payment failure rate | > 10% | 5-8% | 3-5% | < 3% |
| Involuntary churn rate (% MRR) | > 2% | 1-2% | 0.5-1% | < 0.5% |
| Overall recovery rate | < 30% | 30-45% | 45-60% | > 60% |
| Recovery rate (soft declines) | < 40% | 40-55% | 55-70% | > 70% |
| Recovery rate (hard declines) | < 15% | 15-25% | 25-40% | > 40% |
| First email open rate | < 25% | 25-35% | 35-50% | > 50% |
| Time to recovery (median) | > 7 days | 4-7 days | 2-4 days | < 2 days |
If you're below average on any metric, that's where to focus first. If you're average across the board, there's a path to "good" that's worth significant revenue.
The audit summary
After completing all sections, you should have:
- A clear picture of how much revenue you're losing to involuntary churn
- A list of specific issues in your retry settings, emails, deliverability, and payment update flow
- A sense of where you stand relative to benchmarks
- A prioritized list of improvements
Priority order for fixes
If everything needs work, fix them in this order:
- Retry settings (5 minutes, immediate impact)
- Payment update flow (reduce friction for customers who want to pay)
- First dunning email (send it faster, make the CTA clearer)
- Full email sequence (add emails if you only have 1-2, improve existing ones)
- SMS (add one SMS touchpoint to your sequence)
- Deliverability (authenticate your domain, clean your sender reputation)
- Decline-type segmentation (tailor messaging to soft vs hard declines)
- A/B testing (optimize each element with data)
Each improvement is incremental. Combined, they can move your recovery rate from 30% to 60%+, which for most SaaS companies means recovering tens of thousands of dollars annually.
Run this audit quarterly. Your customer base changes, Stripe updates its features, and your emails need refreshing. A quarterly audit keeps revenue from silently draining away.