Dunning Email Swipe File
Plain-text dunning emails that recover failed payments without sounding like a debt collector. A 3-email sequence for the standard retry window, plus scenario-specific templates for expired cards, soft declines, and 3D Secure.
Replace {name}, {product}, {update_link}, and {founder} with your values. Copy and paste into Stripe Billing, your ESP, or your own dunning script.
The 3-email failed payment sequence
Send these in order, timed to Stripe's smart retry schedule. Together they recover the bulk of involuntary churn.
Day 1: First Notice
SequenceSent within an hour of the first failed charge. Calm, non-alarming, single ask: update the card.
Subject: Your last payment for {product} didn't go through
Hi {name},
Just a heads up: your most recent payment for {product} failed.
This usually happens because of an expired card, a new card number, or a quick bank hold. It's almost never deliberate.
If you can update your card here, we'll retry the charge automatically:
{update_link}
No action needed beyond that. Your account stays active.
{founder}Day 3: Polite Follow-up
SequenceSent 72 hours after the first email. Slightly more direct, reminds them of access at stake.
Subject: Quick reminder about {product}
Hi {name},
Following up on the payment that didn't go through. We've retried a couple of times but the charge is still failing.
You can update your card here:
{update_link}
Your access to {product} stays active for another {days_until_cancel} days while we keep trying. After that the subscription will pause automatically. I'd rather not let that happen if it can be avoided.
{founder}Day 7: Final Reminder
SequenceSent before the subscription is auto-cancelled. Clear about the consequence, warm in tone.
Subject: Last reminder: {product} subscription is about to pause
Hi {name},
Last note from me. Your {product} subscription will pause tomorrow if the payment doesn't go through.
Updating your card takes 30 seconds:
{update_link}
If you've moved on from {product}, no worries. Reply and let me know and I'll close it cleanly. But if you still want access, this is the moment to update the card.
{founder}Scenario-specific templates
Stripe tells you why each charge failed. Match the email to the decline_code and recovery rates climb significantly.
Soft Decline
Generic declineFor generic 'do not honor' or 'try again later' declines. These usually clear on their own, so the tone is light.
Subject: Your bank declined a charge for {product}
Hi {name},
Your card declined a charge for {product} just now. This is almost always a temporary thing: a fraud filter, a daily-spend limit, or a quick bank hold.
Two options:
1. Call your bank and tell them the charge from {product} is legitimate
2. Use a different card here: {update_link}
We'll retry automatically over the next few days either way.
{founder}Expired Card
decline_code: expired_cardFor confirmed expired-card declines. The fix is clear, so the email is just a quick nudge.
Subject: The card on your {product} account expired
Hi {name},
The card on your {product} account expired, so we couldn't process your last payment.
Update it here in 30 seconds and we'll re-run the charge:
{update_link}
Your account stays active in the meantime.
{founder}SCA / 3D Secure
authentication_requiredFor European customers when Strong Customer Authentication is required. The customer has to approve the charge in their banking app.
Subject: Your bank needs you to confirm the {product} charge
Hi {name},
Your bank flagged the latest {product} charge for additional confirmation. This is standard for European cards now (SCA / 3D Secure).
To complete the payment, open this link and approve the charge in your banking app when prompted:
{confirm_link}
Takes about 30 seconds. Once approved, the charge goes through and your subscription continues.
{founder}Final Reminder Before Cancellation
Last chanceStandalone version of the day-7 reminder. Use when you only want to send one email rather than a full sequence.
Subject: {product} will cancel tomorrow
Hi {name},
Quick heads up: your {product} subscription will be cancelled tomorrow because we couldn't collect the last payment.
If you still want to keep using {product}, update your card here:
{update_link}
If you've moved on, no need to do anything. Just wanted to make sure you weren't surprised.
{founder}Dunning email best practices
What separates dunning emails that recover 50% from ones that recover 15%.
Send from the founder, not billing@
A real person's email gets opened and acted on. A no-reply billing address gets ignored or sent to spam.
Keep them plain text
HTML invoices and big buttons trigger spam filters. Plain text deliverability is dramatically better and the email feels like a real heads-up.
Lead with the cause, not the threat
Customers respond better to 'your card expired' than to 'your account will be cancelled'. Tell them what happened first.
Match the decline reason
Stripe gives you a decline_code on every failed charge. Use it. An expired-card customer needs a different email than a fraud-hold customer.
Time the sequence with retries
Stripe's smart retries hit roughly day 1, 3, and 7. Send an email each time the retry fails so your customer can act before the next attempt.
Don't punish, don't beg
Failed payments are usually involuntary. A guilt-trip drives the customer further away. A helpful nudge gets the card updated.
Copy these manually, or let ChurnNote send them automatically.
ChurnNote watches your Stripe webhooks, fires the right email for the right decline code, and shows you which charges were recovered.
Start recovering failed paymentsFrequently Asked Questions
When should I send the first dunning email?
Within an hour of the first failed charge. The customer is most engaged with the product right after the charge fails. Waiting a day or longer means the moment passes and the email feels like an out-of-context billing problem rather than a quick fix.
How many emails should a dunning sequence have?
Three is the standard for SaaS: day 1, day 3, and day 7. That matches Stripe's smart retry cadence. More than four emails starts to feel like harassment, and beyond a week most involuntary churn cases are not coming back regardless.
Should dunning emails be plain text or HTML?
Plain text. HTML billing emails get flagged by spam filters far more often than plain text from a real person. Plain text also feels like a personal heads-up rather than an automated bill, which dramatically improves response rates.
What is SCA / 3D Secure and why does it need its own email?
SCA (Strong Customer Authentication) is a European regulation that requires banks to confirm certain online charges. The customer has to approve the charge in their banking app or via SMS. A normal 'update your card' email is useless here. The customer needs a link to confirm the existing charge, not replace the card.
How do I personalize these templates?
Replace the curly-braced variables: {name} with the customer's first name, {product} with your product name, {update_link} with your Stripe Customer Portal or billing update URL, {founder} with your signoff, and {days_until_cancel} with how long until auto-cancel. Everything else stays as is.
Will ChurnNote handle this for me?
Yes. ChurnNote watches your Stripe and Lemon Squeezy webhooks, picks the right email based on the decline code, sends it from your founder address in plain text, and tracks which charges were recovered. Setup takes about five minutes.
How ChurnNote helps
The right email at the right moment recovers half the failed payments most founders silently lose.
ChurnNote connects to Stripe or Lemon Squeezy and automatically captures cancellation reasons, recovers failed payments, and queues win-back emails. So you stop losing revenue silently.
Start recovering churnNext step
See how much these emails could recover for you
Plug in your MRR and failed payment rate to estimate the monthly revenue this sequence could bring back.