Skip to Content

Discount

Give a cancelling customer a percent off their next invoice to keep them. Discount is your highest-conversion offer and your biggest margin risk — the two things to decide are how deep it goes and how often the same customer can see it.

Pick a mode

In your dashboard under Widget → Discount there are two modes, and the right choice depends mostly on how much retention signal you’ve collected.

Manual mode

You set one fixed offer — percent off, duration, number of months — and every eligible customer sees the same thing. This is the right place to start. Run manual long enough that your save-rate signal is clean and you know what your customers actually accept.

For most SaaS, 20% off for 3 months is a reasonable opening default. It’s enough to register as a real concession without permanently halving margin. Go deeper for annual saves where the loss is bigger; go shallower for high-margin add-ons. A one-time 50% off the next invoice can outperform a longer repeating discount for price-sensitive customers — they see a bigger headline number and don’t worry about future cycles.

Intelligent mode

You set a ceiling (a maximum percent) and Unchurn picks the actual percent per customer, between 5% and the ceiling, based on what we know about that session. The goal is two-sided: save the customers worth saving, without overpaying for the ones who’d have stayed anyway or were going to leave regardless.

For each cancel session, the model considers:

  • Tenure. Months since the subscription was created. A long-tenured customer warrants a deeper offer than a 30-day signup.
  • MRR. Monthly recurring revenue for the subscription at the time of the cancel flow.
  • LTV proxy. Tenure × MRR — a rough measure of realized customer value.

The output is rounded to the nearest 5% increment so the customer sees 20% off, not 21.4% off. The customer never sees a discount higher than the ceiling you set. Customers who already have an active coupon on the subscription are excluded from intelligent mode entirely and fall back to the rules-seeded discount.

Flip to intelligent once you’ve collected a baseline in manual mode. Before that, manual gives you a cleaner save-rate signal to read.

Set the cooldown

After a customer accepts a discount, the widget won’t offer them another one for the cooldown window you set. This stops the same person from cycling through the cancel flow to stack discounts. 60 to 90 days is typical; raise it if you find a small set of customers triggering the flow repeatedly.

The cooldown is per-customer, not per-subscription — a customer who took a discount on one subscription won’t see another one on a different subscription until the window passes.

What happens on Stripe

When the customer accepts, Unchurn creates a fresh single-use coupon scoped to that session and attaches it to the subscription. The coupon expires in an hour, so it can’t be shared, captured, or replayed. The next invoice is reduced by the percentage you configured; existing open or draft invoices are unchanged.

When the discount is hidden

The widget hides the discount tile when:

  • The subscription already has an active coupon (we won’t stack).
  • There’s an unresolved or unpaid invoice in the way.
  • Stripe automatic tax is enabled on the subscription (we don’t risk the tax math).
  • Trialing customers + a repeating discount — trialing subscriptions can only take one-time coupons, so a repeating offer won’t show.

Your dashboard shows the full hidden-reason breakdown so you can audit which slice of customers your discount isn’t reaching. See Supported subscriptions for the full list.

Common pitfalls

  • Discount as your only offer. It trains price-sensitivity. Customers learn that clicking cancel earns a coupon and you’ve quietly cut your effective price.
  • Cooldown too short. Without a cooldown, a determined customer can re-cycle to stack three coupons in a week. 60 days is a reasonable floor.
  • Modal left open. If the customer leaves the cancel dialog open and comes back the next day, the coupon has expired. The widget catches this and fetches a fresh one — no merchant action needed.

Where to go next