Build a Cancellation Survey for Stripe SaaS

Build a cancellation survey by adding a 5-7 option exit questionnaire before the Stripe subscription cancel call. Keep it to one required question with an optional text field. The survey data powers targeted retention offers and reveals your top churn drivers. SaaS companies using exit surveys save 15-30% more customers through reason-matched counter-offers.

Every cancellation is a data point. Without a cancellation survey, you're flying blind. You know customers are leaving, but you don't know why. With a survey, you can identify patterns ("42% of cancellations cite price"), make informed product decisions, and most importantly, show personalized retention offers based on the reason they're leaving. SaaS companies that add a cancellation survey to their cancel flow see a 10-20% improvement in save rates, because knowing the "why" lets you respond with the right counter-offer. Compare your numbers against the cancel flow save rate benchmarks. This guide covers how to design, build, and act on cancellation survey data for Stripe-based SaaS products.

Why surveys matter

Most founders think of cancellation surveys as a data collection exercise. That's only half the value. The real power is in what happens between the survey response and the actual cancellation. When a customer tells you they're leaving because it's "too expensive," you can immediately offer a discount coupon. When they say "missing features," you can show your upcoming roadmap. When they say "not using it enough," you can offer a pause instead.

The survey creates a natural pause in the cancellation flow. Instead of a one-click cancel that takes 2 seconds, the customer now spends 15-30 seconds reflecting on why they're leaving. That reflection, combined with a relevant counter-offer, is enough to save 15-25% of voluntary churn customers who would have otherwise left without a second thought.

On the data side, aggregated survey responses tell you exactly where to invest. If 40% of cancellations cite "too expensive," you have a pricing problem. If 30% cite a specific missing feature, you have a roadmap priority. Without this data, you're guessing. See the State of Stripe SaaS Churn report for industry-wide patterns.

Designing the survey

Keep it short. A cancellation survey with more than 7 options or multiple pages will frustrate customers and reduce completion rates. The goal is a single-select question with 5-7 options that cover 95% of cancellation reasons:

  • Too expensive; the most common reason across all SaaS. Your counter: discount offer.
  • Missing features I need; the customer wants something you don't have yet. Your counter: roadmap preview or early access to upcoming features.
  • Switched to a competitor. They found an alternative. Your counter: ask which one (valuable competitive intel) and highlight your differentiators.
  • Not using it enough. low engagement. Your counter: offer a pause (3-6 months) instead of cancellation, or a lower-tier plan.
  • Technical issues / bugs. product quality problem. Your counter: escalate to support immediately with a dedicated fix timeline.
  • Just needed it temporarily. seasonal or project-based use. Your counter: offer a pause or annual plan for when they need it again.
  • Other (please specify). free-text field for edge cases. Keep this as the last option so it doesn't become a default escape.

Present the options as a single-select list with clear, conversational labels. Avoid corporate language like "Inadequate feature set". use "Missing features I need" instead. The tone should be empathetic, not clinical.

Three implementation approaches

There are three ways to add a cancellation survey to your Stripe SaaS, each with different tradeoffs:

1. Stripe Customer Portal (limited)

Stripe's built-in Customer Portal includes an optional cancellation reason field. You enable it in the Dashboard under Settings > Customer portal > Cancellations. You can configure a set of reasons and optionally require a comment. The data shows up in the subscription's cancellation_details.feedback field, which you can read via the API or see in the Dashboard. The limitation: you can't show personalized counter-offers based on the reason. The customer selects a reason, confirms cancellation, and they're gone. No interception point. This approach is free and takes 5 minutes to set up, but it's purely data collection with no retention capability.

2. Custom UI (full control)

Build your own cancel flow with a survey step. The customer clicks "Cancel" in your app, which opens your custom modal or page instead of redirecting to Stripe's portal. You show the survey, capture the response, display a personalized counter-offer, and only call stripe.subscriptions.update() with cancel_at_period_end: true if they confirm. This gives you full control over the UI, the counter-offers, and the data. The tradeoff: you need to build and maintain the entire flow. Estimated build time: 20-30 hours including the survey UI, offer logic, Stripe API integration, and analytics.

3. Widget (fastest)

A retention widget like SaveMRR's Cancel Shield drops into your app with a JavaScript snippet. It handles the survey, the conditional offers, the Stripe API calls, and the analytics. You configure the survey reasons and offers in a dashboard, and the widget renders the cancel flow inside your app with your branding. Setup takes 5 minutes. This is the fastest path to a working cancellation survey with retention offers, but you're depending on a third-party tool.

Capturing and storing data

Regardless of your implementation approach, you need to store survey responses in your own database for analysis. If you're using Stripe's Customer Portal, listen for the customer.subscription.deleted webhook and read cancellation_details.feedback and cancellation_details.comment from the subscription object. If you're using a custom UI, store the response directly when the customer submits the survey.

