The signal in Stripe
The charge fails with the decline code expired_card. Unlike a funds decline, retrying changes nothing: the card on file can never succeed again. The only path to recovery runs through the customer or through a network-issued replacement.
Why it happens
The pre-expiry window closed without an update. Sometimes the reminders were ignored; sometimes the replacement card carries a new number that no updater service could map. Either way the subscription is now billing a dead credential while the customer, in most cases, has a working card in their wallet and no idea anything failed.
What happens if you do nothing
Blind retries on an expired card are pure waste: every attempt fails, and every failure email trains the customer to ignore you. Accounts in this state quietly lapse, and the revenue gets written off as churn even though the customer never decided to leave.
The play, step by step
Chaser, the Stripe-native failed-payment recovery tool, first checks whether a card-network update has refreshed the credential; if so, a single retry usually closes the case. If not, the customer gets a sequenced ask: a friendly note with the branded update page, a reminder a few days later, and then a stop. When the sequence exhausts without action, the composer flags it and a human writes the personal note that templates cannot. The send is blocked automatically if the invoice was settled out of band in the meantime.
The email that works
Assume good faith and make the fix one tap. "Your card on file expired. Update it in 20 seconds and nothing pauses." The branded page does the rest: your logo, your colors, card fields served and tokenized by Stripe.
