Stripe insufficient_funds — recovery guide
The customer's card didn't have enough money to cover the charge. Often self-resolves within 1–2 weeks. Here's how to time your retries and customer outreach.
TL;DR
The customer is broke right now, not broken. Wait 3–5 days (past most payday cycles), retry once. If still failing, email with a Billing Portal link so they can swap to a different card. Do not retry more than 3 times — it will keep failing until payday.
What does insufficient_funds mean?
insufficient_funds means the customer's card account does not have enough available balance for the charge. This is almost always on debit cards or low-limit credit cards near the end of a billing cycle.
Unlike card_declined, this one is specific: the bank told Stripe exactly why it refused. That's useful — you can time your retries intelligently.
Why it happens
- Debit card, pre-payday — most common. Customer will have funds in 1–14 days.
- Credit card over limit — the card's credit limit is hit. Could clear on billing cycle reset.
- Hold from another merchant — a hotel or gas station placed a large hold that's temporarily consuming available balance.
- Small available-but-not-enough — card has $40, your charge is $49. Partial availability doesn't help.
When to retry
Timing matters more here than for any other decline code. Payday patterns in the US:
- Bi-weekly (most common, ~36% of workers) — retry 14 days after failure hits a fresh payday
- Weekly (~32% of workers) — retry 7 days after failure
- Monthly (~20% of workers) — retry around the 1st or 15th of the next month
A reasonable default: retry at +3 days, +7 days, +14 days. Catches all three payday cadences with three tries.
What to tell the customer
Be kind. This customer is usually not churning by choice. The email script that works best:
Hi [name], your payment of $[amount] didn't go through this time. No stress — we'll try again in a few days. If you'd like to switch to a different card or update your info, you can do it here in 20 seconds: [Billing Portal link].
Do not say "insufficient funds." That embarrasses the customer and they'll churn from shame. "Didn't go through" is neutral and equally accurate.
Should you offer to move to a cheaper plan?
If this is a recurring pattern with the same customer (2+ insufficient_funds failures in 3 months), yes — offer a downgrade before they churn completely. A $9/mo customer is worth more than a $49/mo cancellation. RecoverKit's AI can detect this pattern and auto-include a downgrade offer in the second email.
Related decline codes
Want payday-aware retries to run themselves?
RecoverKit spaces retries intelligently across payday cycles and emails customers with the right tone at each step. $19/mo.
Start Free Trial →