dunning-playbook

Complete guide to recovering failed payments and reducing involuntary churn.

Dunning Playbook

Complete guide to recovering failed payments and reducing involuntary churn.


Why Dunning Matters


The Dunning Timeline

Day -30 to -7: Pre-dunning (prevent failures)
Day 0:         Payment fails → Smart retry #1 + Email #1
Day 1-3:       Smart retry #2 + Email #2
Day 3-5:       Smart retry #3
Day 5-7:       Smart retry #4 + Email #3
Day 7-10:      Final retry + Email #4 (final warning)
Day 10-14:     Grace period ends → Account paused/cancelled
Day 14+:       Win-back sequence begins

Pre-Dunning: Prevent Failures Before They Happen

Card Expiry Management

| Timing | Action | |--------|--------| | 30 days before expiry | Email: "Your card ending in 4242 expires next month" | | 15 days before expiry | Email: "Update your payment method to avoid interruption" | | 7 days before expiry | Email: "Your card expires in 7 days — update now" | | 3 days before expiry | In-app banner: "Payment method expiring soon" |

Email template — Card expiring:

Subject: Your card ending in 4242 expires soon

Hi [Name],

The card on file for your [Product] subscription expires on [date].

Update your payment method now to avoid any interruption:

[Update Payment Method →]

This takes less than 30 seconds.

— [Product] Team

Card Updater Services

Major card networks offer automatic card update programs:

| Service | Network | What It Does | |---------|---------|--------------| | Visa Account Updater (VAU) | Visa | Auto-updates stored card numbers and expiry dates | | Mastercard Automatic Billing Updater (ABU) | Mastercard | Same for Mastercard | | Amex Cardrefresher | American Express | Same for Amex |

Impact: Reduces hard declines from expired/replaced cards by 30-50%.

How to enable:

Backup Payment Methods

Prompt for a second payment method:

Pre-Billing Notifications

For annual plans or high-value subscriptions:


Smart Retry Strategy

Decline Type Classification

| Code | Type | Meaning | Retry? | |------|------|---------|--------| | insufficient_funds | Soft | Temporarily low balance | Yes — retry in 2-3 days | | card_declined (generic) | Soft | Various temporary reasons | Yes — retry 3-4 times | | processing_error | Soft | Gateway/network issue | Yes — retry within 24h | | expired_card | Hard | Card is expired | No — request new card | | stolen_card | Hard | Card reported stolen | No — request new card | | do_not_honor | Soft/Hard | Bank refused (ambiguous) | Try once more, then ask for new card | | authentication_required | Auth | SCA/3DS needed | Send customer to authenticate |

Retry Schedule by Provider

Stripe (Smart Retries — recommended):

Manual retry schedule (if no smart retries):

| Retry | Timing | Best Day/Time | |-------|--------|--------------| | 1 | Day 1 (24h after failure) | Morning, same day of week as original | | 2 | Day 3 | Try a different time of day | | 3 | Day 5 | After typical payday (1st, 15th) | | 4 | Day 7 | Morning of the next business day | | 5 (final) | Day 10 | Last attempt before grace period ends |

Retry timing insights:


Dunning Email Sequence

Email 1: Payment Failed (Day 0)

Tone: Friendly, matter-of-fact. No alarm.

Subject: Action needed — your payment didn't go through

Hi [Name],

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

This happens sometimes — usually a quick card update fixes it.

[Update Payment Method →]

Your access isn't affected yet. We'll retry automatically, but
updating your card is the fastest fix.

Need help? Just reply to this email.

— [Product] Team

Email 2: Reminder (Day 3)

Tone: Helpful, slightly more urgent.

Subject: Quick reminder — update your payment for [Product]

Hi [Name],

Just a heads-up — we still haven't been able to process your
$[amount] payment for [Product].

[Update Payment Method →]

Takes less than 30 seconds. Your [data/projects/team access]
is safe, but we'll need a valid payment method to keep your
account active.

Questions? Reply here and we'll help.

— [Product] Team

Email 3: Urgency (Day 7)

Tone: Direct, clear consequences.

Subject: Your [Product] account will be paused in 3 days

Hi [Name],

We've tried to process your payment several times, but your
[card type] ending in [last 4] keeps getting declined.

If we don't receive payment by [date], your account will be
paused and you'll lose access to:

• [Key feature/data they use]
• [Their projects/workspace]
• [Team access for X members]

[Update Payment Method Now →]

Your data won't be deleted — you can reactivate anytime by
updating your payment method.

