Smart Retries

Stripe Smart Retries reattempts failed subscription and invoice payments at times chosen by a machine learning model, within a retry count and window you set.

Updated October 1, 2026

Smart Retries is the Stripe Billing feature that reattempts failed subscription and invoice payments. A machine learning model picks when to retry instead of a fixed schedule. It's the automatic half of dunning. Customer emails ask for a new card, and Smart Retries keeps trying the card you already have.

How Stripe Smart Retries works

You turn it on in the Dashboard under Billing, Revenue recovery, Retries, and set two limits. One is the number of attempts. The other is the maximum window, which can be 1 week, 2 weeks, 3 weeks, 1 month, or 2 months. Stripe recommends 8 tries within 2 weeks. Inside those limits, Stripe times each retry from signals such as how many devices have presented the card in recent hours, or the time of day when payments on certain debit cards tend to clear.

The alternative is a custom retry schedule of up to three retries, each a set number of days after the previous attempt. Stripe says Smart Retries are more effective than scheduled retries. Billing automations let you apply different retry policies to different groups of customers.

These events and fields describe a retry cycle:

  • invoice.payment_failed fires on the first failure and on each failed retry. The invoice's attempt_count shows how many attempts have been made.
  • next_payment_attempt on the invoice shows when Stripe will try again. If you use automations, Stripe sets it on invoice.updated instead.
  • invoice.paid fires when a retry succeeds.
  • customer.subscription.updated fires as the subscription moves from active to past_due and on to its final status.

Retries charge the subscription's default payment method first, then the customer's default. If a customer updates the customer-level card while the subscription has its own default, Stripe keeps retrying the old card.

When Stripe doesn't retry

Stripe doesn't retry when there's no payment method on file, when the card was issued in India, or after a hard decline such as lost_card, stolen_card, incorrect_number, transaction_not_allowed, or authentication_required. After a hard decline the schedule keeps running and attempt_count keeps climbing, but Stripe makes no charge until a new payment method appears. So "attempt 5" on an invoice can mean nothing has been charged since the first failure.

When the window ends unpaid, the subscription follows your settings. Stripe cancels it, marks it unpaid, or leaves it past_due, and makes no more payment attempts. That window is your grace period in practice.

Why Smart Retries matters

A declined payment on a renewal is usually an accident. Retries recover soft declines with no work from you or the customer, which makes Smart Retries the cheapest defense against involuntary churn. It's a Dashboard setting with no code, and it runs on every failed invoice.

Retries don't cover hard declines, replaced cards, or customers who never open the failed-payment email. Those need a person. Treat Smart Retries as the minimum for recovery and add human follow-up on top.

What to do alongside Smart Retries

  1. Keep the default unless you have data. Stripe recommends 8 tries in 2 weeks. A longer window only helps if your customers pay late but reliably.
  2. Split the work by decline type. Let retries handle soft declines. For hard declines, support or the founder contacts the customer the same day.
  3. Turn on failed-payment emails so the customer gets a link to update their card after each failure.
  4. Update the right field. If the subscription has its own default payment method, update that one, or retries keep hitting the old card.
  5. Check Stripe's recovery analytics to see your failure and recovery rates and whether a policy change helped.

Smart Retries and ChargeBell

ChargeBell never retries a payment. Its Stripe connection is read-only, so recovery stays with Stripe. ChargeBell shows the retry cycle in Slack. Its failed payment alert is built on payment_intent.payment_failed, which Stripe raises for the charge attempt behind an invoice, and it shows Stripe's decline message. It doesn't say whether Smart Retries will try again, so open the invoice in Stripe to check the decline code and next retry date before #billing decides whether to wait or reach out. When a retry succeeds, a payment recovered alert follows. See invoice payment failed alerts for how this works on subscriptions, and how to send failed payment alerts to Slack for setup.

Get alerted in Slack

Stripe events: invoice.payment_failed, invoice.updated, invoice.paid, customer.subscription.updated

# billing

ChargeBellAPP

⚠️ A $499.00 payment didn't go through

@channel

billing@acmecorp.com · Your card has insufficient funds.

Check Stripe to see if it will be retried.

Related terms