Skip to content

Dunning Playbook

Complete guide to recovering failed payments and reducing involuntary churn.


  • 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

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

Section titled “Pre-Dunning: Prevent Failures Before They Happen”
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

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:

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

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)

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

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

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):

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:

  • 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

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

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

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

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

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

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
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)

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

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

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

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

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] │
│ │
└─────────────────────────────────────┘

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

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%
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