— [Product] Team

Email 4: Final Warning (Day 10)

Tone: Final, clear, no guilt.

Subject: Last chance to keep your [Product] account active

Hi [Name],

This is our last reminder. Your payment of $[amount] is past
due, and your account will be paused tomorrow ([date]).

[Update Payment Method →]

After pausing:
• Your data is saved for [90 days]
• You can reactivate anytime
• Just update your card to restore access

If you intended to cancel, no action needed — your account
will be paused automatically.

— [Product] Team

Grace Period Management

What Happens During Grace Period

| Setting | Recommendation | |---------|---------------| | Duration | 7-14 days after final retry | | Access | Degraded (read-only) or full access | | Visibility | In-app banner: "Payment past due — update to continue" | | Retry | Continue background retries during grace | | Communication | Dunning emails continue |

Access Degradation Options

Option A: Full access during grace (recommended for B2B)

Option B: Read-only access (recommended for B2C)

Option C: Immediate lockout (not recommended)

Post-Grace Period

| Timing | Action | |--------|--------| | Grace period ends | Pause account (not delete) | | Day 1 post-pause | "Your account has been paused" email | | Day 7 post-pause | "Your data is still here" reminder | | Day 30 post-pause | Win-back attempt with new offer | | Day 60 post-pause | Final win-back | | Day 90 post-pause | Data deletion warning (if applicable) |


Provider-Specific Setup

Stripe

Enable Smart Retries:

  1. Dashboard → Settings → Billing → Subscriptions and emails
  2. Enable "Smart Retries" under retry rules
  3. Set failed payment emails in Dashboard → Settings → Emails

Custom retry rules (if not using Smart Retries):

Retry 1: 3 days after failure
Retry 2: 5 days after failure
Retry 3: 7 days after failure
Final:   Mark subscription as unpaid after last retry

Webhook events to handle:

Chargebee

Built-in dunning:

  1. Settings → Configure Chargebee → Retry Settings
  2. Configure retry attempts and intervals
  3. Settings → Configure Chargebee → Email Notifications → Dunning

Dunning options:

Paddle

Managed dunning:

Recurly

Revenue Recovery:

  1. Configuration → Dunning Management
  2. Set retry schedule per plan
  3. Configure grace period and final action (pause vs cancel)

Advanced features:


In-App Dunning

Don't rely on email alone. Show payment failures in the app:

Banner Pattern

┌──────────────────────────────────────────────────────┐
│ ⚠ Your payment of $29 failed. Update your card to    │
│ avoid losing access. [Update Payment →]  [Dismiss]   │
└──────────────────────────────────────────────────────┘

Rules:

Modal Pattern (for final warning)

┌─────────────────────────────────────┐
│                                     │
│  Your account will be paused        │
│  on [date]                          │
│                                     │
│  Update your payment method to      │
│  keep access to your [X] projects   │
│  and [Y] team members.              │
│                                     │
│  [Update Payment Method]            │
│  [Remind Me Later]                  │
│                                     │
└─────────────────────────────────────┘

Measuring Dunning Performance

Key Metrics

| Metric | How to Calculate | Target | |--------|-----------------|--------| | Recovery rate | Recovered payments / Total failed | 50-60% | | Recovery rate by decline type | Recovered / Failed per type | Soft: 70%+, Hard: 40%+ | | Time to recovery | Days from failure to successful payment | <5 days | | Pre-dunning prevention rate | Prevented failures / Expected failures | 20-30% | | Dunning email open rate | Opens / Sent per email | 60%+ | | Dunning email click rate | Clicks / Opens per email | 30%+ | | Revenue recovered (monthly) | Sum of recovered payment amounts | Track trend | | Revenue lost to involuntary churn | Sum of failed + unrecovered amounts | Track trend |

Benchmarking

By company stage:

| Stage | Typical Involuntary Churn | Target After Optimization | |-------|--------------------------|--------------------------| | Early (< $1M ARR) | 3-5% of MRR/month | 1-2% | | Growth ($1-10M ARR) | 2-4% of MRR/month | 0.5-1.5% | | Scale ($10M+ ARR) | 1-3% of MRR/month | 0.3-0.8% |

ROI Calculation

Monthly failed payment MRR:        $10,000
Current recovery rate:              30% ($3,000 recovered)
Target recovery rate:               60% ($6,000 recovered)
Monthly improvement:                $3,000/month
Annual improvement:                 $36,000/year
Cost of dunning optimization:       ~$200-500/month (tooling)
ROI:                                6-15x