Dunning Email Examples That Actually Recover Revenue

Real templates for real failure types — soft declines, expired cards, and SCA failures. Written like a human, not a billing system. No AI copy, no corporate speak.

Executive Summary (TL;DR)

  • Stripe's default failed payment emails are generic, impersonal, and ignore the failure type entirely.
  • A dunning email that matches the reason for failure (soft decline vs. expired card vs. SCA) converts dramatically better.
  • The fastest path to payment recovery: send within 1 hour, assume innocence, link directly to Stripe Customer Portal.

3 Dunning Email Templates by Failure Type

Most dunning email advice gives you one template and tells you to send it to everyone. That's wrong. A customer whose card was declined for insufficient funds needs a completely different message than one whose card expired six months ago. Here are three templates we use in production at Dunning Lite, written for the actual failure type.

These aren't generated by AI. They're the result of testing what actually gets customers to click, update their card, and stay. Copy them. Adapt them to your product's voice. That's the whole point of this page.

Template 1 — Soft Decline (Insufficient Funds)

Soft declines are temporary. The customer almost certainly has money — their bank just flagged the charge as unusual, or they're between paychecks. Assume innocence entirely. No urgency theater. Just a friendly heads-up.

Subject line

Quick heads up about your [Product] subscription

Email body

Hey [First Name],

Looks like the renewal charge for [Product] didn't go through this time — it happens more than you'd think, and it's usually a bank thing, not anything you did.

To keep your access to [key feature] and [key feature], just update your payment method in a click:

→ Update my payment method

If you already sorted it from your bank's side, you don't need to do anything — we'll retry automatically in 24 hours.

Any questions, just reply here.
— [Your Name], founder of [Product]


Template 2 — Hard Decline (Expired or Canceled Card)

Hard declines mean the card is gone for good. The customer won't know until they try to use it somewhere. Be helpful, not accusatory. Give them a direct path to fix it — and mention the grace period so there's no panic.

Subject line

Your card on file needs updating

Email body

Hey [First Name],

The card we have on file for [Product] is no longer valid — it may have expired or been replaced by your bank. We tried to renew your subscription but weren't able to.

Your account is still active for now. To avoid losing access to [key feature], add a new card here (takes 30 seconds):

→ Update my card in Stripe's secure portal

You have until [date] before access is paused. If you need more time or have any questions, just reply to this email — I'll see it personally.

— [Your Name]
[Product]


Template 3 — SCA / 3D Secure Authentication Failure

SCA failures are uniquely confusing for customers. Their card is perfectly valid, they have money, but their bank requires an extra verification step that didn't happen. Most dunning tools send the same generic email for this — which completely misses the point. The customer needs to know why this happened and what to do, not just "your payment failed."

Subject line

One more step to keep your [Product] active

Email body

Hey [First Name],

Your bank requires an extra verification step before they'll approve the charge for [Product] — it's a security thing on their end (called 3D Secure), not a problem with your card or your account with us.

It takes about 10 seconds to complete:

→ Complete the verification and keep my access

Once you do that, you're all set — nothing else needed. Your card stays on file and future renewals happen automatically.

— [Your Name]
[Product]

Notice what all three have in common: no ALL CAPS, no "URGENT", no "your subscription has been SUSPENDED." Just honest, clear, human communication. That's what converts.


The Anatomy of a High-Converting Dunning Email

After testing these templates across multiple Stripe accounts, a clear pattern emerges. Here's what the emails that actually recover revenue have in common — and why each element matters.

✉️ Subject Line

Avoid "URGENT", "ACTION REQUIRED", "Your account has been suspended." These trigger anxiety, which triggers avoidance. "Quick heads up" and "needs updating" outperform alarm language in almost every A/B test. The subject line's only job is to get the open — the body does the actual work.

🤝 Opening

Assume innocence, never blame. "Your payment failed" puts the customer on the defensive immediately — they didn't do anything wrong, a bank made a decision. "Looks like the charge didn't go through this time" is a completely different psychological experience. Start from understanding, not accusation.

