Why retrying an expired card rarely works | RecoverFlow

Guide

Why retrying an expired card rarely works

Last updated 28 July 2026 · written by Bruce McGinley, who builds RecoverFlow

Short answer

expired_card is not one of the nine decline codes that stop Stripe executing a retry. So Stripe will genuinely attempt the charge again, on schedule, against a card that has expired.

Cards do not un-expire. Unless the issuer pushes a replacement through the card account updater and Stripe picks it up, every one of those attempts fails the same way.

This is an email problem wearing a retry problem's clothes. The recovery lever is asking the customer for a new expiry date, and doing it before the card dies rather than after.

Why Stripe retries it anyway

Stripe's block list exists for codes where the answer is already known and permanent: a stolen card, a revoked authorization, a Radar block. expired_card did not make that list, and there is a defensible reason. Card networks run an updater service. When an issuer reissues a card, the new number and expiry can be pushed to merchants automatically, and Stripe supports this. If that update lands between one attempt and the next, a retry genuinely succeeds.

So the retry is not irrational. It is a bet that the updater will do its job during the retry window. Sometimes it does. Often it does not, because the customer's issuer does not participate, or the card is a type the updater does not cover, or the customer has simply not activated the replacement sitting in a drawer.

What you get in the meantime is a subscription that looks like it is being actively worked on when nothing is changing.

The version of this that actually works is preventative

An expired card is the only common failure you can see coming. You know the expiry date. You have known it since the day they signed up.

Stripe will send its own card expiry email roughly a month before the card dies, using your branding, if you have that email enabled in your Billing settings. Turn it on. It costs nothing and it is the single highest leverage thing in this article.

If you want to go further, you can query it yourself. Every PaymentMethod carries card.exp_month and card.exp_year. Listing active subscriptions whose default payment method expires in the next 60 days is a short script and it gives you a list of customers you can contact before anything breaks, on your own timing, in your own voice.

The asymmetry is large. Asking someone to update a card that is about to expire is a helpful reminder. Asking after it has expired is a failed payment notice, and it arrives alongside the small anxiety of "did my service just stop". The same request converts differently depending on which side of the expiry date you send it.

If it has already failed

Once you are on the wrong side of it, the job is a good email, sent quickly, with as little friction as possible between reading it and having a working card on file.

There is a free dunning email generator on this site that writes this for you, by decline reason, and it will tell you when it thinks an email is the wrong move.

How to tell if this matters for you

Pull your unpaid invoices and group the last attempt's decline code. If expired_card is near the top, you have a preventative problem and the fix is upstream of any retry setting.

We are deliberately not telling you what share of failures are expired cards on average. Published figures vary wildly depending on who is selling what, and your mix depends on your customers' countries, card types and how long they have been subscribed. The number on your own dashboard is the only one worth acting on.

Questions people actually ask

Is expired_card a hard decline in Stripe?

Not in the sense that matters. It is not one of the nine codes where Stripe stops executing retries, so Stripe will keep attempting the charge. In practical terms it behaves like a hard decline anyway, because an expired card cannot start working unless the issuer pushes an updated card through the network updater.

Will Stripe automatically update an expired card?

Sometimes. Stripe supports the card networks' automatic account updater, so a reissued card can be updated without the customer doing anything. It depends on the issuer and card type participating, so it is a helpful backstop rather than something to rely on.

How far in advance does Stripe email about expiring cards?

Stripe's card expiry email goes out roughly a month before the card expires, if you have that email enabled in your Billing settings. It uses your branding.

Should I retry an expired card at all?

Letting Stripe's schedule run costs you nothing and occasionally catches an updater refresh. Just do not treat those attempts as your recovery plan. Send the email.

Can I see which subscriptions have cards expiring soon?

Yes. Every card PaymentMethod exposes exp_month and exp_year through the Stripe API, so you can list active subscriptions whose default payment method expires in the next month or two and contact those customers first.

Where this came from

Checked against primary sources on 28 July 2026. If Stripe changes something and this page has not caught up, tell us and it gets fixed.

If you would rather not build this yourself

RecoverFlow watches your Stripe account for failed subscription payments, stops retrying the ones that cannot succeed, and emails the customers whose card simply needs replacing. It charges 25% of what it actually recovers, with a $29 monthly floor, and nothing at all if it recovers nothing.

It is early. It is run by one person. If Stripe's own free retry settings are enough for you, use those instead, and there is a page on this site that says exactly when that is the right call.

See how the pricing works