All skills
coreyhaines31 avatar

/churn-prevention

@30f9b9a

When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers or wants to build systems to prevent it. For post-cancel win-back email sequences, see emails. For in-app upgrade paywalls, see paywalls.

Use this Skill: https://skilld.dev/gh/coreyhaines31/marketingskills/churn-prevention

This session only. Nothing lands on disk.

referencesdunning-playbook.md

≈3.2k tokens on demand. Your agent reads this file only when SKILL.md points to it.

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

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:

  • 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

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

  • 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

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)

  • 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

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:

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

Banner Pattern

┌──────────────────────────────────────────────────────┐
│ ⚠ 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

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

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The churn-prevention skill provides strategic guidance for reducing SaaS churn. It includes frameworks for designing cancellation flows, exit surveys, save offers, and payment recovery (dunning) strategies. The skill is instructional in nature and does not contain executable code or malicious patterns.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    3/3 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 30f9b9a. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 minutes ago.

Activeupdated 5 months ago
metadata
{
  "version": "2.0.0"
}
  • saas
  • churn
  • retention
  • billing
  • stripe
  • cancellation
  • dunning
  • payment-recovery
  • subscriptions

README badge

README badge for coreyhaines31/marketingskills/churn-prevention

Helps reduce subscriber churn by building cancel flows with exit surveys, dynamic save offers (discounts, downgrades, pauses), and dunning strategies for failed payments. Covers both voluntary churn (customers choosing to leave) and involuntary churn (payment failures), with guidance on health score modeling and proactive retention triggers.

Generated from the current SKILL.md.

Does this skill work with all billing providers?
The skill covers general churn prevention principles and references Stripe, Chargebee, Paddle, Recurly, and Braintree. You'll need to adapt the implementation to your specific billing provider's API and dunning capabilities.
What's the difference between voluntary and involuntary churn?
Voluntary churn is when a customer chooses to cancel; involuntary churn happens from failed payments. This skill handles both via cancel flows with save offers for voluntary churn and dunning/retry strategies for involuntary churn.
Can I use this skill without tracking user engagement data?
You can build a basic cancel flow and save offers, but churn prediction and proactive retention require engagement signals like login frequency and feature usage. Start with cancel flow design if you don't have that data yet.
Does this skill cover win-back email sequences after cancellation?
No. Post-cancel win-back email sequences are covered by the emails skill. This skill focuses on preventing cancellation and recovering failed payments.
Should I offer discounts to save every cancelling customer?
No. Discounts only work for price-sensitive customers; someone cancelling because they don't use the product or are switching competitors needs a different offer like a pause, downgrade, or feature unlock. Match the offer to the cancellation reason from your exit survey.

Generated from the current SKILL.md. These answers refresh after source changes.