💎 Value Reminder

Don't talk about "your subscription" or "your plan." Talk about the specific features they use. "You'll lose access to your analytics dashboard and automated reports" is concrete and personal. "Your subscription will be cancelled" is abstract and cold. Make the cost of inaction real, but never threatening.

🔗 CTA

One direct link to the Stripe Customer Portal. Don't send customers to your homepage. Don't make them log in first. Every additional step between "I read this email" and "my card is updated" costs you a percentage of recoveries.

🧑 Tone

Sign it with your name. Use "I" not "we." Write it like you'd write a Slack message to a customer you respect. "The Billing Team" doesn't exist to your customer — you do. Personal emails get replies, and replies lead to saved subscriptions.

⏱️ Timing

Speed is everything. A customer who gets an email 5 minutes after a failed charge still has their billing context open in their head. One who gets it three days later has completely forgotten the charge was even attempted. See the timing section below for exact windows.


Why Stripe's Default Failed Payment Emails Don't Work

Stripe sends a default email when a payment fails. It's better than nothing — but barely. If you're relying on it for payment recovery, you're leaving real revenue on the table. Here's why.

Stripe Default
Dunning Lite
Generic for all failure types — same email whether it's a soft decline, expired card, or SCA failure
Tailored by failure code — the message matches what actually happened
No value reminder — only talks about the payment, not what the customer is about to lose
Highlights specific features at risk, making inaction feel costly in a personal way
Links to the wrong place — often sends to the Stripe dashboard or your app's homepage, not a direct update flow
Deep link directly to Stripe Customer Portal — card updated in 30 seconds, no login needed
Comes from Stripe — "no-reply@stripe.com" is not a relationship
Sent from your domain, signed with your name — a message from someone they know
No failure-type awareness in customer communication — Adaptive Acceptance helps retries, but not the email
Both smart retries and contextual emails — see how Stripe Smart Retries compare

None of this is a criticism of Stripe — they're building for every business at every scale. But if you're a micro-SaaS founder with real customers who know your name, you should be sending emails that reflect that.


Email Timing: When to Send Your First Dunning Email

Timing is the most underrated variable in payment recovery. The same email sent at different times produces radically different results. Here's what the data shows — and what we've observed across Stripe webhook events.

<1hr

Highest recovery rate

Customer still has billing context. An email that arrives within 60 minutes of an invoice.payment_failed webhook feels immediate and helpful, not like a delayed administrative notice. Recovery rates at this window are 2–3x higher than day-three sends.

Day 1–3

Second attempt window

If the first email didn't convert, a follow-up 24–48 hours later catches customers who saw the first email but didn't act yet. The tone should be slightly more direct — not threatening, but clear that the clock is running. Multi-sequence dunning is on our roadmap.

Day 7

Last chance before grace period ends

By day 7, you're reaching customers who have genuinely forgotten or deprioritized the issue. Be the most specific here: exactly what access they're about to lose, exactly when, and exactly what to click to fix it. No fluff — but still no CAPS, no panic, no blame.

Post-cancel

Win-back, not dunning

Once a subscription is canceled due to non-payment, you're no longer doing dunning — you're doing win-back. Different email strategy, different psychology, different CTA. Check our MRR loss calculator to understand what each churned customer actually costs before deciding how aggressive your win-back approach should be.


The Power of a Direct Payment Link

Don't send them to your app's homepage and force them to remember their password, find the "Billing" section, and update their card through four screens of navigation. That's not a billing flow — that's an obstacle course.

Send them directly to a static Stripe Customer Portal link. Stripe's Customer Portal is pre-authenticated, mobile-friendly, and lets customers update their card, change plans, or download invoices in one place. The link is static — you generate it once in your Stripe settings and it works for any customer who clicks it. You don't need custom backend logic. You don't need a billing portal rebuild. You need one URL in your dunning email.

