Low Engagement Smb B2B SAAS easy

Build a Cancellation Save Flow That Rescues 10-15% of Churning Customers

30 minutes
13 views
Sponsored Experiment

This experiment is sponsored by UniqueSide

Ship retention experiments faster

Learn More

The Problem

Most SaaS products treat cancellation as a single button click. A customer hits "Cancel Subscription" and they are gone instantly with no conversation, no understanding of why, and no chance to address the issue. This means you lose every single customer who considers cancelling, even the ones who would have stayed if you had simply asked what was wrong and offered to help. Without a cancellation save flow, you are leaving recoverable revenue on the table every single day. Even worse, you have zero data on why people leave, making it impossible to fix the root causes of churn.

The Solution

Build a multi-step cancellation intercept flow that replaces the instant cancel button with a short, respectful conversation. Step one asks why they are leaving with a simple multiple-choice exit survey. Step two presents a targeted save offer based on their specific reason: a discount for price complaints, a pause option for temporary situations, a feature walkthrough for confused users, or a plan downgrade for those who need less. Step three is a final confirmation. This entire flow can be built as an MVP in one to two days using your existing frontend framework and a few database tables. No third-party tools required for the first version.

Implementation Steps

  1. 1

    Replace your current cancel button with a link to a new multi-step cancellation modal or page. Do not remove the ability to cancel. The goal is to insert a conversation before the final action, not to create a dark pattern. Customers must always be able to complete their cancellation within the flow.

  2. 2

    Build Step 1 — the Exit Survey screen. Show 5-7 cancellation reason options: "Too expensive", "Missing features I need", "Switched to a competitor", "Not using it enough", "Technical issues or bugs", "Temporary — I will be back", and "Other" with a free-text field. Store the selected reason and any comments in a cancellation_attempts table with the user ID, timestamp, and reason.

  3. 3

    Build Step 2 — the Targeted Save Offer screen. Map each cancellation reason to a specific offer. For "Too expensive": offer 20-30% off for 3 months or a plan downgrade. For "Not using it enough": offer a subscription pause for 1-3 months. For "Missing features": show upcoming roadmap items or suggest a feature request. For "Technical issues": offer an immediate support escalation. For "Temporary": offer the pause option. Display only the single most relevant offer based on their selected reason.

  4. 4

    Build Step 3 — the Final Confirmation screen. If they decline the save offer, show a clean confirmation screen that says "We are sorry to see you go" with a final "Confirm Cancellation" button. Include a brief note that they can reactivate anytime. Process the actual cancellation only when they click this final button.

  5. 5

    Create the database schema. You need one table: cancellation_attempts with columns for id, user_id, reason (string), reason_details (text, nullable), offer_shown (string), offer_accepted (boolean), cancelled (boolean), and timestamps. This gives you everything you need to measure the flow and iterate on offers.

  6. 6

    Wire up the save offers to real actions. The discount offer should apply a coupon code via your billing provider API (Stripe, Chargebee, etc.). The pause offer should set the subscription to pause at period end. The downgrade offer should switch their plan. Start simple: even if you can only automate the discount offer on day one, the other offers can trigger a Slack notification to your team for manual follow-up.

  7. 7

    Add basic tracking. Log every step of the flow: how many users entered step 1, how many submitted a reason, how many saw the offer, how many accepted, and how many completed cancellation. You need these numbers to calculate your save rate and optimize each step.

  8. 8

    Deploy the MVP and monitor for one week. Watch the save rate (percentage of users who enter the flow and do not cancel). A good initial save rate is 10-15%. Check that the flow is not frustrating users by monitoring support tickets and social mentions. Read every free-text cancellation comment to find patterns your predefined reasons missed.

Expected Outcome

Save 10-15% of customers who initiate cancellation by addressing their specific concern with a targeted offer. Collect structured cancellation reason data from 100% of churning users, giving your team actionable intelligence to fix the root causes of churn.

How to Measure Success

Track these metrics to know if the experiment is working:

  • Save rate: percentage of users who enter the cancellation flow but do not cancel (target: 10-15% within the first month)
  • MRR saved: monthly recurring revenue retained from customers who accepted a save offer
  • Exit survey completion rate: percentage of cancelling users who select a reason (target: 85%+)
  • Offer acceptance rate by reason: which save offers work best for which cancellation reasons
  • Flow completion rate: percentage of users who enter step 1 and reach a final outcome (cancel or save) without abandoning the flow
  • Support ticket volume related to cancellation friction (should not increase)
  • Top 3 cancellation reasons ranked by frequency and revenue impact, reviewed weekly

Prerequisites

Make sure you have these before starting:

  • A subscription billing system with API access to apply discounts, pause subscriptions, and change plans (Stripe, Chargebee, Recurly, Paddle, etc.)
  • An existing cancel button or account settings page where customers currently initiate cancellation
  • A frontend framework or templating system to build the multi-step modal or page (React, Vue, Blade, or even plain HTML and JavaScript)
  • A database to store cancellation attempts and reasons (your existing application database works fine)
  • Permission from your team to offer discounts or pauses — agree on the maximum discount percentage and pause duration before you build

Common Mistakes to Avoid

Don't make these errors that cause experiments to fail:

  • Making it impossible or confusing to actually cancel. A save flow must be respectful. If users feel trapped, they will complain publicly and file chargebacks. Always show a clear path to complete cancellation at every step.
  • Offering the same generic discount to everyone regardless of their reason. A customer leaving because of bugs does not want 20% off — they want their bugs fixed. Map offers to reasons or the flow feels tone-deaf.
  • Asking too many questions in the exit survey. More than 7 options or a required long-form comment will frustrate users and reduce completion rates. Keep it to one click plus an optional text field.
  • Not tracking the data. If you build the flow but do not log reasons and save rates, you cannot improve it. The exit survey data is just as valuable as the saved revenue — it tells you exactly what to fix in your product.
  • Offering a discount to users who would have stayed anyway. Only show the save flow when users actively initiate cancellation, never as a proactive popup. You do not want to train customers to threaten cancellation for discounts.
  • Forgetting to handle the billing side. If you offer a 25% discount but forget to actually apply the coupon in Stripe, the customer will be charged full price and churn even harder. Test every offer end-to-end before launching.

More ways to reduce churn

Explore more experiments or browse our tool directory