Skip to content

Dunning Playbook

Complete guide to recovering failed payments and reducing involuntary churn.


Why Dunning Matters

  • Failed payments cause 30-50% of all subscription churn
  • Most failed payments are recoverable with the right strategy
  • Subscription businesses lose an estimated $129 billion annually to involuntary churn
  • Effective dunning recovers 50-60% of failed payments

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

TimingAction
30 days before expiryEmail: "Your card ending in 4242 expires next month"
15 days before expiryEmail: "Update your payment method to avoid interruption"
7 days before expiryEmail: "Your card expires in 7 days — update now"
3 days before expiryIn-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:

ServiceNetworkWhat It Does
Visa Account Updater (VAU)VisaAuto-updates stored card numbers and expiry dates
Mastercard Automatic Billing Updater (ABU)MastercardSame for Mastercard
Amex CardrefresherAmerican ExpressSame for Amex

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

How to enable:

  • Stripe: Automatic — enabled by default
  • Chargebee: Enabled through gateway settings
  • Recurly: Built-in, enabled by default
  • Braintree: Contact processor to enable

Backup Payment Methods

Prompt for a second payment method:

  • During signup: "Add a backup payment method" (low conversion)
  • After first successful payment: "Protect your account with a backup card" (better timing)
  • After a failed payment is recovered: "Add a backup to prevent future interruptions" (best timing — they felt the pain)

Pre-Billing Notifications

For annual plans or high-value subscriptions:

  • Email 7 days before renewal with amount and date
  • Include link to update payment method
  • Show what's included in the renewal
  • Required by some regulations for auto-renewals

Smart Retry Strategy

Decline Type Classification

CodeTypeMeaningRetry?
insufficient_fundsSoftTemporarily low balanceYes — retry in 2-3 days
card_declined (generic)SoftVarious temporary reasonsYes — retry 3-4 times
processing_errorSoftGateway/network issueYes — retry within 24h
expired_cardHardCard is expiredNo — request new card
stolen_cardHardCard reported stolenNo — request new card
do_not_honorSoft/HardBank refused (ambiguous)Try once more, then ask for new card
authentication_requiredAuthSCA/3DS neededSend customer to authenticate

Retry Schedule by Provider

Stripe (Smart Retries — recommended):

  • Enable "Smart Retries" in Stripe Dashboard → Billing → Settings
  • Stripe's ML model picks optimal retry timing based on billions of transactions
  • Typically 4-8 retry attempts over 3-4 weeks
  • Recovers ~15% more than fixed-schedule retries

Manual retry schedule (if no smart retries):

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

Retry timing insights:

  • Retry on the same day of month the original payment succeeded
  • Retry after common paydays (1st and 15th of the month)
  • Avoid retrying on weekends (lower approval rates)
  • Morning retries (8-10am local time) perform slightly better

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

SettingRecommendation
Duration7-14 days after final retry
AccessDegraded (read-only) or full access
VisibilityIn-app banner: "Payment past due — update to continue"
RetryContinue background retries during grace
CommunicationDunning emails continue

Access Degradation Options

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

  • Lower friction, customer feels respected
  • Higher recovery rate (they still see value)
  • Risk: some customers exploit the grace period

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

  • Can view but not create/edit
  • Creates urgency without data loss fear
  • Clear message: "Update payment to resume full access"

Option C: Immediate lockout (not recommended)

  • Aggressive, damages relationship
  • Lower recovery rate
  • Only appropriate for very low-cost plans

Post-Grace Period

TimingAction
Grace period endsPause 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-pauseWin-back attempt with new offer
Day 60 post-pauseFinal win-back
Day 90 post-pauseData 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:

  • invoice.payment_failed — trigger dunning
  • invoice.paid — cancel dunning, restore access
  • customer.subscription.updated — status changes
  • customer.subscription.deleted — final cancellation

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:

  • Automatic retries with configurable schedule
  • Built-in dunning emails (customizable templates)
  • Grace period configuration per plan

Paddle

Managed dunning:

  • Paddle handles retries and dunning automatically
  • Limited customization (Paddle manages the relationship)
  • Webhook: subscription.payment_failed, subscription.cancelled
  • Best for hands-off approach

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:

  • Machine-learning retry optimization
  • Per-plan dunning schedules
  • Built-in Account Updater

In-App Dunning

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

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

Rules:

  • Show on every page load during dunning period
  • Allow dismiss (but show again next session)
  • Direct link to payment update (fewest clicks possible)
  • Don't block the product — let them continue using it
┌─────────────────────────────────────┐
│                                     │
│  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

MetricHow to CalculateTarget
Recovery rateRecovered payments / Total failed50-60%
Recovery rate by decline typeRecovered / Failed per typeSoft: 70%+, Hard: 40%+
Time to recoveryDays from failure to successful payment<5 days
Pre-dunning prevention ratePrevented failures / Expected failures20-30%
Dunning email open rateOpens / Sent per email60%+
Dunning email click rateClicks / Opens per email30%+
Revenue recovered (monthly)Sum of recovered payment amountsTrack trend
Revenue lost to involuntary churnSum of failed + unrecovered amountsTrack trend

Benchmarking

By company stage:

StageTypical Involuntary ChurnTarget After Optimization
Early (< $1M ARR)3-5% of MRR/month1-2%
Growth ($1-10M ARR)2-4% of MRR/month0.5-1.5%
Scale ($10M+ ARR)1-3% of MRR/month0.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

Released under the MIT License.