Most SaaS dunning emails fail for the same three reasons: the subject line sounds like a bill collector, the body reads like a legal notice, and the call-to-action requires the customer to log in and hunt for a form. Recovery rates on those emails rarely clear 20%.
The templates below are the opposite of that. They are short, human, and make updating a card a one-click action. They are the same patterns we use in Rebounce and that the best-performing SaaS teams run. Copy them, adapt the brand voice, and ship.
The Rules Before the Templates
Templates are worthless without a sequence and timing logic. A single "your payment failed" email sent once will recover about 10-15% of failed payments. The same email sent at the right cadence with the right subject line variations recovers 3-5x more.
Four rules before you copy anything:
- Send from a human, not a robot.
billing@andno-reply@sender addresses tank open rates. Use a real name at your domain: "Sarah from Linear <sarah@linear.app>". Open rates jump 30-50% just from this change. - Match the tone to the decline reason. An expired card is not a credit problem. A "insufficient_funds" decline is sensitive. A "do_not_honor" from the bank is neutral. Treat them differently.
- One link, not a form. The email should contain a single tokenized URL that opens a pre-authenticated card update page. Anything else (login walls, password resets, support emails) loses 40-60% of intent on the way.
- Stop when paid. Cancel the entire sequence the moment the retry succeeds. Customers who already paid getting a second "payment failed" email is the fastest way to churn a saved account.
Dunning is a direct-response channel. Optimize every email like it is the only one the customer will read - because for many, it is.
The 14-Day Dunning Sequence
Before the templates, the sequence itself. This is the cadence that outperforms in our testing and matches the standard dunning playbook:
| Day | Action | Goal |
|---|---|---|
| D0 | Retry + Email #1 (friendly heads-up) | Catch the 60% who just had a temporary decline |
| D2 | Retry (silent) | Attempt after most paychecks hit |
| D3 | Email #2 (direct, action-focused) | Capture people who missed email #1 |
| D5 | Retry + WhatsApp/SMS | Multi-channel push - WhatsApp hits 90%+ open rates |
| D7 | Email #3 (value reminder + urgency) | Remind them what they lose |
| D10 | Retry (final automated attempt) | Catch last-chance successful charges |
| D14 | Email #4 (final notice) + downgrade or cancel | Clean close, preserve goodwill |
The three email moments are D0, D3, D7, and D14. That is four emails total, spaced to feel helpful rather than harassing. Below is the copy for each, plus specialized variants for hard declines.
Email #1 - The Heads-Up (D0, sent immediately after first retry fails)
This email catches the 40-60% of failures that resolve with a nudge. Short, no alarm, one button.
Subject line options (A/B test these):
- Quick heads-up about your {{product_name}} payment
- Your card was declined - takes 30 seconds to fix
- Small hiccup with your {{product_name}} subscription
Body:
Hi {{first_name}},
Quick note - the card on file for your {{product_name}} subscription
was declined today when we tried to process your ${{amount}} payment.
This happens all the time (banks flag subscriptions as "unusual
activity", cards expire, limits get hit). No action needed beyond
updating your card when you get a minute.
→ Update your card (takes 30 seconds)
{{secure_update_link}}
We will automatically retry the payment once your card is updated.
Nothing to cancel, nothing else to do.
Ping me if you hit any trouble.
- {{sender_first_name}}
{{product_name}}
Why this works: No panic language. Normalizes the failure ("this happens all the time"). Pre-handles the anxiety response. One link, tokenized. Signed by a person.
Email #2 - The Direct Ask (D3)
By D3, the friendly heads-up did not work. Time to be direct without being aggressive. About 20-30% of remaining failures recover at this step.
Subject line options:
- Your {{product_name}} account will pause soon
- Action needed: update payment for {{product_name}}
- We are still unable to charge your card
Body:
Hi {{first_name}},
Following up on the failed payment from {{fail_date}}. We have tried
the card on file twice now and it is still being declined.
To keep your {{product_name}} account active, please update your
card here:
→ {{secure_update_link}}
If you are planning to cancel, no hard feelings - you can downgrade
or cancel directly from your account settings. But if this is just
a card issue, the link above will fix it in under a minute.
- {{sender_first_name}}
Why this works: States the facts. Preempts the churn-via-silence option by mentioning cancel explicitly - counterintuitively, this reduces churn because customers who want to cancel do so cleanly instead of letting the payment fail.
Email #3 - The Value Reminder (D7)
At this point the customer has ignored two emails. The third email is not about payment mechanics - it is about what they are about to lose.
Subject line options:
- You are about to lose access to {{product_name}}
- {{first_name}}, one week until your account pauses
- Heads up - {{product_name}} access ends {{suspension_date}}
Body:
Hi {{first_name}},
Your {{product_name}} account will be suspended on
{{suspension_date}} if we cannot process your payment.
Just to make sure you know what that means for you:
• {{usage_stat_1}} (e.g., "Your 14 active workflows will stop running")
• {{usage_stat_2}} (e.g., "Your team of 6 will lose access")
• {{usage_stat_3}} (e.g., "Exports and integrations will pause")
We would hate to interrupt your work over a card issue. If you are
planning to stay, one click fixes it:
→ {{secure_update_link}}
If you are planning to leave, let me know and I will make sure the
offboarding is clean - exports, data, the works.
- {{sender_first_name}}
{{sender_title}}, {{product_name}}
Why this works: Personalized usage stats make the loss concrete. Offers a clean exit as well as a clean stay. The sender title (e.g., "Founder" or "Customer Success Lead") adds weight.
Email #4 - The Final Notice (D14)
The grace period is over. This is a clean close, not a threat. Done well, it is also the single best "win-back" hook - customers who return after a final-notice cancel are often the stickiest cohort.
Subject line options:
- Your {{product_name}} account is now paused
- We have suspended billing - here is how to come back
- Final notice: {{product_name}} access ended today
Body:
Hi {{first_name}},
We tried 4 times over the last 14 days to process your payment and
all attempts were declined. I have paused your {{product_name}}
account to stop further retry attempts.
Your data is safe. We keep everything for 90 days in case you want
to come back:
→ Reactivate your account
{{secure_update_link}}
No pressure. If {{product_name}} was not a fit, I would genuinely
appreciate a one-line reply telling me why - it helps us build
something better.
Wishing you the best either way.
- {{sender_first_name}}
Why this works: Calm, human, final. The feedback request doubles as re-engagement - customers who reply at all are significantly more likely to reactivate. Never end with just silence.
Specialized Variants by Decline Reason
The above sequence is the default. But if you can read the Stripe decline code (or Paddle equivalent), customized copy outperforms generic dunning by 15-25%.
Variant: Expired Card (expired_card)
This is the easiest recovery. Not a money problem - just an admin task.
Subject: Your card on file expired
Hi {{first_name}},
The card ending in {{last4}} that you use for {{product_name}}
expired at the end of {{expiry_month}}.
Would you mind popping in a new one?
→ {{secure_update_link}}
Takes 30 seconds. We will not charge you anything extra - just
update the card and your normal ${{amount}}/mo billing will
resume.
- {{sender_first_name}}
Variant: Insufficient Funds (insufficient_funds)
Sensitive. Customers in this bucket are often experiencing cash flow issues. Aggressive emails here cause churn and support tickets. Soft touch.
Subject: No rush - your {{product_name}} payment
Hi {{first_name}},
Your card was declined for insufficient funds on the ${{amount}}
payment for {{product_name}}.
No stress - we will automatically retry in a few days. If you want
to use a different card, here is the link:
→ {{secure_update_link}}
And if you need to pause or downsize temporarily, just reply to
this email. We can work something out.
- {{sender_first_name}}
That "we can work something out" line recovers accounts that would otherwise churn in silence. A lot of SaaS teams find that 5-10% of insufficient_funds customers will reply asking for a temporary downgrade, which is a far better outcome than losing them entirely.
Variant: Bank Block (do_not_honor, generic_decline)
The bank blocked the charge, often as fraud prevention. The customer needs to either call their bank or use a different card.
Subject: Your bank blocked our charge
Hi {{first_name}},
Your bank declined our ${{amount}} charge for {{product_name}}.
This usually happens when a recurring charge gets flagged as
suspicious - annoying, but easy to fix.
Two options:
1. Call your bank and tell them to approve charges from
"{{billing_descriptor}}"
2. Use a different card:
→ {{secure_update_link}}
Option 2 is faster for most people.
- {{sender_first_name}}
Variant: Payment Method Needs Authentication (authentication_required)
Almost always an EU customer hitting SCA (Strong Customer Authentication). They need to 3D Secure verify.
Subject: Quick verification needed for your payment
Hi {{first_name}},
Your bank is asking for one-time verification before we can charge
your card. This is a standard EU requirement - nothing is wrong.
Click here to verify:
→ {{secure_update_link}}
You will see your bank's 3D Secure popup, approve it, and you are
done. Takes 20 seconds.
- {{sender_first_name}}
The "Payment Recovered" Confirmation
Do not forget this one. When the retry succeeds after a dunning email, confirm it immediately. Closes the loop and turns a near-churn moment into a positive touch.
Subject: Payment received - you are all set
Hi {{first_name}},
Good news - your {{product_name}} payment of ${{amount}} went
through. Your account is active and everything is running
normally.
Next billing date: {{next_billing_date}}.
Nothing else to do. Thanks for sticking with us.
- {{sender_first_name}}
What NOT to Put in Dunning Emails
Common mistakes that destroy recovery rates:
- Red colors, alarm emojis, all-caps subject lines. Triggers spam filters AND human defensiveness. A yellow or neutral tone outperforms red every time.
- Legal language. "Per our Terms of Service" in paragraph one is instant trash-bin behavior.
- Multiple links or buttons. More choices = less action. One primary CTA, period.
- Asking customers to log in. Tokenized, pre-authenticated update links outperform "log in to update" by 40%+.
- Corporate footers with 15 links. Makes the email look automated. Strip to one line with an unsubscribe fallback for deliverability.
- Sending without a failure check. Pausing the sequence the moment a retry succeeds is the single most important technical detail. Customers getting a "you failed to pay" email after already paying will churn out of sheer annoyance.
Subject Line Data You Can Steal
Based on open-rate testing across thousands of dunning emails, the patterns that consistently win:
- Question format beats statement format. "Need a minute to update your card?" beats "Please update your card."
- Lowercase feels more personal. "quick heads-up about your payment" > "Payment Update Required"
- Product name beats company name. "Your Linear subscription" > "A message from Linear, Inc."
- Specific time beats vague time. "30 seconds to fix" > "quick to update"
- Avoid the word "invoice". Triggers both spam filters and accounting-team routing. Use "payment" or "subscription" instead.
Deliverability - Templates Are Useless if They Land in Spam
Three technical details that matter more than any copy:
- SPF, DKIM, and DMARC configured on your sending domain. Non-negotiable in 2026 - Gmail and Yahoo require this for anything sent at scale.
- Dedicated subdomain for billing emails. Send dunning from
billing.yourapp.comrather than the main domain. Keeps reputation separate from marketing. - Plain-text version included. Every HTML email should have a plain-text alternative. Apple Mail, many corporate clients, and spam filters all read plain-text first.
The Honest Truth About DIY Dunning
You can implement all of this yourself with Postmark, SendGrid, or Resend plus your own webhook handlers. We have seen teams do it well. We have also seen teams spend 6 weeks building it, realize they also need multi-channel (SMS/WhatsApp), localization, and retry logic coordination with Stripe, and abandon the project.
If you are losing more than $2-3k/month to failed payments, a dedicated tool pays for itself in the first month. If you are losing less, the templates above applied to your existing email stack will recover 40-60% of what you are losing with a weekend of work.
Want the full multi-channel version of these templates running automatically? Rebounce plugs into Stripe or Paddle in 5 minutes and runs this sequence on autopilot.
Run free payment audit →