Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Reduces SaaS churn by designing cancel flows, dynamic save offers, exit surveys, and dunning recovery systems.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/dunning-playbook.md
1# Dunning Playbook23Complete guide to recovering failed payments and reducing involuntary churn.45---67## Why Dunning Matters89- Failed payments cause 30-50% of all subscription churn10- Most failed payments are recoverable with the right strategy11- Subscription businesses lose an estimated $129 billion annually to involuntary churn12- Effective dunning recovers 50-60% of failed payments1314---1516## The Dunning Timeline1718```19Day -30 to -7: Pre-dunning (prevent failures)20Day 0: Payment fails → Smart retry #1 + Email #121Day 1-3: Smart retry #2 + Email #222Day 3-5: Smart retry #323Day 5-7: Smart retry #4 + Email #324Day 7-10: Final retry + Email #4 (final warning)25Day 10-14: Grace period ends → Account paused/cancelled26Day 14+: Win-back sequence begins27```2829---3031## Pre-Dunning: Prevent Failures Before They Happen3233### Card Expiry Management3435| Timing | Action |36|--------|--------|37| 30 days before expiry | Email: "Your card ending in 4242 expires next month" |38| 15 days before expiry | Email: "Update your payment method to avoid interruption" |39| 7 days before expiry | Email: "Your card expires in 7 days — update now" |40| 3 days before expiry | In-app banner: "Payment method expiring soon" |4142**Email template — Card expiring:**43```44Subject: Your card ending in 4242 expires soon4546Hi [Name],4748The card on file for your [Product] subscription expires on [date].4950Update your payment method now to avoid any interruption:5152[Update Payment Method →]5354This takes less than 30 seconds.5556— [Product] Team57```5859### Card Updater Services6061Major card networks offer automatic card update programs:6263| Service | Network | What It Does |64|---------|---------|--------------|65| Visa Account Updater (VAU) | Visa | Auto-updates stored card numbers and expiry dates |66| Mastercard Automatic Billing Updater (ABU) | Mastercard | Same for Mastercard |67| Amex Cardrefresher | American Express | Same for Amex |6869**Impact:** Reduces hard declines from expired/replaced cards by 30-50%.7071**How to enable:**72- **Stripe**: Automatic — enabled by default73- **Chargebee**: Enabled through gateway settings74- **Recurly**: Built-in, enabled by default75- **Braintree**: Contact processor to enable7677### Backup Payment Methods7879Prompt for a second payment method:80- During signup: "Add a backup payment method" (low conversion)81- After first successful payment: "Protect your account with a backup card" (better timing)82- After a failed payment is recovered: "Add a backup to prevent future interruptions" (best timing — they felt the pain)8384### Pre-Billing Notifications8586For annual plans or high-value subscriptions:87- Email 7 days before renewal with amount and date88- Include link to update payment method89- Show what's included in the renewal90- Required by some regulations for auto-renewals9192---9394## Smart Retry Strategy9596### Decline Type Classification9798| Code | Type | Meaning | Retry? |99|------|------|---------|--------|100| `insufficient_funds` | Soft | Temporarily low balance | Yes — retry in 2-3 days |101| `card_declined` (generic) | Soft | Various temporary reasons | Yes — retry 3-4 times |102| `processing_error` | Soft | Gateway/network issue | Yes — retry within 24h |103| `expired_card` | Hard | Card is expired | No — request new card |104| `stolen_card` | Hard | Card reported stolen | No — request new card |105| `do_not_honor` | Soft/Hard | Bank refused (ambiguous) | Try once more, then ask for new card |106| `authentication_required` | Auth | SCA/3DS needed | Send customer to authenticate |107108### Retry Schedule by Provider109110**Stripe (Smart Retries — recommended):**111- Enable "Smart Retries" in Stripe Dashboard → Billing → Settings112- Stripe's ML model picks optimal retry timing based on billions of transactions113- Typically 4-8 retry attempts over 3-4 weeks114- Recovers ~15% more than fixed-schedule retries115116**Manual retry schedule (if no smart retries):**117118| Retry | Timing | Best Day/Time |119|-------|--------|--------------|120| 1 | Day 1 (24h after failure) | Morning, same day of week as original |121| 2 | Day 3 | Try a different time of day |122| 3 | Day 5 | After typical payday (1st, 15th) |123| 4 | Day 7 | Morning of the next business day |124| 5 (final) | Day 10 | Last attempt before grace period ends |125126**Retry timing insights:**127- Retry on the same day of month the original payment succeeded128- Retry after common paydays (1st and 15th of the month)129- Avoid retrying on weekends (lower approval rates)130- Morning retries (8-10am local time) perform slightly better131132---133134## Dunning Email Sequence135136### Email 1: Payment Failed (Day 0)137138**Tone:** Friendly, matter-of-fact. No alarm.139140```141Subject: Action needed — your payment didn't go through142143Hi [Name],144145We tried to charge your [card type] ending in [last 4] for your146[Product] subscription ($[amount]), but it didn't go through.147148This happens sometimes — usually a quick card update fixes it.149150[Update Payment Method →]151152Your access isn't affected yet. We'll retry automatically, but153updating your card is the fastest fix.154155Need help? Just reply to this email.156157— [Product] Team158```159160### Email 2: Reminder (Day 3)161162**Tone:** Helpful, slightly more urgent.163164```165Subject: Quick reminder — update your payment for [Product]166167Hi [Name],168169Just a heads-up — we still haven't been able to process your170$[amount] payment for [Product].171172[Update Payment Method →]173174Takes less than 30 seconds. Your [data/projects/team access]175is safe, but we'll need a valid payment method to keep your176account active.177178Questions? Reply here and we'll help.179180— [Product] Team181```182183### Email 3: Urgency (Day 7)184185**Tone:** Direct, clear consequences.186187```188Subject: Your [Product] account will be paused in 3 days189190Hi [Name],191192We've tried to process your payment several times, but your193[card type] ending in [last 4] keeps getting declined.194195If we don't receive payment by [date], your account will be196paused and you'll lose access to:197198• [Key feature/data they use]199• [Their projects/workspace]200• [Team access for X members]201202[Update Payment Method Now →]203204Your data won't be deleted — you can reactivate anytime by205updating your payment method.206207— [Product] Team208```209210### Email 4: Final Warning (Day 10)211212**Tone:** Final, clear, no guilt.213214```215Subject: Last chance to keep your [Product] account active216217Hi [Name],218219This is our last reminder. Your payment of $[amount] is past220due, and your account will be paused tomorrow ([date]).221222[Update Payment Method →]223224After pausing:225• Your data is saved for [90 days]226• You can reactivate anytime227• Just update your card to restore access228229If you intended to cancel, no action needed — your account230will be paused automatically.231232— [Product] Team233```234235---236237## Grace Period Management238239### What Happens During Grace Period240241| Setting | Recommendation |242|---------|---------------|243| Duration | 7-14 days after final retry |244| Access | Degraded (read-only) or full access |245| Visibility | In-app banner: "Payment past due — update to continue" |246| Retry | Continue background retries during grace |247| Communication | Dunning emails continue |248249### Access Degradation Options250251**Option A: Full access during grace (recommended for B2B)**252- Lower friction, customer feels respected253- Higher recovery rate (they still see value)254- Risk: some customers exploit the grace period255256**Option B: Read-only access (recommended for B2C)**257- Can view but not create/edit258- Creates urgency without data loss fear259- Clear message: "Update payment to resume full access"260261**Option C: Immediate lockout (not recommended)**262- Aggressive, damages relationship263- Lower recovery rate264- Only appropriate for very low-cost plans265266### Post-Grace Period267268| Timing | Action |269|--------|--------|270| Grace period ends | Pause account (not delete) |271| Day 1 post-pause | "Your account has been paused" email |272| Day 7 post-pause | "Your data is still here" reminder |273| Day 30 post-pause | Win-back attempt with new offer |274| Day 60 post-pause | Final win-back |275| Day 90 post-pause | Data deletion warning (if applicable) |276277---278279## Provider-Specific Setup280281### Stripe282283**Enable Smart Retries:**2841. Dashboard → Settings → Billing → Subscriptions and emails2852. Enable "Smart Retries" under retry rules2863. Set failed payment emails in Dashboard → Settings → Emails287288**Custom retry rules (if not using Smart Retries):**289```290Retry 1: 3 days after failure291Retry 2: 5 days after failure292Retry 3: 7 days after failure293Final: Mark subscription as unpaid after last retry294```295296**Webhook events to handle:**297- `invoice.payment_failed` — trigger dunning298- `invoice.paid` — cancel dunning, restore access299- `customer.subscription.updated` — status changes300- `customer.subscription.deleted` — final cancellation301302### Chargebee303304**Built-in dunning:**3051. Settings → Configure Chargebee → Retry Settings3062. Configure retry attempts and intervals3073. Settings → Configure Chargebee → Email Notifications → Dunning308309**Dunning options:**310- Automatic retries with configurable schedule311- Built-in dunning emails (customizable templates)312- Grace period configuration per plan313314### Paddle315316**Managed dunning:**317- Paddle handles retries and dunning automatically318- Limited customization (Paddle manages the relationship)319- Webhook: `subscription.payment_failed`, `subscription.cancelled`320- Best for hands-off approach321322### Recurly323324**Revenue Recovery:**3251. Configuration → Dunning Management3262. Set retry schedule per plan3273. Configure grace period and final action (pause vs cancel)328329**Advanced features:**330- Machine-learning retry optimization331- Per-plan dunning schedules332- Built-in Account Updater333334---335336## In-App Dunning337338Don't rely on email alone. Show payment failures in the app:339340### Banner Pattern341```342┌──────────────────────────────────────────────────────┐343│ ⚠ Your payment of $29 failed. Update your card to │344│ avoid losing access. [Update Payment →] [Dismiss] │345└──────────────────────────────────────────────────────┘346```347348**Rules:**349- Show on every page load during dunning period350- Allow dismiss (but show again next session)351- Direct link to payment update (fewest clicks possible)352- Don't block the product — let them continue using it353354### Modal Pattern (for final warning)355```356┌─────────────────────────────────────┐357│ │358│ Your account will be paused │359│ on [date] │360│ │361│ Update your payment method to │362│ keep access to your [X] projects │363│ and [Y] team members. │364│ │365│ [Update Payment Method] │366│ [Remind Me Later] │367│ │368└─────────────────────────────────────┘369```370371---372373## Measuring Dunning Performance374375### Key Metrics376377| Metric | How to Calculate | Target |378|--------|-----------------|--------|379| Recovery rate | Recovered payments / Total failed | 50-60% |380| Recovery rate by decline type | Recovered / Failed per type | Soft: 70%+, Hard: 40%+ |381| Time to recovery | Days from failure to successful payment | <5 days |382| Pre-dunning prevention rate | Prevented failures / Expected failures | 20-30% |383| Dunning email open rate | Opens / Sent per email | 60%+ |384| Dunning email click rate | Clicks / Opens per email | 30%+ |385| Revenue recovered (monthly) | Sum of recovered payment amounts | Track trend |386| Revenue lost to involuntary churn | Sum of failed + unrecovered amounts | Track trend |387388### Benchmarking389390**By company stage:**391392| Stage | Typical Involuntary Churn | Target After Optimization |393|-------|--------------------------|--------------------------|394| Early (< $1M ARR) | 3-5% of MRR/month | 1-2% |395| Growth ($1-10M ARR) | 2-4% of MRR/month | 0.5-1.5% |396| Scale ($10M+ ARR) | 1-3% of MRR/month | 0.3-0.8% |397398### ROI Calculation399400```401Monthly failed payment MRR: $10,000402Current recovery rate: 30% ($3,000 recovered)403Target recovery rate: 60% ($6,000 recovered)404Monthly improvement: $3,000/month405Annual improvement: $36,000/year406Cost of dunning optimization: ~$200-500/month (tooling)407ROI: 6-15x408```409