
Photo by Markus Winkler on Unsplash
How to Prevent Failed Payments: Dunning Strategies for SaaS Startups
How to Prevent Failed Payments: Dunning Strategies for SaaS Startups
Failed payments cause involuntary churn — customers who want to keep paying but can't because their card expired, was declined, or hit its limit. This accounts for 20-40% of all SaaS churn. The good news: effective dunning can recover 30-50% of failed payments.
Why Payments Fail
| Reason | Frequency | Recoverable? |
|---|---|---|
| Card expired | 40% | Yes (card updater or new card) |
| Insufficient funds | 25% | Yes (retry in a few days) |
| Card declined by bank | 20% | Maybe (user contacts bank) |
| Fraud prevention | 10% | Maybe (user verifies) |
| Card canceled/lost | 5% | Yes (user adds new card) |
The Dunning Playbook
Step 1: Configure Stripe's Smart Retries
Stripe offers automatic retry logic called Smart Retries that uses machine learning to pick the best retry times. Enable this in Stripe Dashboard → Settings → Billing → Automatic collection.
Recommended settings:
- Enable Smart Retries
- Retry up to 4 times over 3-4 weeks
- Mark subscription as unpaid after all retries fail
Step 2: Send Dunning Emails
| Day | Subject Line | |
|---|---|---|
| Day 0 (payment fails) | "Payment failed — please update your card" | Action needed: Payment failed |
| Day 3 (1st retry fails) | "We're having trouble charging your card" | Your subscription may be interrupted |
| Day 7 (2nd retry fails) | "Update your payment method to keep access" | Last chance to update payment |
| Day 14 (3rd retry fails) | "Your subscription will be canceled in 7 days" | We don't want to lose you |
| Day 21 (final) | "Your account has been downgraded" | Your subscription has been canceled |
Email Best Practices
- Include a direct link to update payment method (Stripe Customer Portal)
- Be friendly, not threatening — they didn't mean for the payment to fail
- Show what they'll lose — "You'll lose access to [specific features]"
- Make it one-click — Minimize steps to update the card
Step 3: In-App Notifications
For users who are logged in but haven't checked their email:
- Banner at top of dashboard — "Your payment failed. Update your card to keep access."
- Modal on login — For users past the 7-day mark
- Billing page alert — Prominent warning with update button
Access During Dunning
| Approach | Pros | Cons |
|---|---|---|
| Full access during retries | Better UX, higher recovery | Risk of free usage |
| Limited access (read-only) | Urgency to fix payment | May frustrate loyal users |
| Grace period (7 days full, then limited) | Balanced approach | More complex to implement |
Recommendation: Full access for 7 days, then read-only access for 14 more days, then cancel.
Prevention (Better Than Recovery)
Card Updater
Stripe automatically updates expired cards through card network partnerships. This silently fixes ~30% of expiration-related failures without any user action.
Pre-Expiration Emails
Send an email 30 days before a user's card expires: "Your card ending in 4242 expires next month. Update it now to avoid service interruption."
Measuring Dunning Success
| Metric | Formula | Target |
|---|---|---|
| Failed payment rate | Failed invoices / Total invoices | <5% |
| Recovery rate | Recovered payments / Failed payments | >40% |
| Involuntary churn rate | Unrecovered failures / Total customers | <1% |
| Time to recovery | Average days from failure to recovery | <7 days |
Setting up billing? Read How to Build SaaS Billing With Stripe.
Need a billing-ready template? Browse on MVPHub.







