Failed payments are the worst kind of churn: nobody wanted to cancel, and you still lose the revenue.
The dunning email (a.k.a. “payment failed”, “update billing”, “card declined”) is a transactional email with one job: get the user back to a valid payment method with minimal stress.
Why most dunning emails fail (even when the product is great)
Dunning emails often get written like support tickets: vague problem, vague instructions, and a link that looks like it’s going to steal your card.
Users don’t wake up excited to “update billing.” They’re busy. They’re suspicious. And half of them are reading on mobile while their bank’s fraud filter is already on high alert.
A quick teardown: 9 fixes that recover more payments (without angry replies)
1) Name the problem in plain language
“Action required” is useless. “Your payment failed” is clear.
2) Reduce the “phishing smell”
Payment emails are prime phishing targets. If your email looks like a scam, users won’t click. If your link goes to a weird domain, users shouldn’t click.
- Use your main product domain (no link shorteners, no random subdomains).
- Include a recognizable sender name and a consistent “from” address.
- Avoid fake urgency and exclamation marks. You’re not a casino.
3) One primary CTA. Not three.
A dunning email is not a menu. The primary CTA should go directly to the billing update screen.
Bad primary CTA: View invoice (it adds a step)
4) Tell them what happens if they do nothing
Users need a consequence, but not a threat. The best dunning copy sounds like a calm operator, not a debt collector.
- Clear: “Your subscription may be paused on
Mar 3.” - Clear: “We’ll retry automatically over the next
3 days.” - Too much: “FINAL NOTICE: PAY NOW OR LOSE ACCESS.”
5) Don’t blame the user (or the bank)
“Your card was declined” reads like an accusation. The user didn’t do anything wrong.
6) Add a short “common reasons” line (optional)
A single sentence can prevent support tickets and increase conversions.
Example: “This can happen due to expired cards, spending limits, or bank security checks.”
7) Show just enough context to be credible
Show the plan name and the amount. Do not include full card numbers.
- Include: plan, amount, billing period, next retry date (if relevant).
- Include: last 4 digits (optional) and card brand (optional).
- Avoid: long tables, receipts, invoice line items (that’s a different email).
8) Make the “safe exit” obvious
Some users will want to cancel instead of update. If you hide that path, they’ll reply angrily, chargeback later, or mark the email as spam.
9) Use subject lines that feel transactional
Subject lines should be boring, clear, and searchable.
- Payment failed for {Product}
- Update your billing to keep {Product} active
- We couldn’t process your subscription payment
A minimum viable dunning email structure
- Headline: Payment didn’t go through
- 1-line context: Plan + amount + what will happen next
- Primary CTA: Update billing
- Support / secondary: Manage subscription, contact support
- Trust: domain consistency, footer, and no sketchy links
Ship it: use a dunning template you can customize
If you want a clean base you can drop into React Email, start with our failed payment email template.
And if you’re building the broader billing lifecycle, pair it with a renewal reminder (reduce surprises) and a clean invoice/receipt email (reduce “what is this charge?” tickets).