Payments fail. A lot. Understanding why they fail is the first step to preventing and recovering them.
Here are the top 10 reasons SaaS payments fail, ranked by frequency, with specific fixes for each.
1. Expired card (25-30% of failures)
The customer's card passed its expiration date. The bank won't process charges on expired cards, period.
Why it happens:
- Cards typically last 2-4 years
- Customers forget to update subscription payment methods
- New card arrives but old details remain in your system
How to fix it:
- Enable card updater services. Visa and Mastercard provide APIs that automatically update expired card info. Stripe's Card Account Updater handles this if enabled.
- Send pre-dunning emails. 2-3 weeks before expiration: "Your card expires soon. Update it to avoid interruption."
- In-app notifications. Show a banner when expiration is approaching.
Recovery chance: Low for retries, high for dunning (customers understand the issue clearly)
2. Insufficient funds (20-25% of failures)
The account doesn't have enough money to cover the charge at the moment of the transaction.
Why it happens:
- End of month, account is low
- Large purchase earlier depleted the balance
- Paycheck hasn't cleared yet
How to fix it:
- Retry timing matters. Wait 3-5 days, ideally hitting the 1st-5th or 15th-20th (payday windows).
- Charge earlier in billing cycle. If you charge on the 28th, you're hitting empty accounts. Try the 5th.
- Offer flexible billing dates. Let customers choose when they're charged.
Recovery chance: High — the customer has money, just not right now
3. Generic decline / Do not honor (15-20% of failures)
The bank rejected the transaction without giving a specific reason. This is frustrating because you can't tell exactly why.
Why it happens:
- Bank's fraud detection flagged something
- Internal bank limits or policies
- Previous suspicious activity on the account
- Sometimes just... bank systems being weird
How to fix it:
- Wait and retry. Fraud systems cool down. A 24-48 hour delay often works.
- Retry at different times. Morning vs evening, different day of week.
- Dunning is essential. Customer may need to call their bank.
Recovery chance: Medium — some resolve with retries, some need customer action
4. Lost or stolen card (8-10% of failures)
The customer reported their card lost or stolen. The bank blocked it immediately.
Why it happens:
- Wallet stolen
- Card compromised in a data breach
- Precautionary replacement
How to fix it:
- Don't retry. The card is dead.
- Immediate dunning. Customer knows they have a new card — remind them to update it.
- Make updating easy. Direct link to payment update page, not generic account settings.
Recovery chance: High — customer knows the situation, just needs to act
5. Invalid card number (5-8% of failures)
The card number doesn't match any valid card in the system.
Why it happens:
- Typo during original entry
- Test cards left in production
- Fraudulent signup with fake numbers
- Card number changed when reissued
How to fix it:
- Better validation at signup. Use Stripe's card validation or similar.
- Don't retry. Number is wrong, it won't work.
- Dunning with clear message. "The card number on file doesn't appear to be valid."
Recovery chance: Medium — depends on whether it was a typo or fraud
6. Card not supported (3-5% of failures)
Your payment processor doesn't accept this card type, or the card is restricted for certain transactions.
Why it happens:
- Prepaid cards that don't allow recurring charges
- Regional cards not accepted internationally
- Corporate cards with merchant category restrictions
- Debit cards with recurring payment blocks
How to fix it:
- Offer alternative payment methods. PayPal, bank transfer, different card networks.
- Clear messaging. "This card type isn't supported for recurring payments."
- Consider expanding accepted methods. More card networks = fewer failures.
Recovery chance: Medium — customer needs a different payment method
7. Transaction limit exceeded (3-5% of failures)
The customer hit their daily, weekly, or per-transaction spending limit.
Why it happens:
- Bank-imposed limits for fraud prevention
- Customer-set spending caps
- Daily limits on debit cards
How to fix it:
- Retry next day. Daily limits reset.
- Retry next month. Monthly limits reset.
- Consider smaller charges. Split annual into monthly to stay under limits.
Recovery chance: High — just timing issue
8. Processing error (3-5% of failures)
Something went wrong technically. Network timeout, system error, communication failure between parties.
Why it happens:
- Bank systems have hiccups
- Network connectivity issues
- Payment processor outages
- High traffic causing timeouts
How to fix it:
- Retry quickly. These are transient errors — try again in 2-6 hours.
- Monitor processor status. If Stripe is having issues, wait for resolution.
- Implement retry logic. Automatic retry for these error codes.
Recovery chance: Very high — truly temporary, will likely work on retry
9. Fraudulent transaction (2-3% of failures)
The bank's fraud detection system blocked the transaction as suspicious.
Why it happens:
- Unusual purchase pattern
- International transaction when customer usually buys local
- Recurring charge to a card that doesn't usually have them
- Card was actually stolen (correctly blocked)
How to fix it:
- Don't immediately retry. You might make things worse.
- Contact customer. They may need to confirm with their bank.
- Provide transaction details. Help them verify it's legitimate.
Recovery chance: Medium — requires customer to take action with their bank
10. Account closed (1-2% of failures)
The bank account associated with the card no longer exists.
Why it happens:
- Customer changed banks
- Account closed due to inactivity
- Fraud closure
How to fix it:
- Don't retry. Account is gone.
- Dunning immediately. Customer needs to provide new payment method.
- Make the ask clear. "The bank account linked to your card appears to be closed."
Recovery chance: Medium — customer definitely needs new payment method
Summary: Fix by failure type
| Failure Type | Retry? | Timing | Primary Fix |
|---|---|---|---|
| Expired card | No | — | Pre-dunning + card updater |
| Insufficient funds | Yes | 3-5 days | Retry around paydays |
| Generic decline | Yes | 24-48 hrs | Retry + dunning |
| Lost/stolen | No | — | Immediate dunning |
| Invalid number | No | — | Dunning |
| Card not supported | No | — | Alternate payment methods |
| Limit exceeded | Yes | Next day | Retry timing |
| Processing error | Yes | 2-6 hrs | Quick retry |
| Fraud block | Careful | — | Customer contacts bank |
| Account closed | No | — | Dunning |
The 80/20 of payment failures
Focus your efforts on the big three:
- Expired cards (25-30%) — Mostly preventable with pre-dunning and card updater
- Insufficient funds (20-25%) — Recoverable with smart retry timing
- Generic declines (15-20%) — Recoverable with retry + dunning
These three categories account for 60-75% of all failures. Get them right, and you've solved most of the problem.
The remaining long tail of edge cases (fraud, closed accounts, unsupported cards) happens less frequently but still needs handling. A good dunning sequence catches them all.