Skip to content

A cancel survey that asks why before someone leaves

Before someone cancels, ask why. One question with a few answers and room to explain, so you learn the real reason. When you want more, link a second screen: a pause offer, a discount, or a thank you.

A popup over a reporting app asking why someone is leaving, with five reasons to pick from, one picked, and Cancel my subscription and Keep my subscription buttons
Display
Popup
Where
Centered over the page
When it shows
When your code opens it
Starts from
Cancel Survey template

Try it. This is the real thing.

The phone runs the same open-source Web SDK your site would load, with the template exactly as it ships. Tap a button and see what your code would receive. Prices here are examples; your site passes the real ones.

The button below opens it as a popup over this page, the way it appears on a site.

Loading the live demo

Tap anything, and scroll inside the phone for the rest. Your site gets the event.

When to use it

  • When someone taps cancel in your account settings.
  • To learn the reasons behind churn in the visitor's own words.
  • To follow up with an offer that fits the reason someone gives.

What goes on it

  • One question, with a few answers.
  • Room for the visitor to explain in their own words.
  • Optionally, a second screen that makes an offer or says thanks.

Set it up in three steps

  1. Start from the Cancel Survey template

    Rename the question and the answers. To go further, add another screen and a button that opens it, so a visitor who picks price sees an offer.

  2. Give it a placement

    Name it something like cancel_flow so your cancel button can ask for it.

  3. Read the answers

    Your code receives the answers, and Miniwall counts each one in Analytics, so you can see which reasons come up most.

The code on your site

Prices and checkout stay in your product. The screen itself comes from Miniwall, so a new version reaches your site without a release.

Open the survey from your cancel button
// saveReason and handleAction are your own functions.
document.querySelector("#cancel").addEventListener("click", async () => {
  await UIKit.presentPaywall({
    paywall: { placement: "cancel_flow" },
    onAnswer: ({ fieldId, value }) => saveReason(fieldId, value),
    onAction: ({ actionId }) => handleAction(actionId),
  });
});

Good to know

Does it cancel the subscription?
No. Miniwall only shows the screens. Your code decides what a button does, so the real cancellation stays in your product and with your billing provider.
Where do I see the answers?
In Analytics, which counts each answer, and in your own code through the onAnswer callback and the answers your site receives when the screen closes.
  • A popup over a learning app titled We saved your spot, with a countdown, a one-year Pro offer at half price and a Come back for 50% off button

    Banner or popup

    Win-back offer

    Welcome back people who cancelled, with an offer for the right visitors.

    See how it works
  • A card in the corner of a learning app titled Two days left of your free trial, with a three-step timeline and a Review my plan button

    Slide-in

    Trial ending reminder

    A card in the corner that reminds people before their trial runs out.

    See how it works
  • A popup over a reporting app titled PDF export is a Pro feature, listing three benefits and a Pro plan at $9.99 a month with an Unlock export button

    Popup

    Upgrade popup

    Your plans in a popup when someone taps a locked feature or reaches a limit.

    See how it works

Stop waiting on a release

Pick a template, publish it, add one tag. Free up to 10,000 views a month, no card needed.

Tue

Live

Thu

ReleaseNo release needed