Failed Payments and Dunning: How to Recover Involuntary Churn (2026)

Why subscription payments fail, what retries and card updates fix on their own, and the emails, grace periods and access rules that recover the rest.

Floot ·

Key Takeaways

  • Failed renewals are a normal part of subscriptions. Cards expire, get replaced or hit limits. Plan for failures as an everyday event, not an emergency.
  • Turn on retries and card updates first. Stripe enables Smart Retries by default on new accounts (up to 8 retries within 2 weeks) and automatically attempts to update saved cards when banks reissue them.
  • Some declines can’t be retried. Hard declines such as a lost or stolen card need a new payment method from the customer, so the email matters more than the retry.
  • Decide what “past due” means for access. Keep access during retries, then restrict it when retries end. Write the rule down before you build.
  • Prevention beats recovery. Expiring-card emails and renewal reminders stop many failures before they happen.

Quick-Start Prioritization Framework

StepWhat to set upWhere (on Stripe)
1Smart Retries on, default 8 retries within 2 weeksBilling, Revenue recovery, Retries
2Email customers after each failed card paymentRevenue recovery emails settings
3Expiring-card emails (sent 1 month before expiry)Email notifications settings
4A page or portal link where customers update their cardCustomer portal or your own page
5What happens when retries run out: cancel, unpaid, past due or pauseFailed payment settings
6Your app’s access rule for past-due and unpaid subscriptionsYour app’s backend

Some subscribers leave because they decided to. Others leave because a card expired, a bank declined a renewal or a limit was hit on the wrong day. The second group is involuntary churn: customers who never chose to go. Dunning is the process of recovering them, through automatic retries, card updates, reminder emails and a sensible grace period. It is one of the few growth levers that needs no new customers, and most of it can be set up once and left running. This guide explains how failed payments work on Stripe, the most common processor for small subscription businesses, and what to put in place on day one.

Why subscription payments fail

A renewal is charged while the customer isn’t looking. Anything that changed since the last charge can cause a decline.

Soft declines

Temporary problems such as insufficient funds, a bank’s fraud check or a processing hiccup. These often succeed if retried at a better time, which is what automatic retries are for.

Hard declines

Permanent problems with the card itself. Stripe’s documentation lists hard decline codes it won’t retry automatically, including incorrect_number, lost_card, stolen_card, pickup_card, transaction_not_allowed and authentication_required. For these, retries stay scheduled but only execute once a new payment method is on file.

Authentication required

Some banks, especially in Europe and India, ask the customer to confirm a payment. When that happens on a renewal, the customer has to come back and approve it. Stripe can email a link to a hosted page where they confirm the payment.

What happens on Stripe when a renewal fails

Understanding the statuses helps you set the right access rules in your app.

StatusWhat it meansSuggested access in your app
activePaid and in good standingFull access
trialingIn a trial periodFull access until the trial ends
past_dueLatest renewal failed; retries may be runningKeep access, show a banner asking to update the card
unpaidRetries ended; invoices still created, not chargedRestrict to read-only or the free tier
canceledEnded; can’t be reactivatedFree tier or no access; new subscription to return
incompleteFirst payment hasn’t succeeded yet (23 hours)No paid access yet; prompt for another card

The subscription becomes past_due

For subscriptions that charge automatically, Stripe’s documentation says a failed renewal moves the subscription to past_due, and Stripe keeps generating invoices and retrying according to your retry settings.

When retries run out

Your failed-payment settings decide what happens next. Stripe offers four outcomes: cancel the subscription, mark it unpaid (invoices keep being created as drafts but no payment is attempted), leave it past_due, or pause it if eligible. Stripe’s docs advise revoking access when a subscription becomes unpaid, because payment has already been attempted and retried.

First payments are different

If the very first payment fails, the subscription is incomplete, and the customer has 23 hours to pay before it becomes incomplete_expired. Stripe’s docs note that Smart Retries don’t retry this initial payment, so your checkout needs to ask for another card on the spot.

Layer 1: automatic retries

Retries recover soft declines with no effort from you or the customer.

Smart Retries

Stripe’s Smart Retries choose retry times using signals such as how recently a card has been used and the best time of day to charge in a given country. Stripe enables it by default for new accounts and configures up to 8 retries within 2 weeks. You can change the window to 1 week, 2 weeks, 3 weeks, 1 month or 2 months.

Custom schedules

If you prefer fixed rules, Stripe lets you set up to three retries, each a chosen number of days after the previous attempt. Most small businesses are better served by the default Smart Retries unless they have a reason to change it, such as customers paid on a known schedule.

Bank debits have their own rules

Direct debit methods are retried using their own settings, not the card policy. For example, Stripe lists ACH Direct Debit retries for insufficient funds at a maximum of 2 retries within 40 days, and SEPA Direct Debit at 2 within 30 days. Turn them on separately if you accept them.

Layer 2: card updates that happen without the customer

Many failures are just an old card number on file. Card networks can quietly fix that.

Automatic card updates

