Stripe Dunning: How to Recover Failed Payments and Reduce Involuntary Churn
Involuntary churn from failed payments can account for 20–40% of all SaaS cancellations. Here's how Stripe dunning works, what settings to use, and how to recover more revenue.
Most SaaS founders obsess over voluntary churn — the subscribers who consciously decide to leave. But involuntary churn, the customers who disappear because a payment silently failed, is often just as large. Studies consistently put involuntary churn at 20–40% of total subscriber losses. The good news: it's almost entirely recoverable with the right dunning setup.
This guide covers how Stripe's dunning system works, what settings actually move the needle, and what to do beyond the default retry logic to recover as much revenue as possible.
What is dunning?
Dunning is the process of communicating with customers about failed payments and attempting to collect payment before cancelling their subscription. The word dates to 17th-century debt collection, but in SaaS it just means: automated retries + customer notifications + a grace period before access is revoked.
In Stripe, dunning is handled through Smart Retries and the Subscription billing settings in your dashboard. By default, Stripe retries failed payments on a schedule and sends emails at configurable points. The default settings are a starting point — not an optimised strategy.
Why payments fail
| Failure reason | Share of failures | Recoverable? |
|---|---|---|
| Insufficient funds | 38% | Yes — retry after payday |
| Card expired | 22% | Yes — with card update prompt |
| Do not honour (bank block) | 14% | Partially — customer must call bank |
| Lost / stolen card | 9% | Yes — with new card |
| Fraud block | 7% | Partially |
| Incorrect card details | 6% | Yes — fix details |
| Other / hard decline | 4% | No |
The key insight: the majority of failed payments are soft declines — temporary or fixable issues. Hard declines (fraud, stolen cards) are unrecoverable and should trigger immediate cancellation. Soft declines are where retry logic and dunning emails earn their keep.
Stripe Smart Retries: how they work
Stripe's Smart Retries use machine learning to pick the optimal retry time based on card type, bank, time of day, and historical success rates. This outperforms a fixed retry schedule (e.g., retry every 3 days) by 10–15% in most accounts.
Smart Retries are enabled by default for most Stripe accounts. To check: Dashboard → Settings → Billing → Subscriptions and emails → Manage failed payments → Smart Retries.
Stripe will retry a failed payment up to 4 times within a configurable window (1–28 days). After that, the subscription is cancelled or the invoice is marked uncollectable depending on your settings.
Optimising your Stripe dunning settings
1. Extend your retry window
The default retry window is often 7 days. Extending to 21–28 days recovers significantly more payments — especially for insufficient funds failures that resolve after a payday cycle. In Stripe: Settings → Billing → Subscriptions → Retry schedule → customize.
Recommended retry schedule:
- Retry 1: Day 1 (immediate retry — catches transient errors)
- Retry 2: Day 4
- Retry 3: Day 9
- Retry 4: Day 16
- Final notice + cancel: Day 21–28
2. Enable pre-dunning notifications
Stripe can send an email before a card expires. Enable "Send emails about expiring cards" in billing settings. This alone recovers a meaningful slice of card-expiry churn because customers update before they ever fail.
Timing: Stripe defaults to 30 days before expiry. If you have an annual billing cycle, consider a 60-day notice instead.
3. Customise dunning emails
Stripe's default dunning emails are functional but generic. Custom emails that mention your product name, include a direct link to update payment (Stripe's hosted customer portal), and have a human sender name consistently outperform the defaults by 15–25%.
The three emails worth customising:
- First failed payment — soft, assumes it's an accident, asks them to update card
- Second failure — adds urgency, mentions access will be affected
- Final notice — clear deadline, what happens to their data/account if not resolved
4. Use Stripe's customer portal for card updates
Every dunning email should link directly to https://billing.stripe.com/p/login/... — your Stripe customer portal — where customers can update payment methods in one click. Friction in the card update process is a silent recovery killer. Test the flow yourself from a mobile device.
Beyond Stripe: additional recovery tactics
In-app payment banners
Email open rates average 25–35%. That means 65–75% of dunning emails never get read. In-app banners shown when a user logs in with a failed payment are the second line of recovery — they catch the customers who use your product but miss emails.
Implementation: webhook on invoice.payment_failed → set a flag on the user record → show a dismissible banner in-app with a direct link to update payment.
SMS / push notifications
For B2C or mobile-heavy products, SMS open rates are 95%+. A single SMS on day 3 of a failed payment cycle recovers substantially more than a third email. Keep it short: product name, what happened, link to fix it.
Pause instead of cancel
Consider pausing access (rather than cancelling) at the end of the retry window. This preserves the subscription record in Stripe, which means the customer can resume without going through checkout again. Recovery rates for "paused" accounts are 40–60% higher than for cancelled accounts where the customer has to re-subscribe from scratch.
In Stripe: set the subscription status to past_due with a grace period before cancelling, or use subscription.pause_collection.
Measuring dunning performance
| Metric | How to calculate | Benchmark |
|---|---|---|
| Recovery rate | Recovered invoices ÷ total failed invoices | 40–60% |
| Involuntary churn rate | Involuntary cancellations ÷ total cancellations | < 25% |
| Time to recovery | Avg days from first failure to successful payment | < 10 days |
| Hard decline rate | Hard declines ÷ total failures | < 10% |
Track these in Stripe Sigma or export via the API. If your recovery rate is below 40%, your retry window is likely too short or your dunning emails aren't driving card updates.
The full involuntary churn stack
The highest-recovery setups combine all of the above:
- Pre-expiry card reminders — 30–60 days before card expires
- Smart Retries — extended to 21–28 day window
- Customised dunning emails — 3 touchpoints with direct portal links
- In-app payment banners — catches email-ignorers
- Pause instead of cancel — preserves accounts for late recovery
Plugging involuntary churn is the highest-ROI retention work most SaaS businesses can do — it requires no product changes, no new pricing, and the customers you recover were never unhappy with your product in the first place. Combined with a cancellation flow that handles voluntary churn, you can meaningfully reduce total subscriber losses within a single billing cycle.
Frequently asked questions
What is dunning in Stripe?+
Dunning in Stripe is the automated process of retrying failed subscription payments and notifying customers to update their payment details. Stripe uses Smart Retries — machine learning-based retry timing — combined with configurable email notifications to recover as many failed payments as possible before cancelling a subscription.
How many times does Stripe retry a failed payment?+
By default, Stripe retries a failed payment up to 4 times within a configurable window of 1–28 days. You can customise the retry schedule in Dashboard → Settings → Billing → Subscriptions → Retry schedule. Extending the window to 21–28 days recovers significantly more payments than the default 7-day window.
What is the difference between a soft decline and a hard decline?+
A soft decline is a temporary failure — insufficient funds, a bank block, or a card being replaced — that may succeed on a retry. A hard decline is a permanent failure — stolen card, fraud block, invalid account — that will not succeed on retry. Hard declines should trigger immediate cancellation; soft declines are where retry logic and dunning emails earn their value.
How long should a Stripe dunning period be?+
A dunning period of 21–28 days is recommended for most SaaS businesses. This is long enough to capture customers who fail due to insufficient funds and need a pay cycle to pass, while not leaving accounts in a past_due state so long that customers disengage. Consumer and low-ACV SaaS can sometimes get away with shorter windows due to lower average recovery rates.
Stop losing subscribers today
One script tag. One function call. A live cancellation flow in under 10 minutes.
Start free trial →