GuidePayment Recovery

How to Set Up an Effective Dunning Sequence

Step-by-step guide to building a dunning sequence that recovers failed payments. Timing, channels, messaging, and automation setup.

7 min readJanuary 31, 2026By Rekko Team

In this guide: Complete walkthrough with formulas, examples, and practical tips you can apply today.

A dunning sequence is the series of messages and actions you trigger when a payment fails. Get it right, and you recover 60-70% of failed payments. Get it wrong, and customers churn without ever knowing there was a problem.

This guide walks through setting up a dunning sequence from scratch.

Before you build: Key decisions

1. How long is your grace period?

The grace period is the time between payment failure and subscription cancellation.

Recommendations:

  • B2C SaaS: 7-10 days
  • B2B SaaS: 10-14 days
  • Enterprise: 14-21 days

Longer isn't always better — you're providing free service during this time.

2. How many touchpoints?

Most effective sequences have 4-6 touchpoints across the grace period. Too few and customers miss the message. Too many and you're spamming.

3. What channels?

Email is the baseline. SMS significantly improves recovery (15-25% lift). Use both if possible.

4. What triggers suspension vs cancellation?

Some businesses suspend (access removed, account preserved) before full cancellation (data deleted). Decide your policy.

The sequence framework

Here's a proven framework for a 10-day grace period:

Day 0: Payment fails

Actions:

  • Detect failure via webhook
  • Classify as soft decline or hard decline
  • Schedule first retry (if soft decline)
  • Send first notification email

Email #1: Informational

Purpose: Let them know there's a problem.

Tone: Friendly, not alarming.

Content:

  • What happened: "Your payment didn't go through"
  • Why it matters: Brief mention of service continuity
  • What to do: One clear CTA to update payment
  • What happens next: "We'll retry in a few days"

Day 2-3: First reminder

Actions:

  • Second retry attempt
  • Send reminder email

Email #2: Gentle reminder

Purpose: Remind those who missed or ignored email #1.

Tone: Slightly more direct.

Content:

  • Reiterate the problem
  • Mention the grace period: "You have until [date]"
  • CTA to update payment
  • Offer help if there's an issue

Day 4-5: Add urgency

Actions:

  • Third retry attempt
  • Send SMS (if enabled)
  • Send urgent email

SMS #1:

[Name], your [Product] payment failed. Update your card to keep access: [link]

Email #3: Urgency

Purpose: Create urgency without being threatening.

Tone: Direct, concerned.

Content:

  • Clear deadline: "Your account will be suspended in 3 days"
  • Explain what they'll lose
  • CTA prominently placed
  • Offer to help

Day 7: Final warning

Actions:

  • Final retry attempt
  • Send final warning email and SMS

Email #4: Final warning

Purpose: Last chance before action.

Tone: Urgent but not aggressive.

Content:

  • "This is your final reminder"
  • Suspension happens tomorrow
  • What to do right now
  • What happens to their data

SMS #2:

Final reminder: Your [Product] access will be suspended tomorrow. Fix it now: [link]

Day 8-10: Suspension

Actions:

  • Suspend subscription (remove access)
  • Send suspension notification
  • Begin win-back sequence

Email #5: Suspension notice

Purpose: Confirm what happened and offer path back.

Tone: Matter-of-fact, door open for return.

Content:

  • "Your account has been suspended"
  • Data is safe for X days
  • How to reactivate: one click
  • No hard feelings

Day 14+: Win-back

Actions:

  • Send win-back email
  • Optional: SMS
  • Eventually: full cancellation

Email #6: Win-back

Purpose: Recover customers who might want to return.

Tone: Friendly, low-pressure.

Content:

  • "We miss you"
  • Easy return with one click
  • Maybe mention what they're missing
  • Respect if they don't return

Setting up the automation

If using Stripe Billing

Stripe has built-in dunning via Smart Retries and email notifications:

  1. Go to Settings → Billing → Subscriptions
  2. Configure retry schedule
  3. Enable email notifications
  4. Customize email templates (limited customization)

Stripe's built-in dunning is basic. For better results, use a dedicated tool.

If using a dunning tool

Tools like Rekko, Churnkey, or Stunning handle this:

  1. Connect your Stripe account
  2. Configure grace period
  3. Set up email sequence (use their templates or customize)
  4. Enable SMS if available
  5. Configure retry logic
  6. Set suspension/cancellation triggers

These tools provide better templates, multi-channel, and analytics.

If building custom

You'll need:

  1. Webhook listener — Catch invoice.payment_failed from Stripe
  2. State management — Track each customer's dunning stage
  3. Job scheduler — Queue emails and retries at specific times
  4. Email service — Transactional email (SendGrid, SES, etc.)
  5. SMS service — Twilio, MessageBird, etc.
  6. Payment link generator — Create update links for customers

It's doable but significant engineering effort.

Message templates

Email 1: Initial notification

Subject: Your [Product] payment didn't go through

Hey [Name],

We tried to charge your card for your [Product] subscription ($[amount]), but it didn't go through.

This usually happens when:
- Your card expired
- There weren't enough funds
- Your bank blocked the charge

No worries — just update your payment info and you're all set:

[Update Payment Button]

We'll automatically retry in a few days, but updating now ensures no interruption.

Questions? Just reply to this email.

[Your team]

Email 4: Final warning

Subject: Final notice: Your [Product] account will be suspended

[Name],

This is your last reminder before we suspend your [Product] account.

We've tried multiple times to process your $[amount] payment without success. If we don't receive payment by [date], your access will be suspended.

Here's what that means:
- You won't be able to log in
- [Specific feature loss]
- Your data will be safe for 30 days

Fix this now — it takes 30 seconds:

[Update Payment Button]

If something's wrong and you need help, reply to this email.

[Your team]

SMS: Day 5 reminder

Hi [Name], your [Product] payment failed. Your account will be suspended in 3 days unless you update your card: [link]

Testing your sequence

Before going live:

  1. Test with your own account — Trigger a failure, watch the sequence
  2. Check all links — Every CTA should work
  3. Review on mobile — 60%+ of emails are opened on phones
  4. Test SMS delivery — Verify messages arrive correctly
  5. Confirm suspension logic — Does access actually get removed?
  6. Test reactivation — Can suspended users easily return?

Measuring success

Track these metrics:

  • Recovery rate — % of failed payments recovered
  • Recovery by day — Which touchpoint drives most recoveries?
  • Open rate by email — Which subjects work?
  • Click rate — Is the CTA effective?
  • SMS recovery rate — Is SMS worth the cost?

Use data to optimize. If Email #2 has low opens, try a different subject. If day 7 recoveries spike, your urgency messaging works.

Common mistakes

Starting too late. First email should go out within hours of failure, not days.

Being too gentle. By email #4, be direct. "Your subscription will be canceled" is clearer than "there may be an interruption."

Too many emails, too few channels. 6 emails but no SMS is less effective than 4 emails + 2 SMS.

Hard-to-find CTA. The update payment link should be impossible to miss.

No mobile optimization. Test on actual phones.

Forgetting hard declines. Hard declines need different messaging — retries won't help.

One-size-fits-all. High-value customers might deserve a phone call, not just emails.

A well-built dunning sequence pays for itself many times over. Take time to set it up right.

dunningsetuppayment recoveryautomation

Put This Into Practice

Understanding churn metrics is the first step. Rekko helps you act on them by automatically recovering failed payments.

Related Guides