Stripe Smart Retries vs dunning emails: what each one does
Updated October 28, 2026
Smart Retries and reminder emails are often discussed as if they were rivals. They aren't. One quietly tries the same card again at a better moment. The other asks a person to do something only they can do. Here is how each works in Stripe, where each stops, and how to use them together without overwhelming your customers.
What Smart Retries does
When a subscription renewal fails, Stripe Billing can try the charge again automatically. You set this up in the Dashboard under Billing > Revenue recovery > Retries.
With Smart Retries, Stripe uses an AI model to pick the retry times. Its documentation mentions signals such as how many devices have presented the card in recent hours, and the time of day when certain debit cards tend to succeed. You choose how many attempts, over a window of 1 week, 2 weeks, 3 weeks, 1 month or 2 months. Stripe's recommended default is 8 tries within 2 weeks.
If you'd rather set the timing yourself, you can turn Smart Retries off and use a custom schedule of up to three retries, each a set number of days after the previous one.
Either way, the invoice.payment_failed webhook tells you what's happening. attempt_count shows how many attempts have been made, and the invoice's next_payment_attempt shows when Stripe will try next.
Where retries can't help
A retry re-runs the same card. That works when the problem was temporary. It can't fix a problem that needs the customer to act. Stripe's documentation says it won't retry at all when:
- no payment method is available,
- the issuer returned a hard decline code,
- the card is India-issued (recurring payments there follow separate rules), or
- a Connect account has been disconnected.
The hard decline codes are incorrect_number, lost_card, pickup_card, stolen_card, revocation_of_authorization, revocation_of_all_authorizations, authentication_required, highest_risk_level and transaction_not_allowed. For these, Stripe keeps counting attempts, but the retries only run after a new payment method is added.
An expired card is the everyday example. No amount of retrying makes it valid again. Someone has to add a new card, and that someone is your customer.
There's also a ceiling. Stripe notes that card networks limit how many times a single charge can be retried, and it recommends no more than eight retries. More attempts can look like fraud to issuers and lead to more declines on legitimate charges.
What "dunning emails" means here
Dunning is the old word for reminding someone about a payment. For a small SaaS, it means telling a customer their renewal didn't go through and giving them an easy way to fix it.
Stripe has some of this built in. Under its revenue recovery email settings you can turn on:
- Send emails when card payments fail. Stripe emails the customer after each failed payment, with a link to update their payment method.
- Send emails about expiring cards. Stripe emails the customer one month before the default card on file expires.
The link can go to a Stripe-hosted page or to your own subscription management page. The emails use your Stripe branding settings. Stripe also documents when the hosted link stops working: when the subscription becomes canceled, incomplete_expired or unpaid, or the current renewal period has ended.
For many small businesses, these built-in emails are a perfectly good start. Founders usually reach for something more when they want:
- the email to come from them, in their own words, so a reply reaches a person;
- a short sequence over several days rather than one notice per failed attempt;
- different wording for different reasons, such as an expired card versus a generic bank decline;
- a clear view of which customers paid after a reminder.
Side by side
| Smart Retries | Reminder emails | |
|---|---|---|
| What it does | Tries the same payment method again at chosen times | Asks the customer to update their card or confirm the payment |
| Fixes temporary declines | Often, without anyone noticing | Sometimes, if the customer pays sooner |
| Fixes expired cards and hard declines | No. It needs a new payment method first. | Yes, this is what they're for |
| Needs the customer | No | Yes |
| Where to set it up | Billing > Revenue recovery > Retries | Stripe's email settings, or your own sender |
Using both, calmly
- Leave Smart Retries on. The default of 8 tries in 2 weeks is a sensible place to start, and it handles the temporary declines quietly.
- Turn on expiring-card emails. The kindest reminder arrives before anything fails.
- Pick one voice for failed-payment emails. Use either Stripe's built-in email or your own reminders, not both. Two senders saying the same thing feels like pressure. If you send your own, switch off "Send emails when card payments fail" in Stripe.
- Match the message to the reason. For hard declines and expired cards, the first email should ask for a new card right away, because retries won't run without one. For temporary declines, a lighter note works: "we'll try again in a few days." Our decline code guide has example lines.
- Decide what happens at the end. After the final retry, Stripe cancels the subscription, marks it unpaid, leaves it past due, or pauses it, depending on your settings. Choose on purpose. See what past_due means.
Where Calmretry fits
Calmretry works on top of your own Stripe account and doesn't replace Smart Retries. It notices failed and expired-card payments and sends your customer four short, gentle reminders from you, then stops. Each one has a secure link to update their card. It never touches funds or card data. If you use it, turn off Stripe's own failed-payment email so customers hear from you only once.
See your own failed payments, for free
Calmretry reads your Stripe account with a restricted, read-only key and shows the failed subscription payments from the last 90 days: what was paid later, what is still open, and the decline reasons. It never touches funds or card data.
Sources
- Stripe Docs: Automate payment retries
- Stripe Docs: Automate customer emails
- Stripe Docs: Card declines
- Stripe Docs: How subscriptions work