Expiring cards: how to stop them from ending your subscriptions
How Stripe automatic card updates handle expiring cards, what they miss, and how pre-expiry emails and a simple card update page keep renewals from failing.
Every card has an expiry date, and every subscription that outlives a card will eventually hit it. When it does, the renewal fails, often for a customer who has no intention of leaving. Expiring cards are one of the most predictable causes of failed payments, which makes them one of the easiest to handle ahead of time.
This guide covers what Stripe does automatically, what it cannot do, and the simple process that catches the rest: find cards about to expire, email the customer before the renewal, and make updating the card take one minute.
What happens when a saved card expires
When you charge a card after its expiry date, the issuer declines it, typically with the expired_card decline code (Stripe decline codes). Retrying the same card details will not help. Either the card details get updated, or the customer has to provide a new payment method.
There are two ways to get new details:
- The card network sends them, through automatic card updates (also called a card account updater).
- The customer enters them, after you ask.
You want as many cards as possible handled by the first path, and a smooth second path for the rest.
Stripe automatic card updates
Stripe’s cards overview explains how automatic card updates work. When a customer’s bank issues a replacement card (because the old one expired, or was reported lost or stolen), participating issuers share the new details through the card networks, and Stripe updates the saved card for you.
Key points from Stripe’s documentation:
- It depends on the issuer. Only issuers that participate in the networks’ updater programs send updates.
- Coverage varies by country. In the US, Stripe can update most American Express, Visa, Mastercard and Discover cards. Outside the US, support varies.
- You cannot tell in advance which cards will be updated. Stripe says it is not possible to identify which cards support automatic updates.
- You can track updates. Stripe sends a
payment_method.automatically_updatedwebhook when a card is updated by the network, including the new expiry date and last four digits. If the card number changed, the card’s fingerprint changes too.
Stripe has also announced expanded network tokens and card account updater coverage, including real-time updates for some networks and regions. Check the announcement and the docs for the current scope in your markets.
What automatic updates miss
Even with good coverage, some expiring cards will not be updated:
- The issuer does not participate, or not in that country.
- The customer closed the account or switched banks; there is no “new card” to send.
- The card was a prepaid or single-use virtual card that is not reissued.
- The update arrives after the renewal attempt.
So plan for automatic updates to reduce the problem, not to solve it.
Step 1: find cards that are about to expire
Every saved card on Stripe has exp_month and exp_year on the PaymentMethod’s card object. A daily or weekly job can list customers whose default card expires before their next renewal.
A simple rule:
Flag a subscription when:
the default payment method is a card, and
the card expires before the next invoice date, and
no automatic update has been received for that card
Remember that a card is usually valid through the last day of its expiry month. A card marked 11/2026 should still work on November 20, 2026, and fail on a December renewal.
Listen to payment_method.automatically_updated and remove a card from your list as soon as the network updates it. There is no reason to email a customer whose card has already been fixed.
Example timing
| Renewal date | Card expiry | Status | Action |
|---|---|---|---|
| Dec 5 | 11/2026 | Will fail | Email in mid November |
| Nov 20 | 11/2026 | Still valid | Check again before next renewal |
| Jan 3 | 12/2026 | Will fail | Email in mid December |
| Dec 5 | 11/2026, updated by network | Fixed | No action |
These rows are hypothetical examples for illustration.
Step 2: email the customer before the renewal
Stripe can do part of this for you. In the customer emails settings, you can turn on emails about expiring cards. That is a reasonable baseline. If you want to control timing, wording, language, or skip customers whose cards were already updated, send your own.
A pre-expiry sequence that works well for monthly plans:
| When | Notes | |
|---|---|---|
| About 2–3 weeks before renewal | “Your card expires soon” | Main email |
| About 3 days before renewal | Short reminder | Only if not updated |
| Renewal day | Normal failed payment flow | If the charge fails |
For annual plans, start earlier (for example 30 days before renewal) and include the renewal amount, since it is larger.
Template: card expiring soon
Subject: Your card for [Product] expires soon
Hi [First name],
The [Card brand] ending [1234] that you use for [Product]
expires at the end of [Month]. Your next payment of [Amount]
is on [Renewal date].
To avoid any interruption, you can add your new card here:
[Update payment method]
If you've already received a replacement card from your bank,
it may have been updated automatically. You can check on the
same page.
Thanks,
[Sender name]
Template: short reminder
Subject: Reminder: update your card before [Renewal date]
Hi [First name],
Quick reminder: your [Card brand] ending [1234] expires before
your next [Product] payment on [Renewal date].
[Update payment method]
It takes about a minute.
[Sender name]
Keep these emails plain and short. They are not urgent yet, and the tone should reflect that.
Step 3: make the card update page effortless
The email is only as good as the page it links to. On Stripe, you can use the customer portal, which lets customers manage their payment methods, or build your own page with Stripe Elements.
Checklist for the page:
- Opens from the email without asking for a password.
- Shows the card currently on file (brand, last four digits, expiry) so the customer knows what they are replacing.
- Works on a phone.
- Offers wallets such as Apple Pay, Google Pay or Stripe Link where available.
- Sets the new card as the default for the subscription, not just as an extra card.
- Confirms success in plain words.
The fourth item is a common bug. If the new card is saved to the customer but the subscription still points to the old default, the renewal fails anyway.
Step 4: if the renewal still fails
Some customers will not act before the renewal. Treat the expired_card failure as a hard decline: skip the “we’ll retry” language and ask for a new card on day 0. Then follow your normal dunning email sequence. The full process is in the complete guide to recovering failed payments on Stripe.
Measuring how well you handle expiring cards
Track these each month:
| Metric | How to compute |
|---|---|
| Cards expiring before renewal | Count of flagged subscriptions |
| Updated automatically | Flagged cards that received a network update |
| Updated by the customer before renewal | Flagged cards replaced after your email |
Failed at renewal with expired_card |
Renewals that failed for this reason |
| Recovered after failure | Of those, how many were paid later |
If many renewals still fail with expired_card, look at email timing (too late?), deliverability (are emails landing in spam?), and the update page (is there a password wall?).
Common mistakes
- Emailing customers whose cards were already updated. It is confusing and erodes trust. Check for automatic updates first.
- Sending only after the failure. By then the customer has a failed payment notice instead of a friendly heads-up.
- Forgetting other payment methods. Expiry applies to cards. Bank debits like SEPA Direct Debit do not expire the same way, which is one reason to offer them.
- Not updating the subscription’s default payment method.
- Ignoring annual plans. One expired card on an annual plan can be a large invoice.
How NoChurn helps
NoChurn connects to Stripe in one click and handles failed payments end to end: smart retries (or Stripe Smart Retries if you prefer), AI-written recovery emails on day 0, 3, 7 and 14 in the customer’s language, reviewed before sending, and a hosted card update page where card data stays with Stripe. NoChurn never sees card numbers.
It also flags customers who remove their card before renewal and starts a save flow before the payment fails. See how failed payment recovery works and pricing.