What is dunning management?
Dunning management is the process of systematically communicating with customers after a payment failure to recover the subscription before it lapses. The term comes from "dunning" — the centuries-old practice of requesting payment from debtors — but in SaaS, it's almost always about customers whose payments failed for technical reasons, not because they chose not to pay.
The key insight: most failed payments are recoverable. Studies across SaaS billing platforms consistently show that 40–70% of failed charges can be recovered if you contact the customer promptly and make it easy for them to update their payment method.
Why failed payments happen
Understanding the causes helps you write better dunning messages:
- Expired card (~35% of failures) — Customer got a new card but didn't update it. Easy to recover — they're still your customer, they just need to update a number.
- Insufficient funds (~20%) — Temporary cash flow issue, often resolves within days. A retry + reminder is often enough.
- Bank decline / do_not_honor (~25%) — Bank blocked the charge for fraud prevention, often incorrectly. Customer may not even know this happened.
- Card stolen/cancelled (~15%) — Customer needs to know so they can give you a new card. High recovery rate if you reach them quickly.
- Incorrect card details (~5%) — Usually happens when a card is re-entered manually with a typo.
The critical thing most founders miss
Most customers whose payments fail don't know it happened. Banks don't proactively notify cardholders about failed charges. If you don't tell them, they'll find out when their account is suddenly downgraded — at which point they're confused, frustrated, and more likely to just cancel than fix the payment.
The dunning management lifecycle
A proper dunning management system has four phases:
Stripe fires the invoice.payment_failed webhook. Your system records the failure and starts the dunning clock. Stripe's Smart Retries also begin in the background.
Send a calm, clear email. Explain that the payment failed, don't be accusatory, include a direct link to update their card. This email has the highest recovery rate of the sequence — catching customers while the issue is fresh.
For customers who didn't act on D+1. Slightly more urgent tone, still helpful. Reiterate the card update link. Remind them what they'd lose access to.
Most urgent email. Specify the exact date their account will be paused. This email converts well because the consequence is real and specific. Many customers who ignored D+1 and D+3 act on D+7.
Stripe cancels the subscription based on your billing settings. At this point, recovery requires a reactivation flow, not just a card update. Much harder to convert.
Dunning management strategies
1. Reactive dunning (most effective)
Trigger emails immediately after the invoice.payment_failed event. This is the approach RecoverKit uses — wait for a real failure, then act fast. Reactive dunning outperforms pre-dunning because it's not annoying customers with warnings before anything goes wrong.
2. Pre-dunning (supplementary)
Some platforms send a "your card expires soon" warning 30 days before a card expiry date. This can be useful, but requires storing and monitoring card expiry data. For most indie SaaS, reactive dunning alone is sufficient.
3. Smart retries (technical, automatic)
Stripe's Smart Retries automatically retries failed charges at ML-optimised times over the next 4–8 days. This runs in the background and handles purely technical failures (temporary network issues, transient bank errors). Smart retries alone recover 10–15% of failures — but they don't communicate with your customer at all, which is why email dunning is essential alongside them.
4. In-app notifications
If your app has an in-app notification system, showing a persistent banner ("Your payment failed — update your card to keep access") doubles the touchpoints without adding more email volume. Best as a supplement to email, not a replacement.
What a good dunning email looks like
The most effective dunning emails share these characteristics:
- Short — Under 100 words. The goal is one action: click the link to update payment. No fluff.
- Specific — Include the exact amount that failed. Generic "your payment failed" emails feel like phishing.
- Direct link — Link to the Stripe Billing Portal session for that specific customer, not a generic login page. One-click card update = much higher conversion.
- Non-accusatory — "Payment didn't go through" not "Your payment was declined." Banks decline cards, not customers.
- Sent from your domain —
[email protected]gets far better open rates than Stripe's default sender.
For complete templates for each stage, see our Stripe dunning email templates guide.
Dunning management metrics to track
- Dunning recovery rate: % of failed invoices recovered. Target: 35–60%.
- Time-to-recovery: How long from failure to successful payment. Lower is better — most recoveries happen within 48 hours of the first email.
- Email open rate by stage: D+1 should get 40–55% open rate; D+3 around 30%; D+7 often spikes back to 40%+ due to urgency.
- Involuntary churn rate: % of churned customers who left due to payment failure (not product dissatisfaction). A well-run dunning system should keep this below 1.5% of MRR monthly.
- Revenue saved per month: (Failed invoices × recovery rate × average subscription value). This is the direct business case for investing in dunning management.
Build vs buy: dunning management options
Build it yourself
Requires: Stripe webhook endpoint, database for recovery state, cron job, transactional email provider, Stripe Billing Portal session generation. Estimated build time: 1–2 days. Maintenance: ongoing (deliverability monitoring, edge case handling, copy updates).
Use Stripe's built-in dunning
Stripe has basic built-in dunning (enable in Dashboard → Settings → Billing → Automatic collection). Recovery rate: 5–15%. Limitations: unbranded generic emails, no customisation, poor deliverability, no timing control.
Stripe's default emails are not enough
Stripe's built-in dunning emails are generic, sent from Stripe's domain, and often land in spam. They're better than nothing but recover 3–5x less than a properly configured custom sequence.
Use a dedicated dunning tool
Tools like RecoverKit connect to your Stripe account via OAuth, listen to payment failure events, and automatically run the D+1/D+3/D+7 sequence from your own sender. Setup takes ~3 minutes, no code required.
- RecoverKit — focused on Stripe, simple setup, indie-hacker friendly pricing
- Stunning — more features, ~$50/month, suited for larger SaaS
- Churnbuster — full-featured, higher price point
- Userlist — lifecycle email platform that includes dunning as a feature
Common dunning management mistakes
- Waiting too long to send D+1 — Every hour of delay after failure reduces recovery rate. Send D+1 within 2–4 hours, not 24.
- Continuing to send after recovery — If the customer updates their card and payment succeeds, stop the sequence immediately. Sending a "final warning" after they've already paid destroys trust.
- Using Stripe's generic billing portal link — The generic portal URL requires customers to log in. Generate a customer-specific session URL (
stripe.billingPortal.sessions.create()) for one-click access. - Not sending from your own domain — Email from
[email protected]or unknown senders has far lower open rates. Use your product's email domain with proper DKIM/SPF. - Skipping dunning at early stage — Even with 50 subscribers, 5–15% involuntary churn compounds fast. The earlier you set it up, the more revenue you protect.
Dunning management for different SaaS stages
Pre-revenue / early beta
Not needed yet — focus on getting paying customers first. Set a reminder to configure dunning before your first 10 subscribers.
1–50 paying customers
At this stage, you can manually track failed payments in the Stripe Dashboard and follow up personally. This gives you valuable conversations about payment friction. As soon as personal follow-up becomes tedious, automate it.
50+ paying customers
Manual dunning stops working. Automate with a tool or build your own sequence. At this scale, every percentage point of recovery rate improvement is meaningful MRR.
$10k+ MRR
Dunning management becomes a priority financial system. At $10k MRR, 10% involuntary churn = $1,000/month in recoverable revenue. Optimise your sequence, test subject lines, and add in-app notifications.