Stripe + Resend: checking your failed-payment email flow
Sending dunning through your own provider (like Resend) gives you control over copy and deliverability — but it also means Stripe's automatic emails and your custom ones can fall out of sync. Here's the checklist for that setup.
Symptoms
- You moved dunning emails to Resend and recovery rates changed unexpectedly.
- Customers get duplicate emails (Stripe's plus yours) or none at all.
- The Resend email link doesn't match the current hosted invoice / portal action.
Common causes
- Stripe's automatic failed-payment emails are still on alongside the custom provider.
- The webhook that triggers the Resend email isn't firing on every invoice.payment_failed.
- The link in the Resend template is built once and never re-validated against Stripe.
Step-by-step fix
- Decide the single source of dunning email: Stripe OR your provider, not both.
- If using Resend, turn off Stripe's automatic failed-payment emails to avoid duplicates.
- Confirm your invoice.payment_failed webhook reliably triggers the Resend send.
- Verify the recovery link in the Resend template resolves to a working payment-update page.
- Add deliverability and link checks to your monthly monitor.
Sample output
Provider check: Stripe auto-emails OFF, Resend webhook fires 3/3, link resolves OK, 1 warning (SPF/DKIM on send domain).
FAQ
What can I see before subscribing?
You can explore the full sample report and every guide for free. A subscription adds recurring monthly monitoring on your own Stripe account, saved run history, change alerts, and exports.
Do I need Resend to use this?
No. The audit works whether you send dunning through Stripe or any provider. This guide just covers the extra checks a custom email provider introduces.
Last updated 2026-06-16. Checks specific to custom email-provider dunning setups.
Subscribe for monthly monitoring. Your first audit is generated today.
Your first audit shows exactly where recovery is leaking today. Monthly monitoring then catches the next break before it costs you another month of MRR.