Exit-interview widget for SaaS churn

B2BWeb1 weekPreact widgetNode.jsStripe API

The idea

Almost every small SaaS has a “Cancel” button that just… cancels. The founder never learns why, and never gets a chance to offer a pause instead — even though “pause” saves 15–30% of cancellations in products that offer it. Big companies build this in-house; small SaaS founders would drop in a widget.

Who pays

Bootstrapped and small SaaS founders — an audience that’s easy to reach (they hang out on X/indie-hackers) and understands MRR math instantly. Price at $29/month flat or 1% of saved MRR. The dashboard’s “MRR saved: $412 this month” number renews the subscription by itself.

MVP scope

  • Script-tag widget with the 3-step flow, configurable reasons/offers
  • Webhook out; optional direct Stripe pause/coupon actions
  • Dashboard: reasons chart, save rate, MRR-saved counter
  • Skip for v1: A/B testing offers, Paddle/Chargebee, multi-language
// Build prompt — paste into Cursor / Claude Code / Lovable / Bolt
Build Offboard: an embeddable cancellation-flow widget for SaaS products.

Integration: the SaaS founder adds a script tag and calls
Offboard.open({ customerId, plan }) when a user clicks "cancel
subscription". The widget (a small self-contained Preact bundle, under
30KB, rendered in a modal with scoped styles) runs a three-step flow:

1. Reason: "What's the main reason you're leaving?" — single choice from
   configurable options (too expensive, missing features, not using it,
   switching to a competitor, other + free text).
2. Save offer, branched by reason: too expensive gets a discount or
   downgrade offer; not using it gets a 2-month pause; missing features
   gets a "tell us what's missing" box with a "we'll email you when it
   ships" promise. Offers are configured in the dashboard per reason.
3. Confirm cancel or accept the offer. Either way, fire a webhook to the
   host app and optionally call the Stripe API directly (pause / coupon /
   plan change) if the founder connects their Stripe account.

Founder dashboard: cancellation reasons over time, save rate per offer,
free-text answers in a readable feed, and estimated MRR saved. Auth +
data via Supabase; the widget served from a CDN route.

Ship with sensible default copy that is respectful — no dark patterns, no
guilt-tripping, cancel is always reachable in one click on every step.
That's a stated principle of the product.

// More B2B ideas