Why payments fail in the first place
The big four causes are expired cards (around 35%), insufficient funds (around 25%), issuer fraud declines (around 20%), and everything else (lost cards, closed accounts, daily limits, processor outages). The split matters because each cause needs a different response. Retrying an expired card 5 times accomplishes nothing. Retrying an insufficient-funds decline on the 1st of the month accomplishes a lot.
- Expired card: ~35% of failures
- Insufficient funds: ~25%
- Fraud/issuer decline: ~20%
- Other (closed account, limits): ~20%
How recovery actually works
Recovery is a sequence of automated retries, account updater lookups, and customer-facing emails, all coordinated so they don't conflict. The retry engine attempts the charge on a schedule. The account updater checks for new card numbers in the background. The email system nudges the customer to update if neither of the above works. Done right, the customer often never knows there was a problem.
Smart retry windows
Default Shopify retry logic is 3 attempts over 5 days, which is too aggressive and too short. A better window: retry at 1 hour (catches transient declines), 3 days (gives the issuer time to clear fraud holds), 7 days (catches paydays), and 14 days (final attempt before action). Spread across morning and evening attempts. SimpleSubscription uses this cadence by default and lets merchants override per-customer if needed.
Account updater: the free win
If you're on Shopify Payments, the account updater is already running and you're getting recoveries you don't even see. If you're on Stripe Billing or another processor, check that it's enabled. This single setting recovers 8-12% of failures with no customer interaction and no email sent. It's the cheapest revenue you'll ever make, and most merchants don't realise it's a checkbox they haven't ticked.
What happens after the retry sequence exhausts
After all retries, you have three choices: cancel the subscription, pause it pending payment, or move it to a manual review queue. Cancelling is clean but loses customers who were genuinely about to update. Pausing is better: it preserves the subscription, stops billing, and lets the customer reactivate with one click when they're ready. Manual review only makes sense for high-LTV subscribers where a human touch pays off.
- Cancel: clean but loses recoverable customers
- Pause: best default for most subscriptions
- Manual review: reserve for high-LTV cases