A cancel flow is the survey, retention offers, and cancellation steps your customer sees when they try to leave. churn.io can deliver that same flow in two different ways: as an embedded Widget that pops up inside your own app, or as a hosted Cancel Page your customer is redirected to. This article explains how each delivery method behaves, when to pick one over the other, and what they have in common.
The short answer
Both flow types run the exact same steps — surveys, retention offers, feedback, goodbye, and the final cancellation. The difference is purely where the experience appears:
Choose a Widget flow when you want the cancellation experience to open as an overlay inside your existing product, without sending the customer anywhere else.
Choose a Cancel Page flow when you want to redirect the customer to a standalone, fully branded page hosted by churn.io (optionally on your own domain).
The Widget flow
A Widget flow is embedded directly into your application. When a customer clicks your cancel button, the widget opens on top of your current page as a popup — they never leave your app.
Key characteristics:
The experience renders in place, over your own UI.
When the flow finishes, the popup can close, stay on the page, refresh, send the customer back to where they came from, or open a custom link — whichever redirect on completion behaviour you configured on the flow.
It uses your saved widget branding (colours, fonts, logo, popup style) so it matches your product.
This is the best fit when you control the page where customers cancel and you want the lowest-friction experience that keeps people inside your app.
The Cancel Page flow
A Cancel Page flow is a standalone page hosted by churn.io. Instead of an overlay, your customer is redirected to a dedicated URL where the full flow runs.
Key characteristics:
Each cancellation creates a unique, secure link that expires after 24 hours, so the page can only be opened by the intended customer for a limited time.
The page can be served on churn.io's default address or on your own custom domain for a seamless branded experience.
It uses your separate cancel-page branding settings (page style, header and page colours, button shape, and your business name), and falls back to your widget accent colour where a page value isn't set.
When the customer accepts an offer, dismisses the flow, or completes the cancellation, they are redirected based on the flow's redirect on completion setting — back to the URL you supplied, to a custom link, or kept on the page.
This is the best fit when you don't want to embed anything in your app, when you want a polished full-page experience, or when you want the cancellation to live on its own branded URL.
What both flow types share
Whichever delivery method you choose, the core behaviour is identical:
The same steps. Surveys, retention offers (discounts, pauses, free months, trial extensions, book-a-call, and custom pages), feedback questions, and goodbye and cancellation screens all work the same way.
The same audience targeting. Each flow can be shown to Everyone, to a Specific audience matching your conditions, or to Everyone else. churn.io always tries to match a specific flow first, then falls back to your everyone / everyone-else flow.
The same offers and Stripe actions. Accepted offers — discounts, pauses, free months, trial extensions — are applied to the customer's Stripe subscription, and cancellations follow the behaviour you set on the flow.
The same cancellation behaviour options. A flow can cancel the subscription automatically (immediately or at period end), notify you by email, or send the data to a webhook.
The same reporting. Every session and outcome (saved, cancelled, or dismissed) is recorded for your dashboard analytics, regardless of flow type.
⚠️ A flow is one type or the other
Each flow is set up as either a Widget flow or a Cancel Page flow. A live Widget flow is only served to widget requests, and a live Cancel Page flow is only served to page requests — they don't share targeting with each other. If you want both delivery methods, create one flow of each type.
💡 Tip: connect Stripe either way
Both flow types rely on your connected Stripe account to apply offers and process cancellations. Connect Stripe under Integrations before taking any flow live so offers and cancellations don't silently fail.
How to choose
Want the experience inside your app with no redirect? Use a Widget flow.
Want a standalone, fully branded page — optionally on your own domain? Use a Cancel Page flow.
You can always build both and compare how they perform in your dashboard.
