EXPIRED_CARD on Shopify Subscription Renewal — Recovery Guide
Root cause
EXPIRED_CARD fires when the card stored for a subscription renewal has passed its expiration date. Stripe returns the expired_card decline code. Unlike INSUFFICIENT_FUNDS or CARD_DECLINED, an expired card is permanently invalid — retrying the same card will always fail. The customer must provide a new card or update their expiration date. EXPIRED_CARD failures cluster in January and February each year as cards issued in the previous year expire.
Symptoms
- • Shopify billing attempt errorCode: EXPIRED_CARD
- • Stripe decline code: expired_card on the underlying charge
- • All retry attempts fail — the card cannot be charged regardless of timing
- • Recharge dunning retries waste attempts on a permanently invalid payment method
- • Clustered failures in January and February as prior-year cards expire in bulk
How to fix it
Stop retrying — expired cards cannot be recovered with retries
When errorCode is EXPIRED_CARD, do not attempt further billing retries. The card is permanently expired and every retry will return the same failure. In Recharge Admin, mark the charge as requiring customer action rather than continuing the dunning retry schedule.
Open in admin →Enable Stripe Account Updater for automatic card updates
Stripe's Account Updater service automatically fetches updated card details from Visa and Mastercard networks when cards expire. Enable it in Stripe Dashboard > Settings > Card updates. This prevents a significant portion of EXPIRED_CARD failures from occurring by updating stored card data before the renewal attempt.
Open in admin →Send immediate payment method update email
Send the customer an immediate email requesting they update their payment method. Include a direct link to their customer portal payment method page. In Recharge Admin, use the customer record's Send Payment Update Email action. Do not wait for additional dunning retries — they will fail.
Open in admin →Run a pre-expiry sweep before high-expiration months
In December, query your Recharge customer base for subscriptions with cards expiring in January or February. Send proactive payment update requests before the expiration date. This prevents the EXPIRED_CARD failures from occurring rather than recovering them after the fact.
Frequently asked questions
Does Stripe Account Updater prevent all EXPIRED_CARD failures?
Account Updater covers Visa and Mastercard cards enrolled in their network update programs. It does not cover all card issuers — American Express and some smaller issuers do not participate. Account Updater typically reduces EXPIRED_CARD failures by 40–60% for merchants with predominantly Visa/Mastercard customer bases.
Why do EXPIRED_CARD failures cluster in January and February?
Cards issued with December or earlier expiration dates expire at year-end. Merchants with subscription billing cycles in January and February see bulk failures when stored cards from the prior year expire simultaneously. Running a proactive pre-expiry sweep in December before these billing cycles prevents the clustering effect.
Can I detect an expiring card before it causes a subscription failure?
Yes, if you have access to the card expiration date stored in Stripe or Recharge. Query Stripe's Customer objects for payment methods with exp_month and exp_year within the next 60 days. Contact those customers proactively before the renewal attempt fails. Recharge does not expose card expiration dates directly via its standard UI.
How do I prevent EXPIRED_CARD from wasting Recharge dunning attempts?
Configure Recharge dunning to treat EXPIRED_CARD as an immediate customer action trigger, skipping retries entirely. Set the dunning rule for this error type to send a payment update email on day 1 with no scheduled retries. Retrying an expired card is guaranteed to fail and wastes your dunning attempt budget.
Detect this error automatically
Free cross-stack scan finds all billing errors in 60 seconds.
Run Free Scan →