B2B software/Cancel flow

A save offer that arrives while the user is deciding.

Signals tells your save flow how much this user has used the product this month, what they used most and what went wrong this week, so the offer can meet them on the cancel page rather than in their inbox afterward.

Higher save rate

Save more users by making the offer while the cancel page is open.

The save rate moves when the offer reaches a user before the cancellation goes through, and when it fits the reason they are leaving. Signals gives your save flow how often this user has been in the product this month, what they used most, which errors they hit this week and whether the cancel page is open right now. Your save flow decides whether that calls for a pause, a smaller plan, a fix or a person.

Offer a pause or a smaller plan while the page is open

A user who was in the product most working days has logged in twice this month, and now they are on the cancel page. The save email is written for the moment after the cancellation, so it reaches an inbox after the user has decided and the seat has gone. The offer belongs on this page, next to the cancel button and never over it, while the user is still making up their mind. It lands better when it names the one thing they kept coming back for.

What Signals knows
sessions_30d
Separate sessions in the last 30 days
cancel_page_views_1h
Times the cancel page was opened in the last hour
top_feature_30d
The feature they used most in the last 30 days
What your save flow does

Shows a pause or a smaller plan beside the cancel button when a user's sessions have fallen off this month, names the feature they used most in the offer, and leaves the cancel button where it is.

cancel-page.tsx · 15 lines
// In the code that renders the cancel page
const user = await signals.getServiceAttributes({
  name: "saas_cancel_quiet",
  attribute_key: "user_id",
  identifier: userId,
});
// { sessions_30d: 2, cancel_page_views_1h: 1, top_feature_30d: "reports" }

if (user.cancel_page_views_1h > 0 && user.sessions_30d <= 3) {
  saveFlow.offer({
    kind: "pause_or_smaller_plan",
    keeps: user.top_feature_30d,
    beside: "cancel_button",
  });
}

Try it on your own site.

Add the SDK, define one thing you want to know about a visitor, and watch it update while you click around. The free tier runs on the real engine: no card, no sales call.