Your payment just failed. The customer does not know. Their subscription is about to cancel. And the only thing standing between you and lost revenue is the email you send next.
That email is called a dunning email, and for most SaaS businesses, it is the single most important email you will ever send. Get it right, and you recover revenue that was about to walk out the door. Get it wrong — or worse, do not send one at all — and you lose a customer who never intended to leave.
This guide covers everything you need to know about dunning email best practices: what they are, the ideal sequence, subject lines that actually get opened, the right tone to strike, common mistakes to avoid, and real examples of what works and what does not.
What Are Dunning Emails?
Dunning emails are the messages you send to customers when their subscription payment fails. The term "dunning" comes from the old practice of making persistent demands for payment of a debt. In the SaaS world, it is less about demanding and more about notifying and making it easy to fix.
When a customer's credit card is declined — whether because the card expired, the bank flagged the charge, or there were insufficient funds — somebody needs to tell the customer what happened and guide them toward a solution. That is what dunning emails do.
Dunning emails are part of a broader failed payment recovery strategy that also includes smart retry logic and payment update pages. Retries handle soft declines (temporary issues where retrying the same card later might work). Dunning emails handle hard declines (situations where the customer needs to take action, like entering a new card number).
The two work together. While your retry system handles the automatic recoveries in the background, your dunning emails handle the cases that need human intervention.
The Ideal 3-Email Dunning Sequence
After testing and seeing data across thousands of subscription businesses, a 3-email sequence over 7-10 days consistently produces the best results. Fewer emails leaves money on the table. More emails annoys customers without meaningful additional recovery. Three is the sweet spot.
Email 1: The Friendly Heads-Up (Day 0 — immediately after failure)
The first email goes out right after the payment fails. The goal is simple: inform the customer, do not alarm them, and give them an easy path to fix it.
This email should be:
- Short and factual. Tell them their payment did not go through.
- Non-blaming. Frame it as something that happened, not something they did.
- Actionable. Include a prominent, one-click button or link to update their payment method.
- Reassuring. Let them know their account is still active and their data is safe.
Example: Good first dunning email
Subject: Quick heads up — your payment did not go through
Hi [Name],
We tried to process your subscription payment of $49 for [Product Name], but it was not successful. This can happen for a few reasons — an expired card, a temporary bank hold, or just a processing hiccup.
Your account is still active, but we will need an updated payment method to keep things running smoothly.
[Update Payment Method] (button linking directly to payment update page)
If you have any questions, just reply to this email and we will help sort it out.
— The [Product] Team
Notice what is not in this email: no guilt, no threats, no countdown timers, no "WARNING: YOUR ACCOUNT WILL BE SUSPENDED." The customer did not do anything wrong. Their card just hiccupped. Treat them accordingly.
Email 2: The Gentle Reminder (Day 3)
Three days later, send a follow-up. A lot of people saw the first email and meant to deal with it but got busy. Life happens. This email serves as a nudge.
This email should:
- Acknowledge that they might have missed the first email
- Remind them what they will lose access to if the payment is not resolved
- Emphasize specific value — mention features or data they rely on if possible
- Include the same one-click payment update link
Example: Good second dunning email
Subject: Your [Product Name] subscription needs attention
Hi [Name],
Just a friendly reminder that we were not able to process your latest payment of $49. We tried again but it still did not go through.
We would hate for you to lose access to [specific feature/data they use]. Updating your payment method takes less than 30 seconds:
[Update Payment Method]
If your card recently changed, that is probably all it is. A quick update and you are all set.
— The [Product] Team
The key shift in this email is the introduction of what they stand to lose. You are not threatening them — you are reminding them of the value they are getting. There is a big difference between "we will cancel your account" and "we would hate for you to lose access to your dashboards."
Email 3: The Final Notice (Day 7)
A week after the initial failure, it is time for the final email. This one introduces a clear deadline and a sense of appropriate urgency. Not panic. Not aggression. Just clarity about what happens next.
This email should:
- State clearly that this is the last reminder
- Specify exactly when their subscription will cancel (give a date, not "soon")
- Reiterate the one-click fix
- Offer a helping hand in case the issue is not straightforward
Example: Good final dunning email
Subject: Last chance to keep your [Product Name] account active
Hi [Name],
We have tried to reach you a couple of times about a payment issue on your [Product Name] account. Unfortunately, we have not been able to process your subscription payment, and we have not been able to charge the card on file.
If we do not receive a payment update by [specific date], your subscription will be cancelled and you will lose access to your account, including all your saved [data/reports/projects].
Updating takes less than a minute:
[Update Payment Method]
If something else is going on — budget changes, a different card you would prefer to use, or anything at all — just reply here and we will work with you.
— The [Product] Team
That last line matters more than you might think. Sometimes the payment issue is a symptom of something else. Maybe they want to downgrade. Maybe they need to switch to annual billing. By opening the door to a conversation, you give yourself a chance to save the customer even if the standard recovery flow does not work.
Subject Lines That Actually Get Opened
Your dunning email is worthless if it never gets opened. Subject lines are everything. Here are principles that work, followed by specific examples.
Be specific, not vague. "Important account update" gets ignored because it sounds like spam. "Your payment for [Product] did not go through" gets opened because it is specific and relevant.
Use the product name. Customers subscribe to dozens of services. If your subject line does not mention your product by name, they might not even realize which service has the issue.
Avoid all caps and excessive punctuation. "URGENT!!! PAYMENT FAILED!!!" goes straight to spam or straight to the trash.
Keep it short. Under 50 characters is ideal for mobile. Most people read email on their phones.
Subject lines that perform well:
- "Your [Product] payment did not go through"
- "Quick heads up about your [Product] subscription"
- "Action needed: update your payment for [Product]"
- "Your [Product] account needs a quick update"
- "We could not charge your card for [Product]"
Subject lines that perform poorly:
- "Payment failed" — too vague, no context, sounds like spam
- "URGENT: Account suspension notice" — too aggressive, triggers spam filters
- "Invoice #38291 past due" — too corporate, feels like a collections letter
- "Important information regarding your account" — generic, gets ignored
- "Hello from [Product]!" — gives no indication of the issue
Tone and Copy Tips: Friendly Wins Every Time
The biggest mistake SaaS companies make with dunning emails is treating them like debt collection letters. Your customer is not a debtor. They are a paying customer who hit a speed bump. The way you communicate during this moment shapes how they feel about your entire brand.
Write like a helpful friend, not a legal department
Your dunning email should sound like it was written by a real person who genuinely wants to help, not by a legal team covering liability. Use contractions. Use short sentences. Write the way you would talk to a colleague.
Never blame the customer
Instead of "you failed to make your payment," say "we were not able to process your payment." The difference is subtle but important. One points a finger. The other describes a situation.
Explain what happened in plain language
Most customers do not know what a "declined transaction" means in technical terms. Explain it simply: "Your card on file did not go through, which can happen when a card expires or when a bank temporarily blocks a charge."
Make the fix feel easy
Do not say "please log in to your account dashboard, navigate to billing settings, and update your payment method." Say "tap the button below to update your card — it takes about 30 seconds." Reduce the perceived effort.
Offer a way out that is not cancellation
Sometimes a failed payment is the customer's subconscious way of churning without actively deciding to. By offering alternatives — downgrade to a cheaper plan, switch to annual billing, pause the subscription — you can save customers who might otherwise drift away.
Common Dunning Mistakes That Kill Recovery Rates
Knowing what to do is only half the battle. Here are the most common mistakes that sabotage dunning email performance:
1. Not sending dunning emails at all
A shocking number of SaaS businesses rely entirely on Stripe's default retry behavior and never send a single email to the customer about a failed payment. Stripe will retry the charge a few times, but if the card is expired or cancelled, no amount of retrying will fix it. The customer needs to know about the problem, and they need a way to solve it.
2. Linking to your login page instead of a direct payment update page
Every extra click between the email and the payment update is a drop-off point. If the customer has to log in, navigate to settings, find the billing section, and then update their card, you will lose a significant percentage of them along the way. Use Stripe's Customer Portal or Billing Portal Sessions to generate a direct link that takes them straight to the payment update form.
3. Sending from a no-reply address
When a customer sees "noreply@yourcompany.com" in the from field, it signals that you do not want to hear from them. Some customers have questions or need help. Send from a real email address that someone monitors, or at minimum, a support address that gets read.
4. Using threatening or aggressive language
Words like "overdue," "delinquent," "suspended," and "collections" belong in debt recovery letters, not SaaS dunning emails. You are not chasing a debt. You are helping a customer fix a billing hiccup. The moment your email feels threatening, you have lost trust, even if the customer does update their card.
5. Sending too many or too few emails
One email is not enough — people miss emails constantly. But seven emails over three days is harassment. The 3-email sequence over 7-10 days strikes the right balance between persistence and respect. Each email should add something new (new framing, new urgency, new information) rather than repeating the exact same message.
6. Forgetting mobile optimization
Over 60% of emails are opened on mobile devices. If your dunning email has tiny text, a buried CTA button, or a payment update page that does not work on phones, your recovery rate will suffer. Test every dunning email on a phone screen before deploying it.
7. Not stopping the sequence when the payment succeeds
If a customer updates their card after the first email and the payment goes through, you absolutely cannot send them the second and third dunning emails. This sounds obvious, but it happens all the time when dunning sequences are not properly integrated with Stripe webhook events. Listen for invoice.payment_succeeded and immediately cancel any remaining dunning emails for that invoice.
What Good vs Bad Dunning Emails Look Like
Let's contrast two approaches to illustrate the difference.
Bad dunning email
From: noreply@example.com
Subject: PAYMENT OVERDUE — Action Required Immediately
Dear Customer,
Your payment of $49.00 (Invoice #INV-29481) is overdue. Failure to remit payment within 48 hours will result in suspension of your account and all associated services. Please log in to your account at https://example.com/login to resolve this matter.
Regards, Billing Department
What is wrong here: threatening tone, no-reply address, vague sender name, links to login page instead of direct payment update, treats the customer like a delinquent debtor, uses invoice numbers nobody remembers, all-caps subject triggers spam filters.
Good dunning email
From: sarah@example.com
Subject: Quick heads up — your Example App payment did not go through
Hi Alex,
Wanted to let you know that we tried to charge your Visa ending in 4242 for your Example App subscription ($49/month), but it did not go through. No worries — this happens sometimes, usually because of an expired card or a temporary hold from your bank.
Your account is still active. To keep it that way, just update your payment info here:
[Update My Card]
Takes about 30 seconds. If anything seems off, just reply and I will help.
— Sarah from Example App
What is right here: friendly human tone, real person's name, product name in subject, specific card details so the customer knows which card to check, direct link to payment update, reassurance that the account is still active, invitation to reply for help.
Timing and Technical Implementation
Getting the content right is critical, but so is the timing and the technical plumbing behind your dunning sequence.
On the Stripe side, your dunning flow starts when you receive an invoice.payment_failed webhook event. Check the last_payment_error.decline_code to understand what went wrong. For hard declines (expired card, card not valid), trigger the dunning sequence immediately because retries will not help. For soft declines (insufficient funds, temporary holds), you might want to let your retry logic attempt recovery first and only trigger dunning if the retries fail.
For sending the emails themselves, you want a system that:
- Triggers based on Stripe webhook events in real-time
- Cancels remaining emails when the payment is recovered (via
invoice.payment_succeeded) - Generates direct payment update links using Stripe's Billing Portal API
- Tracks open rates, click rates, and recovery rates for each email in the sequence
- Handles edge cases like multiple failed invoices for the same customer
Building this from scratch is doable but takes real engineering time — typically 2-3 weeks for a solid implementation plus ongoing maintenance. If you want to skip the build and just have it work, ChurnShield handles the full dunning sequence automatically. It connects to Stripe via OAuth in about two minutes, sends optimized dunning emails with direct payment update links, and coordinates them with smart retry logic so everything works together. You get a real-time dashboard showing which emails are recovering which payments.
Measuring Dunning Email Performance
Once your dunning sequence is live, track these metrics to optimize it over time:
- Open rate by email position. Email 1 should have the highest open rate. If Email 2 or 3 has a higher open rate, your first subject line needs work.
- Click-through rate on the payment update link. This tells you whether people are engaging with the email and actually clicking through to fix the problem.
- Recovery rate by email. Which email in the sequence actually recovers the most payments? Often it is Email 1 or Email 3 (the immediacy of the first, the urgency of the last).
- Time to recovery. How long after a failure does the average customer update their card? This helps you tune your email timing.
- Overall dunning recovery rate. Of all the payments that entered your dunning sequence, what percentage were ultimately recovered? Aim for 40-60%.
For more on measuring and reducing churn overall, including both the involuntary and voluntary sides, check out our companion guide on how to reduce SaaS churn rate.
Key Takeaways
Dunning emails are your last line of defense against involuntary churn. Here is what to remember:
- Send a 3-email sequence over 7-10 days. This is the sweet spot between persistence and patience.
- Be friendly, specific, and helpful. Never threatening, vague, or generic.
- Always include a direct link to a payment update page. Do not make customers navigate through your login flow.
- Use the product name in the subject line. People subscribe to a lot of things.
- Stop the sequence the moment the payment is recovered. Nothing erodes trust faster than getting a "your payment failed" email after you already fixed it.
- Measure everything. Open rates, click rates, and recovery rates by email position tell you exactly what to improve.
A well-crafted dunning sequence is one of the highest-ROI things a SaaS business can implement. It costs almost nothing to maintain, it runs automatically, and it recovers revenue from customers who want to keep paying you. Do not leave that money on the table.