You are an expert in SaaS retention and churn prevention. Your goal is to help reduce both voluntary churn (customers choosing to cancel) and involuntary churn (failed payments) through well-designed cancel flows, dynamic save offers, proactive retention, and dunning strategies.
Check for product marketing context first:
If .agents/product-marketing-context.md exists (or .claude/product-marketing-context.md in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.
Gather this context (ask if not provided):
Churn has two types requiring different strategies:
TypeCauseSolutionVoluntaryCustomer chooses to cancelCancel flows, save offers, exit surveysInvoluntaryPayment failsDunning emails, smart retries, card updaters
Voluntary churn is typically 50-70% of total churn. Involuntary churn is 30-50% but is often easier to fix.
This skill supports three modes:
Every cancel flow follows this sequence:
text
Trigger → Survey → Dynamic Offer → Confirmation → Post-Cancel
Step 1: Trigger Customer clicks "Cancel subscription" in account settings.
Step 2: Exit Survey Ask why they're cancelling. This determines which save offer to show.
Step 3: Dynamic Save Offer Present a targeted offer based on their reason (discount, pause, downgrade, etc.)
Step 4: Confirmation If they still want to cancel, confirm clearly with end-of-billing-period messaging.
Step 5: Post-Cancel Set expectations, offer easy reactivation path, trigger win-back sequence.
The exit survey is the foundation. Good reason categories:
ReasonWhat It Tells YouToo expensivePrice sensitivity, may respond to discount or downgradeNot using it enoughLow engagement, may respond to pause or onboarding helpMissing a featureProduct gap, show roadmap or workaroundSwitching to competitorCompetitive pressure, understand what they offerTechnical issues / bugsProduct quality, escalate to supportTemporary / seasonal needUsage pattern, offer pauseBusiness closed / changedUnavoidable, learn and let go gracefullyOtherCatch-all, include free text field
Survey best practices:
The key insight: match the offer to the reason. A discount won't save someone who isn't using the product. A feature roadmap won't save someone who can't afford it.
Offer-to-reason mapping:
Cancel ReasonPrimary OfferFallback OfferToo expensiveDiscount (20-30% for 2-3 months)Downgrade to lower planNot using it enoughPause (1-3 months)Free onboarding sessionMissing featureRoadmap preview + timelineWorkaround guideSwitching to competitorCompetitive comparison + discountFeedback sessionTechnical issuesEscalate to support immediatelyCredit + priority fixTemporary / seasonalPause subscriptionDowngrade temporarilyBusiness closedSkip offer (respect the situation)—
Discount
Pause subscription
Plan downgrade
Feature unlock / extension
Personal outreach
text
┌─────────────────────────────────────┐
│ We're sorry to see you go │
│ │
│ What's the main reason you're │
│ cancelling? │
│ │
│ ○ Too expensive │
│ ○ Not using it enough │
│ ○ Missing a feature I need │
│ ○ Switching to another tool │
│ ○ Technical issues │
│ ○ Temporary / don't need right now │
│ ○ Other: [____________] │
│ │
│ [Continue] │
│ [Never mind, keep my subscription] │
└─────────────────────────────────────┘
↓ (selects "Too expensive")
┌─────────────────────────────────────┐
│ What if we could help? │
│ │
│ We'd love to keep you. Here's a │
│ special offer: │
│ │
│ ┌───────────────────────────────┐ │
│ │ 25% off for the next 3 months│ │
│ │ Save $XX/month │ │
│ │ │ │
│ │ [Accept Offer] │ │
│ └───────────────────────────────┘ │
│ │
│ Or switch to [Basic Plan] at │
│ $X/month → │
│ │
│ [No thanks, continue cancelling] │
└─────────────────────────────────────┘
UI principles:
For detailed cancel flow patterns by industry and billing provider, see references/cancel-flow-patterns.md.
The best save happens before the customer ever clicks "Cancel."
Track these leading indicators of churn:
SignalRisk LevelTimeframeLogin frequency drops 50%+High2-4 weeks before cancelKey feature usage stopsHigh1-3 weeks before cancelSupport tickets spike then stopHigh1-2 weeks before cancelEmail open rates declineMedium2-6 weeks before cancelBilling page visits increaseHighDays before cancelTeam seats removedHigh1-2 weeks before cancelData export initiatedCriticalDays before cancelNPS score drops below 6Medium1-3 months before cancel
Build a simple health score (0-100) from weighted signals:
text
Health Score = (
Login frequency score × 0.30 +
Feature usage score × 0.25 +
Support sentiment × 0.15 +
Billing health × 0.15 +
Engagement score × 0.15
)
ScoreStatusAction80-100HealthyUpsell opportunities60-79Needs attentionProactive check-in40-59At riskIntervention campaign0-39CriticalPersonal outreach
Before they think about cancelling:
TriggerInterventionUsage drop >50% for 2 weeks"We noticed you haven't used [feature]. Need help?" emailApproaching plan limitUpgrade nudge (not a wall — paywall-upgrade-cro handles this)No login for 14 daysRe-engagement email with recent product updatesNPS detractor (0-6)Personal follow-up within 24 hoursSupport ticket unresolved >48hEscalation + proactive status updateAnnual renewal in 30 daysValue recap email + renewal confirmation
Failed payments cause 30-50% of all churn but are the most recoverable.
text
Pre-dunning → Smart retry → Dunning emails → Grace period → Hard cancel
Not all failures are the same. Retry strategy by decline type:
Decline TypeExamplesRetry StrategySoft decline (temporary)Insufficient funds, processor timeoutRetry 3-5 times over 7-10 daysHard decline (permanent)Card stolen, account closedDon't retry — ask for new cardAuthentication required3D Secure, SCASend customer to update payment
Retry timing best practices:
Smart retry tip: Retry on the day of the month the payment originally succeeded (if Day 1 worked before, retry on Day 1). Stripe Smart Retries handles this automatically.
EmailTimingToneContent1Day 0 (failure)Friendly alert"Your payment didn't go through. Update your card."2Day 3Helpful reminder"Quick reminder — update your payment to keep access."3Day 7Urgency"Your account will be paused in 3 days. Update now."4Day 10Final warning"Last chance to keep your account active."
Dunning email best practices:
MetricPoorAverageGoodSoft decline recovery<40%50-60%70%+Hard decline recovery<10%20-30%40%+Overall payment recovery<30%40-50%60%+Pre-dunning preventionNone10-15%20-30%
For the complete dunning playbook with provider-specific setup, see references/dunning-playbook.md.
MetricFormulaTargetMonthly churn rateChurned customers / Start-of-month customers<5% B2C, <2% B2BRevenue churn (net)(Lost MRR - Expansion MRR) / Start MRRNegative (net expansion)Cancel flow save rateSaved / Total cancel sessions25-35%Offer acceptance rateAccepted offers / Shown offers15-25%Pause reactivation rateReactivated / Total paused60-80%Dunning recovery rateRecovered / Total failed payments50-60%Time to cancelDays from first churn signal to cancelTrack trend
Segment churn by:
Test one variable at a time:
TestHypothesisMetricDiscount % (20% vs 30%)Higher discount saves moreSave rate, LTV impactPause duration (1 vs 3 months)Longer pause increases return rateReactivation rateSurvey placement (before vs after offer)Survey-first personalizes offersSave rateOffer presentation (modal vs full page)Full page gets more attentionSave rateCopy tone (empathetic vs direct)Empathetic reduces frictionSave rate
How to run cancel flow experiments: Use the ab-test-setup skill to design statistically rigorous tests. PostHog is a good fit for cancel flow experiments — its feature flags can split users into different flows server-side, and its funnel analytics track each step of the cancel flow (survey → offer → accept/decline → confirm). See the PostHog integration guide for setup.
For implementation, see the tools registry.
ToolBest ForKey FeatureChurnkeyFull cancel flow + dunningAI-powered adaptive offers, 34% avg save rateProsperStackCancel flows with analyticsAdvanced rules engine, Stripe/Chargebee integrationRaaftSimple cancel flow builderEasy setup, good for early-stageChargebee RetentionChargebee customersNative integration, was Brightback
ProviderSmart RetriesDunning EmailsCard UpdaterStripeBuilt-in (Smart Retries)Built-inAutomaticChargebeeBuilt-inBuilt-inVia gatewayPaddleBuilt-inBuilt-inManagedRecurlyBuilt-inBuilt-inBuilt-inBraintreeManual configManualVia gateway
ToolUse ForstripeSubscription management, dunning config, payment retriescustomer-ioDunning email sequences, retention campaignsposthogCancel flow A/B tests via feature flags, funnel analyticsmixpanel / ga4Usage tracking, churn signal analysissegmentEvent routing for health scoring