This is also why the "Auto-Login" approach some tools advertise is less important than it sounds. Yes, magic links are nice. But a direct Customer Portal link with zero friction beats a magic-link flow that requires a working email-to-session handoff every time. Simple wins.

If you're also concerned about checkout quality as a factor in failed payments, our Stripe checkout audit tool can help you spot friction points before customers even reach the payment step.


What Dunning Lite Actually Does (Honest)

We built Dunning Lite because we were frustrated with the alternatives. The big dunning tools are priced for Series A startups. Stripe's built-in recovery is generic. And rolling your own webhook handler + email logic takes longer than building your actual product.

✅ What it does today

  • • Listens for invoice.payment_failed Stripe webhooks in real time
  • • Identifies the failure type (soft decline, hard decline, SCA) from the Stripe decline code
  • • Sends a failure-type-specific email within minutes — written by a human, not generated by AI
  • • Links directly to your Stripe Customer Portal for one-click payment update
  • • Tracks recovery in a simple dashboard

🔲 Not yet (roadmap)

  • • Multi-email sequences (Day 1, Day 3, Day 7)
  • • AI-generated or customized email copy per customer — deliberately not a feature
  • • The "Generate Template Source Code" button on this page — under development
  • • Win-back campaigns after cancellation

We're also not going to tell you Dunning Lite is for everyone. If you have 10,000 subscribers and need a 5-touch sequence with A/B testing and Salesforce integration, look at ChurnBuster or Baremetrics Recover. Dunning Lite is for founders who want something that works today, is honest about what it does, and doesn't charge you $200/month before you've recovered a single dollar.

Want to see it in action before committing? We have a live demo.


Frequently Asked Questions

What is a dunning email?

A dunning email is a message sent to a customer after a subscription payment fails, asking them to update their payment method. The term comes from old-school debt collection ("dunning" historically meant demanding payment), but in SaaS context it just means the automated recovery flow that runs after a failed charge. Good dunning emails feel nothing like debt collection — they're helpful, specific, and written from a place of genuine service.

How many dunning emails should I send?

For a bootstrapped micro-SaaS, one well-timed, well-written email recovers the majority of recoverable payments. Most industry data suggests 60–70% of recovered payments come from the first contact. A two-email sequence (immediate + Day 3) captures most of the rest. Beyond three emails, you're into diminishing returns and increasing unsubscribe rates. Focus on nailing email #1 before building a five-touch sequence.

What's the best subject line for a failed payment email?

Short, calm, and specific to the situation. "Quick heads up about your [Product] subscription" consistently outperforms alarm-based alternatives. Avoid: "URGENT", "Your account has been suspended", "Action required immediately." These trigger avoidance, not action. The goal of the subject line is just to get the email opened — save the urgency (if any) for the body, where you can contextualize it properly.

Should dunning emails come from a person or a company?

From a person, always. Your name, not "The [Product] Team" or "Billing Support." Customers who built a relationship with your product have implicitly built a relationship with you as the founder. An email from a person gets opened, gets replied to, and gets the payment updated. An email from a faceless company name gets filed under "deal with later" — which means never. This is one of the core reasons Dunning Lite's emails are human-written and founder-signed by default.

Does Dunning Lite write the emails for me?

No — and that's intentional. The templates are human-written and optimized for conversion, but they're designed to sound like you, not like a generic SaaS product. You customize the product name, the key features to highlight, and your signature. What Dunning Lite handles is the operational layer: listening for the webhook, identifying the failure type, selecting the right template, and sending it within minutes. The email still comes from your domain and sounds like your voice.

Don't want to write these yourself?

Dunning Lite sends failure-type specific recovery emails automatically — connect your Stripe in 2 minutes. Early Access, honest pricing, no BS.

Automate it with Dunning Lite →

Join The Dunning Letter

Tactical SaaS strategies to reduce churn and recover revenue. 1 email per month.