Your cancellation events table should include: customer ID, subscription ID, cancellation reason (from survey), free-text comment (optional), whether a counter-offer was shown, which offer was shown, whether they accepted or declined, and timestamp. This data powers your retention analytics: which reasons are most common, which offers convert best, and what your overall save rate is per reason.

Acting on survey responses

The survey is only valuable if you act on the responses. Here's a response-to-action mapping that works:

  • "Too expensive" → Show a 20-30% discount for 2-3 months. Apply via stripe.subscriptions.update() with a coupon. Save rate: 20-35%.
  • "Missing features" → Show your roadmap with upcoming features relevant to their use case. Ask which feature would bring them back. Save rate: 10-15%, but the data is gold for prioritization.
  • "Switched to competitor" → Ask which competitor (dropdown or free text). Show a comparison of your unique advantages. Save rate: 5-10%, but the competitive intel is invaluable.
  • "Not using it enough" → Offer a subscription pause (1-3 months) instead of cancellation. "We'll keep your data safe and reactivate when you're ready." Save rate: 25-40%.
  • "Technical issues" → Apologize, offer to escalate to a priority support ticket, and offer a free month while issues are resolved. Save rate: 15-25%.
  • "Needed it temporarily" → Offer a pause or suggest an annual plan for when they need it again. Capture their email for a re-engagement sequence. Save rate: 10-15%.

Best practices

Follow these rules to maximize both completion rates and save rates:

  • Make it required but brief. require a reason selection before proceeding, but keep it to a single click. Don't add mandatory comment fields or multi-step forms. Completion rate drops 30% with each additional required field.
  • Maximum 3 clicks to cancel; the survey adds one click. The counter-offer adds one click (accept or decline). The confirmation adds one click. Three total. Anything more feels like a dark pattern and damages trust.
  • Show alternatives before confirming; the counter-offer should appear before the final "Confirm cancellation" button, not after. Once they've clicked confirm, the psychological commitment to leaving is too strong.
  • Respect their decision. If a customer declines the counter-offer, cancel immediately. Don't show a second offer, a "Are you sure?" modal, or any other friction. One offer, one chance, then graceful exit.
  • Track 90-day retention; a "saved" customer who cancels again 30 days later wasn't actually saved. Measure whether customers who accepted a counter-offer are still active 90 days later. This is your true save rate.

Tool-assisted approach

SaveMRR's Cancel Shield includes a smart cancellation survey with conditional offers built in. It renders inside your app via a JavaScript snippet, shows your configured survey reasons, displays personalized counter-offers based on the response, handles the Stripe API calls to apply discounts or pause subscriptions, and tracks save rates per reason over 90 days. You configure everything in the SaveMRR dashboard. No code changes needed beyond the initial snippet. It also provides an analytics view showing your most common cancellation reasons, offer acceptance rates, and revenue saved per month.

Next step

Before building a cancellation survey, understand what your current churn looks like. SaveMRR's free Revenue Scan connects to your Stripe account (read-only) and shows your churn rate, average customer lifetime, and which cancellations could have been intercepted with a survey and counter-offer. It takes 2 minutes and requires no code changes. Use that data to size the opportunity, then decide whether to build a custom survey, use Stripe's portal, or drop in a retention widget.

Frequently asked questions

How many options should a SaaS cancellation survey have?

Keep it to 5-7 options covering the most common reasons: too expensive, missing features, switched to competitor, not using it enough, technical issues, needed it temporarily, and other. Use conversational labels like 'Missing features I need' instead of corporate language. Completion rate drops 30% with each additional required field, so stick to a single required selection.

Does Stripe have a built-in cancellation survey?

Yes, Stripe's Customer Portal has an optional cancellation reason field you can enable under Settings > Customer portal > Cancellations. The response shows up in the subscription's cancellation_details.feedback field. However, it does not let you show personalized counter-offers based on the reason, so it is purely data collection with no retention capability.

What save rate can I expect from adding a cancellation survey?

SaaS companies that add a cancellation survey with reason-matched counter-offers see a 15-30% improvement in save rates. The key is acting on the response: discount for 'too expensive' (20-35% save rate), pause for 'not using it enough' (25-40% save rate), and roadmap preview for 'missing features' (10-15% save rate). Without counter-offers, the survey is just data collection.

How many clicks should it take for a customer to cancel after the survey?

Maximum 3 clicks total: one for the survey response, one for the counter-offer (accept or decline), and one for the final confirmation. Anything more feels like a dark pattern and damages trust. If a customer declines the counter-offer, cancel immediately without showing a second offer or 'Are you sure?' modal.

How do I measure if my cancellation survey is actually reducing churn?

Track 90-day retention of customers who accepted a counter-offer, not just the initial save rate. A customer saved today who cancels again next month was not truly saved. Measure save rate per cancellation reason, offer acceptance rates, and compare monthly churn before and after implementing the survey. SaveMRR tracks all of this automatically in its analytics dashboard.

Your Stripe has a leak. Let's find it.

Free Revenue Scan: paste your Stripe key, see every dollar you lost in 60 seconds. No card needed.

Run my free scan