Retention engine for Stripe Subscriptions
Unchurn is the retention engine behind your cancel flow. The widget is the surface your customers see; the engine underneath scores eligibility per subscription, routes the customer to the offer most likely to save them given their reason, writes the change to Stripe, verifies it by reading the subscription back, and records the outcome.
Why teams pick Unchurn
- Reason-routed offers, not a generic save screen — Every cancellation reason maps to an offer chosen for that reason. Branching follow-up questions per reason capture why customers actually leave, not a flat “Other” bucket.
- Intelligent discount mode — When you turn it on, the discount offer picks its own depth from the customer’s LTV, tenure, plan, prior-discount history, and the cancellation reason — so you stop overpaying customers who’d have stayed for less.
- Real Stripe writes, verified — Every accept calls Stripe and reads the subscription back before the session is marked complete. No drift between the dashboard and Stripe.
- Reverse retention built in. Subscribers on an Unchurn pause who re-open your cancel button see a Resume prompt instead of the cancel flow. One click un-pauses billing on Stripe. No extra integration on your side.
What the engine does
A customer clicks your cancel button. The widget opens, asks why they’re leaving, and the engine takes over: it scores eligibility per offer, routes the customer to the offer you’ve mapped to that reason, calls Stripe when they accept, reads the subscription back to verify, and records the outcome. If they decline everything, Unchurn schedules a clean Stripe cancel at period end.
If the customer is already paused when they click cancel, the engine takes a different path. The widget opens directly on a Resume prompt with the scheduled resume date and a one-click un-pause. Same trigger, opposite outcome, decided by what the engine reads on the live subscription. See How the cancel flow works for the branch detail.
You don’t write Stripe code. Your job is one server endpoint that signs a short-lived token saying this customer is allowed to open the cancel flow for this subscription.
The offer surface
The engine evaluates five retention offers against each subscription. Configure them in the dashboard; the engine picks which ones to show.
- Discount — One-time or repeating coupon on the next invoice. Per-customer cooldown so the same person can’t cycle the flow to stack discounts.
- Pause — Pause billing for one to twelve months. The customer keeps access they already paid for; invoices during the pause window are voided.
- Plan switch — Move the customer to a cheaper plan you’ve pre-approved. Applies on the next invoice with no immediate charge.
- Trial extension — Extend the trial by a few days for customers who just need more time.
- Cancel waterfall — The terminal path. When offers are declined or none apply, Unchurn schedules a clean Stripe cancel for the end of the current period.
What Unchurn won’t do
We don’t fake Stripe state. If a subscription is in a shape Stripe can’t safely auto-cancel — an unresolved mid-cycle invoice, certain pause states, certain coupon stacks — the engine surfaces it as a manual cancellation request: the customer gets an email, your dashboard gets a task. We don’t do win-back email, dunning, or post-cancel re-engagement. The full block list lives in Supported subscriptions.
Two integration paths
npm SDK (recommended for React or any bundled frontend). Install @unchurn.dev/widget@latest, mount <UnchurnTrigger> or useUnchurn, and add a small Next.js helper to sign tokens server-side. Signing happens on your server so no one can trigger a cancel flow for a subscription they don’t own.
CDN runtime (for no-build apps or non-React frontends). Drop https://cdn.unchurn.dev/widget.js into your page and call unchurn.open({ tokenEndpoint }) with a server-signed token. In test mode you can call unchurn.open({ merchantId, subscriptionId, mode: 'test' }) directly without a backend for design previews.
Both paths run the same engine and record the same analytics.
Where to go next
- New here? Quickstart — wire up the engine in under 10 minutes.
- Want the mental model first? Concepts — the five offers, the flow, eligibility, modes.
- Configuring offers and reasons? Dashboard — where you wire reasons, follow-up questions, and per-offer rules.
- Already integrating? Widget reference — installation, auth tokens, configuration, appearance.