Why failed payment recovery matters
When a Stripe payment fails, you have a narrow window to recover it before the customer churns involuntarily. The challenge: most SaaS founders don't realise how much this costs them.
Industry data consistently shows 5–9% of monthly subscription charges fail at any given time. For a $10,000 MRR SaaS, that's $500–900 disappearing every month — not because customers wanted to cancel, but because of expired cards, insufficient funds, or bank-side issues.
The good news: 20–40% of these failures are recoverable if you contact the customer quickly with the right message.
The key insight
Involuntary churn (payment failure) is fundamentally different from voluntary churn (deciding to cancel). The customer still wants your product — they just have a payment issue. A single well-timed email often fixes it.
How Stripe handles failed payments by default
Stripe has a built-in retry system called Smart Retries. By default, it retries failed charges over the next 4–8 days using ML to pick optimal times. Here's what it doesn't do:
- It doesn't send a customer-facing email explaining what happened
- It doesn't give the customer a direct way to update their card
- It doesn't personalise the message based on failure reason (expired card vs. insufficient funds)
- It doesn't escalate urgency if the first retry fails
Stripe's default dunning emails exist but they're generic, plain-text, and often land in spam. Most SaaS businesses see <15% open rates on them.
The recovery sequence that works: D+1 / D+3 / D+7
The most effective recovery sequences follow a simple pattern: contact the customer quickly, then follow up with increasing urgency.
Day 1 email — Friendly alert
Subject: "Quick note about your [Product] payment"
Tone: Helpful, not alarming. The customer may not even know the payment failed. Give them an easy one-click path to update their card. Keep it short — 3–4 sentences maximum.
Day 3 email — Gentle reminder
Subject: "Still having trouble with your payment — here's an easy fix"
Tone: A bit more direct. Acknowledge that this is the second note. Remind them what they'll lose access to. Keep the card update link prominent.
Day 7 email — Final notice
Subject: "Your [Product] account will be paused tomorrow"
Tone: Clear and specific about consequences. Specify the exact date. This email has the highest conversion rate because urgency is real.
Stop when payment succeeds
Critically: the sequence must stop the moment the payment goes through. If you send a "final warning" after they've already fixed their card, you damage trust. This is the main reason DIY solutions fail — the stop condition is as important as the send condition.
Building it yourself vs. using a tool
Building it yourself
If you want to build payment recovery yourself in Stripe, here's the technical path:
- Subscribe to the
invoice.payment_failedwebhook event - Store the failure in your database with a
recovery_statusfield - Set up a cron job (hourly recommended) to check which customers are at D+1, D+3, D+7
- Send personalised emails via a transactional email provider (Resend, Postmark, etc.)
- Subscribe to
invoice.payment_succeededto stop the sequence on recovery - Handle edge cases: customer cancels, card is permanently invalid, email bounces
Expected build time: 1–2 days for an experienced developer. Ongoing maintenance: testing, monitoring bounces, updating email copy.
Using RecoverKit
RecoverKit handles the entire D+1/D+3/D+7 sequence automatically. You connect your Stripe account via OAuth (read-only — we can't touch your money), and we listen for invoice.payment_failed webhooks. No code required, takes 3 minutes.
Common failure reasons and how to address them
- Expired card — Most common. Direct email link to Stripe's customer portal to add new card. Use
card_error / expired_cardin webhook data to customise message. - Insufficient funds — Often temporary. D+3 retry timing works well here. Don't be accusatory in emails.
- Card declined (generic) — Bank-side issue. Ask customer to contact their bank or use a different card.
- Card velocity limit — Unusual charge flagged by bank. Customer needs to approve the charge explicitly.
What recovery rate should you expect?
Recovery rates vary by business type, email quality, and timing. Benchmarks from recurring billing platforms:
- 20–30% — Minimum with any automated sequence
- 30–40% — Typical for well-configured D+1/D+3/D+7 sequences
- 40–60% — Top performers with personalised messages and proper timing
The biggest variable is speed: getting that Day 1 email out within 2 hours of failure makes a significant difference vs. sending it 24 hours later.
Measuring success
Key metrics to track:
- Recovery rate: Payments recovered / total payment failures
- Revenue recovered: Dollar value of recovered payments (your primary ROI metric)
- Email open rate by day: D+1 should be highest; if it's not, your subject lines need work
- Time to recovery: The faster customers update their card, the better