Failed Payment Recovery

Failed Payment Email: 5 Templates That Recover Customers (2026)

A good failed payment email is short, specific, non-accusatory, and has one job: get the customer to click a link and update their card. Here are 5 templates you can copy and use today.

By He Ze · RecoverKit · March 2026 · 6 min read

Skip the templates — automate everything

RecoverKit connects to Stripe and automatically sends all 5 recovery emails at the right times. No setup, no code, no manual work.

Connect Stripe Free →

What makes a failed payment email effective

Before the templates: the anatomy of a failed payment email that works.

The Stripe Billing Portal link

Use stripe.billingPortal.sessions.create({ customer: customerId, return_url: '...' }) to generate a session URL for each customer. This creates a time-limited, customer-specific link that opens their payment management page directly — no login required. This single change dramatically improves conversion vs. a generic card update page.

Template 1 — Day 1 (send within 2 hours of failure)

The most important email in your sequence. Speed beats perfection here — send this as soon as possible after the invoice.payment_failed webhook fires.

~45%open rate
~18%recovery rate
Send within2 hours of failure
Subject: Quick note about your [Product] payment
Hi [First Name], Your payment of [amount] for [Product] didn't go through on [date]. This usually happens when a card expires or a bank flags the charge — takes about 60 seconds to fix: → Update your payment method: [BILLING_PORTAL_URL] Your subscription continues without interruption once updated. [Your Name]

Why this works

Short. Specific amount. No blame. One action. The billing portal URL is the most important element — make it stand out visually.

Template 2 — Day 3 (gentle reminder)

For customers who didn't act on Day 1. Slightly more context on what they might lose, but still helpful in tone.

~32%open rate
~11%recovery rate
Send onDay 3 after failure
Subject: Still having trouble with your [Product] payment
Hi [First Name], Just a quick follow-up — your [amount] payment for [Product] still hasn't gone through. We'd hate for you to lose access to [key feature or benefit]. Here's the link to update your card: → [BILLING_PORTAL_URL] If you're having trouble or want to discuss your subscription, just reply here — happy to help. [Your Name]

Variation: mention the specific feature they'd lose

If you know which features the customer actively uses, personalise the "we'd hate for you to lose access to" line. "We'd hate for you to lose your 47 saved reports" outperforms the generic version.

Template 3 — Day 7 (final notice)

The highest-converting email in the sequence because the consequence is real and specific. Many customers who ignored Day 1 and Day 3 act on Day 7. Make the date concrete — don't say "soon".

~41%open rate
~14%recovery rate
Send onDay 7 after failure
Subject: Your [Product] account will be paused on [specific date]
Hi [First Name], This is a final notice regarding your [Product] payment of [amount], now 7 days past due. Your account will be paused on [date — make this specific, e.g. "March 17"]. To keep your access: [BILLING_PORTAL_URL] If you're experiencing a billing issue or want to discuss your subscription, reply before [date] and we'll work something out. [Your Name]

Why Day 7 converts so well

The specific cancellation date creates genuine urgency without being manipulative — it's just accurate. Customers who want to stay have a clear deadline and a clear action.

Template 4 — Expired card (specific variant)

If you know the failure reason is expired_card (available in the Stripe charge decline code), use this more targeted version. Higher conversion because it explains exactly what happened.

Subject: Your card on file for [Product] has expired
Hi [First Name], The card we have on file for your [Product] subscription has expired — that's why your [amount] payment on [date] didn't process. Takes 30 seconds to add a new card: → Update payment method: [BILLING_PORTAL_URL] [Your Name]

Template 5 — Recovery confirmation (send when payment succeeds)

Often overlooked. When a customer updates their card and the payment succeeds, send this confirmation email. It closes the loop, reinforces that the problem is solved, and reduces support tickets from confused customers.

Subject: Payment sorted — your [Product] subscription is active
Hi [First Name], Your payment of [amount] for [Product] went through successfully. Your subscription is fully active — no action needed. Thanks for sorting this out quickly. [Your Name]

Critical: stop the sequence when payment succeeds

If you're running a Day 1/Day 3/Day 7 sequence, stop immediately when invoice.payment_succeeded fires. Never send a "final warning" after a customer has already paid. This destroys trust and generates angry support tickets.

Sending these emails: what you need

To send these emails, you need:

  1. A Stripe webhook endpoint listening to invoice.payment_failed and invoice.payment_succeeded
  2. A way to schedule D+3 and D+7 follow-ups (cron job or task queue)
  3. A transactional email provider (Resend, Postmark, SendGrid) sending from your domain
  4. Code to generate Stripe Billing Portal session URLs per customer

Build time: 1–2 days for an experienced developer. Alternatively, RecoverKit automates the entire sequence — connect your Stripe account and it handles everything described above without any code.

Subject line performance data

Based on aggregate data from SaaS dunning sequences:

For more complete guidance on the full dunning sequence strategy, see our dunning management guide and Stripe dunning email setup guide.

Automate all 5 emails automatically

RecoverKit connects to Stripe and sends the right email at the right time — Day 1, Day 3, Day 7, expired card variants, and recovery confirmation. No code, no cron jobs, no configuration.

Connect Stripe Free →

No credit card required · Disconnect anytime · Setup in 3 minutes