DEV Community

insightlab
insightlab

Posted on

The Dunning Email Sequence That Recovers 30% of Failed Payments

Failed payments are the silent revenue killer in SaaS. Not the kind of churn where a customer clicks "cancel" — the kind where their card expires, the transaction silently fails, and your subscription engine quietly marks them as churned.

ProfitWell's data shows that 35% of SaaS churn is involuntary — driven by failed payments, not by customers who wanted to leave. That's more than a third of your lost revenue, and most of it is recoverable.

I've built and optimized dunning sequences across multiple B2B SaaS products. With the right sequence, you can recover 25–35% of failed payments. This guide breaks down exactly how — timing, copy, retry logic, and benchmarks.


Why Failed Payments Happen (And Why They're Growing)

Card failures happen for a handful of reasons:

  • Expired cards — The most common cause, especially for annual plans where the card ages 12 months between charges.
  • Insufficient funds — Less common in B2B, but happens with startup customers burning through runway.
  • Fraud blocks — Banks are getting more aggressive with false-positive fraud declines, particularly for international transactions.
  • Processor errors — Transient gateway issues that resolve on retry.

The trend is getting worse, not better. Stripe reported that involuntary churn rates have climbed as card networks tighten fraud detection. The good news: 62% of failed payments can be recovered if you contact the customer within the right window, according to Baremetrics data.


The Dunning Email Sequence: Timing Blueprint

Most SaaS companies send one email — "your payment failed" — and give up. That recovers maybe 15% of failed payments. A well-structured multi-touch sequence recovers double that.

Here's the sequence I've tested across three B2B SaaS products, consistently recovering 28–34% of failed payments:

Email 1: Pre-Expiration Heads-Up (D-3)

Timing: 3 days before the card on file expires (if you have expiry data) or 3 days before the next billing attempt for customers with a prior failed charge.

Goal: Proactive, low-friction heads-up. No urgency yet.

Subject line examples (pick one, A/B test):

  • "Your card ending in 4242 expires soon — quick update needed"
  • "Heads up: update your payment method before your next renewal"

Body template:

Hi [First Name],

Your [Product Name] subscription renews on [date]. We noticed the
card on file (ending in [last 4]) expires before your next billing date.

To avoid any interruption, update your payment method here:
[Update Payment Link — 30 seconds, no login required]

Your plan: [Plan Name] at $[amount]/month
Next billing date: [date]

Thanks for being a customer.

[Sender Name]
Enter fullscreen mode Exit fullscreen mode

Why this works: The pre-expiration email catches the most common failure cause before it happens. Recovery rate from this single email: 20–25% of at-risk accounts.


Email 2: Payment Failed — Immediate Notification (D+0)

Timing: Same day the charge fails. Send within 1 hour of the failed transaction.

Goal: Clear, direct notification with one-click fix.

Subject line examples:

  • "Your [Product Name] payment didn't go through"
  • "Update needed: we couldn't process your payment"

Body template:

Hi [First Name],

We tried to process your [Product Name] subscription payment today,
but it didn't go through.

Reason: [Stripe error message in plain English]

Here's what to do:
1. Update your payment method: [Secure Link]
2. We'll automatically retry the charge once your card is updated

You still have full access to [Product Name]. We'll retry in 3 days.

[Sender Name]
Enter fullscreen mode Exit fullscreen mode

Critical design choices:

  • Don't lock the account immediately. Give a grace period (7–14 days of continued access).
  • Use a hosted payment update link that doesn't require logging in. Every extra step costs you recoveries.
  • Translate processor error codes into plain English. "Card declined — please check with your bank" beats "error: card_declined."

Email 3: Second Attempt + Soft Urgency (D+3)

Timing: 3 days after the initial failure. Coincides with your second retry attempt.

Goal: Add gentle urgency without being aggressive.

Subject line examples:

  • "Still need your attention: [Product Name] subscription"
  • "3 days left to update your payment method"

Keep the body short: acknowledge the second failed attempt, state that account access will be paused in 4 days if payment isn't updated, and include the one-click update link. Reassure them that data and settings will be preserved for 30 days and reactivation is possible anytime.


Email 4: Final Notice (D+7)

Timing: 7 days after the initial failure. The account should now be suspended (access paused, data preserved).

Goal: Last chance, clear consequences, but not hostile.

Subject line examples:

  • "Final notice: your [Product Name] account has been paused"
  • "Your account is paused — reactivate before [date]"

Body should cover: account was paused due to failed payment, customer has 30 days to reactivate before data is permanently removed, and a one-click link to update payment and restore access immediately. Emphasize that all data, settings, and history are preserved.


Email 5: Win-Back (D+14)

Timing: 14 days after suspension. Optional but adds 3–5% additional recovery.

Offer a discount (50% off the next billing cycle works well) to incentivize return. Keep the email short and focused on the offer. Subject lines like "We miss you at [Product Name] — 50% off your next 3 months" consistently outperform guilt-based messaging.


Retry Logic: Getting the Technical Side Right

Your email sequence only works if your payment retry logic is configured properly.

Stripe Smart Retries

Stripe's Smart Retries uses machine learning to retry failed charges at optimal times. Configuration I recommend:

  1. Enable Smart Retries in Stripe Dashboard → Billing → Settings → Smart retries
  2. Set maximum retry attempts to 4 (the 4th attempt catches weekend failures)
  3. If using fixed intervals: D+1, D+3, D+5, D+8
  4. Set the email to send on each retry attempt — each retry is a natural touchpoint

Chargebee Configuration

  1. Configure dunning settings under Settings → Configure Chargebee → Dunning
  2. Set dunning cycle to 14 days with retries on days 1, 3, 5, and 8
  3. Enable auto-collection with the retry schedule
  4. Map each retry to your email sequence using event webhooks

The Retry-Email Sync

The most common mistake: retry logic and email timing are out of sync. Your emails should hit just before or after a retry attempt. When a customer updates their card, the immediate retry should happen within minutes — both Stripe and Chargebee support this. Make sure it's enabled.


Subject Line Optimization: What Actually Works

I've A/B tested over 40 subject line variants. Here's what consistently wins:

Do:

  • Use the product name (recognizability drives opens)
  • Include the specific action needed ("update," "fix," "confirm")
  • Reference urgency only when it's real (D+3 and later)

Don't:

  • Use ALL CAPS (triggers spam filters)
  • Be vague ("Important account update")
  • Use guilt-tripping language ("We hate to lose you")

The highest-performing subject line across all tests: "Your [Product Name] payment didn't go through" — 71% open rate, 34% click-through rate. Clear, specific, not manipulative.


Benchmark Data: What Recovery Rate Should You Expect?

Based on aggregated data from ProfitWell, Baremetrics, and my own implementation data:

Sequence Type Avg. Recovery Rate
Single email 12–18%
3-email sequence 20–25%
5-email sequence (as outlined above) 28–35%
5-email + win-back with discount 30–38%

Factors that affect recovery rate:

  • B2C vs. B2B: B2B typically recovers 5–8% higher — business customers are more motivated to keep tools running.
  • Annual vs. monthly: Annual plans have lower recovery rates (longer gaps between charges mean more card changes). Send a pre-expiration email 30 days before annual renewals.
  • Price point: Plans under $50/month recover better than plans over $500/month — at higher prices, customers may re-evaluate whether they still need the product.

Common Mistakes to Avoid

  1. Requiring login to update payment. Cuts recovery rates by 40%. Use a tokenized, no-login link.
  2. Suspending access too early. Maintain access for at least 7 days post-failure — the moment you cut access, perceived value drops.
  3. Sending all emails from "billing@company.com". Use a real person's name. Replies to dunning emails are common — they should go to a human.
  4. Not tracking recovery as a metric. Measure your dunning recovery rate monthly. It's one of the highest-ROI optimizations in SaaS.
  5. Same sequence for all plan types. Enterprise customers need a phone call, not an email. Segment by plan tier.

Quick Implementation Checklist

  • [ ] Enable smart retries on your payment processor
  • [ ] Build a 5-email sequence (D-3, D+0, D+3, D+7, D+14)
  • [ ] Set up no-login payment update links
  • [ ] Configure immediate retry on card update
  • [ ] Maintain account access for 7+ days after failure
  • [ ] Preserve account data for 30 days after suspension
  • [ ] Track and report recovery rate monthly
  • [ ] Segment dunning by plan tier (enterprise = human outreach)

Failed payments are the lowest-hanging revenue fruit in SaaS. You don't need to acquire new customers, build new features, or launch new campaigns. You just need to stop losing the customers who already said yes.

Start with Email 1 and Email 2 this week. Add the rest over the following month. Track your recovery rate — you'll likely see a meaningful revenue bump within 30 days.


Written by Insight Lab — B2B SaaS content that converts. Follow for weekly playbooks on growth, retention, and founder-led content.

Top comments (0)