Stripe works with card networks to update saved card details when a customer gets a new card, for example after expiry or a lost-card replacement. Its documentation says this is widely supported in the United States for most American Express, Visa, Mastercard and Discover cards, while international support varies by country. You can listen for the payment_method.automatically_updated event if you keep your own record of cards.

Why it doesn’t cover everything

It only works when the issuing bank takes part, and it can’t help when a customer closed the account or switched banks. That is why the email layer still matters.

Layer 3: dunning emails

When a payment fails and won’t fix itself, the customer has to act. The email is how you ask.

What Stripe can send for you

Stripe’s customer emails can go out after each failed card payment, one month before a card on file expires, before a renewal, and before a trial ends. Each includes a link to a page where the customer can update their payment method, either Stripe’s hosted page or your own. Turning these on is the fastest way to have dunning in place on day one.

Writing your own sequence

If you send emails from your app instead, a simple sequence covers most cases. Keep each one short, name the product and amount, and put a single button to update the card at the top.

  • Day 0, payment failed: what happened, one button to update the card, reassurance that access continues for now.
  • Day 3: a short reminder with the same button.
  • Day 7: say clearly what changes and when if payment isn’t updated.
  • Final retry: the last notice, with the date access will change.
  • After recovery: a quick thank-you and receipt, so the customer knows it worked.

Make updating the card effortless

The link should land on a page where the customer can enter a new card in under a minute without hunting for a password. Stripe’s customer portal lets customers update payment methods, view and pay invoices, switch plans and cancel. Test the link from a phone, since many people open these emails there.

Layer 4: in-app prompts and a fair grace period

Customers who use your product daily may see an in-app banner before they read an email.

Banners for past-due accounts

When a subscription is past_due, show a clear, polite banner to the account owner with a button to update the card. Show it only to people who can fix it; staff users of a customer business can’t.

Choose the grace period on purpose

Cutting access on the first failure punishes customers for their bank’s mistake and creates support tickets. Keeping access forever teaches people they don’t need to pay. A common middle ground is full access while retries run, then a restricted mode (read-only, or the free tier) once the subscription becomes unpaid or canceled, with their data kept so they can return.

Prevention: stop failures before they happen

A few settings reduce failures at the source.

  • Expiring-card emails: Stripe can send one a month before a card on file expires.
  • Renewal reminders for annual plans: a heads-up before a large charge reduces declines and disputes.
  • Offer annual billing: one charge a year means eleven fewer chances to fail.
  • Accept more payment methods where your customers are, such as bank debits in Europe, each with its own retry settings.
  • Ask for a backup payment method from business customers on larger plans.

Measuring recovery

Track a few numbers monthly so you know dunning is working.

The core numbers

Count renewals that failed at least once, how many of those were eventually paid (your recovery rate), and how many ended canceled or unpaid. Stripe counts a subscription that is canceled or marked unpaid as churn, so failed-payment losses show up in your churn metrics alongside voluntary cancellations. Separating the two tells you whether to work on the product or on billing.

A worked example

Say 400 subscribers pay $25 a month, and 20 renewals fail in a month. If retries and emails recover 12, you lose 8 subscribers, or $200 of MRR. Improving recovery to 16 saves an extra $100 of MRR every month, which compounds the same way new sales do. The figures are illustrative.

Common mistakes

Most dunning problems come from never deciding what should happen.

  • Leaving failed-payment emails switched off, so customers never learn their card failed.
  • Revoking access the moment a renewal fails, during the retry window.
  • Never revoking access, so unpaid subscriptions keep full features indefinitely.
  • Checking payment status only in the browser instead of on the server.
  • Update-card links that require logging in with a forgotten password.
  • Treating involuntary and voluntary churn as one number.
  • Deleting a customer’s data when their payment fails, so they can’t come back.

If you’d rather not build this yourself

If you’d rather not wire retries, access rules and reminder emails by hand, Floot can build the subscription app from a plain-English description, with Floot Payments for subscriptions (paid out via Stripe), server-side access checks and scheduled emails. Describe the grace period you want and test it with a failing test card.

Frequently Asked Questions

What is dunning?

Dunning is the process of recovering failed subscription payments: retrying the charge, updating card details, emailing the customer and deciding what happens to their access while the payment is outstanding.

What is involuntary churn?

Customers lost because a payment failed, not because they chose to cancel. Expired cards, replaced cards and declined renewals are the usual causes.

How many times does Stripe retry a failed payment?

For new accounts, Stripe enables Smart Retries by default and configures up to 8 retries within 2 weeks. You can choose a window from 1 week to 2 months, or set a custom schedule of up to three retries.

Should I cut off access when a payment fails?

Usually not immediately. Keep access while retries run and show a banner asking the customer to update their card, then restrict access once retries end. Keep their data so they can return.

Why didn’t Stripe retry my customer’s payment?

Stripe doesn’t retry when no payment method is available, when the bank returns a hard decline code such as lost_card or stolen_card, or for India-issued cards. It also doesn’t retry the first payment of a new subscription while it is incomplete.

Does Stripe update expired cards automatically?

Stripe automatically attempts to update saved cards when banks issue replacements, where the card issuer participates. Its documentation says this is widely supported in the US for major card brands, while international support varies.

Sources