Discount Offers
Retain at-risk subscribers with percentage discounts, fixed amount reductions, or free months — integrated with Stripe coupons and usage limits.
Discount offers give subscribers a price reduction to stay. They are the most direct retention tool in a cancel flow and tend to have the highest acceptance rate, especially when the cancellation reason is price-related.
Discount Types
LostChurn supports three discount formats. Choose the one that fits your pricing model:
Percentage Off
Reduce the subscription price by a percentage. Works well for products with variable pricing or multiple plan tiers.
Example: 25% off for 3 months
| Setting | Value |
|---|---|
discount_pct | 25 |
discount_cents | (not set) |
duration_days | 90 |
Fixed Amount Off
Reduce the subscription price by a fixed dollar amount. Best when you want precise control over the discount value regardless of the subscriber's plan.
Example: $10 off per month for 2 months
| Setting | Value |
|---|---|
discount_pct | (not set) |
discount_cents | 1000 |
duration_days | 60 |
Free Months
Offer one or more months completely free. This is effectively a 100% discount for a limited duration. High impact, but use sparingly.
Example: 1 month free
| Setting | Value |
|---|---|
discount_pct | 100 |
discount_cents | (not set) |
duration_days | 30 |
Duration: One-Time vs. Recurring
Configure how long the discount applies:
| Duration Type | How It Works | Best For |
|---|---|---|
| One-time | Applies to the next billing cycle only | High-value plans where even a single discount is significant |
| Recurring (limited) | Applies for a set number of months (e.g., 3 months) | The most common approach — gives enough time to re-establish value |
| Recurring (ongoing) | Applies indefinitely until manually removed | Use rarely — can permanently erode revenue |
Set the duration using the duration_days field on the offer. For a one-time discount, set it to match one billing cycle (e.g., 30 days for monthly billing). For recurring, multiply by the number of months.
Stripe Coupon Integration
When a subscriber accepts a discount offer, LostChurn creates or applies a coupon through your connected Stripe account:
- The offer configuration is translated into a Stripe Coupon object
- The coupon is applied to the subscriber's Stripe subscription
- Stripe handles the billing adjustment automatically
- LostChurn records the redemption with the
provider_coupon_idfor tracking
How It Maps to Stripe
| LostChurn Setting | Stripe Coupon Field |
|---|---|
discount_pct | percent_off |
discount_cents | amount_off |
duration_days | duration + duration_in_months |
If you use a payment processor other than Stripe, LostChurn stores the discount details in the redemption record for your application to process.
Limiting Usage to Prevent Abuse
Discount offers can be exploited if subscribers learn they can cancel and get a discount repeatedly. LostChurn provides several controls:
Max Redemptions
Set max_redemptions on the offer to cap the total number of times it can be used across all subscribers. Once the limit is reached, the offer is automatically deactivated.
| Setting | Description |
|---|---|
max_redemptions | Total times this offer can be redeemed (null = unlimited) |
current_redemptions | Current count, updated automatically |
Per-Customer Limits
Prevent the same subscriber from accepting the same discount offer more than once. LostChurn checks the discount_redemption table for existing redemptions by the same customer before presenting the offer.
If a subscriber has already redeemed this offer in a previous cancel flow session, the step is skipped and the flow moves to the next step or the default offer.
Cooldown Periods
Add a time-based restriction so that a subscriber who redeemed a discount cannot receive another one for a set period (e.g., 6 months). Configure this in the offer step's settings.
Monitoring for Abuse
Watch for these patterns in your saves dashboard:
- Subscribers who trigger cancel flows repeatedly at regular intervals
- High redemption rates on deep discounts (may indicate the discount is too easy to get)
- Subscribers who accept a discount but cancel immediately after it expires
If you see these patterns, consider tightening per-customer limits or reducing the discount depth.
Creating a Discount Offer
- In the flow builder, add an Offer step
- Select Discount as the offer type
- Configure the settings:
- Discount type — Percentage off, fixed amount, or free months
- Amount — The discount value (
discount_pctordiscount_cents) - Duration — How long the discount applies (
duration_days) - Max redemptions — Total usage cap (optional)
- Headline — The message shown (e.g., "Stay for 25% off the next 3 months")
- Description — Explain the offer details
- CTA text — The accept button label (e.g., "Apply Discount")
- Set the Trigger Reason to connect this offer to a survey response (e.g., "Too expensive")
- Save the step
Choosing the Right Discount
The right discount balances retention effectiveness against revenue impact:
| Scenario | Suggested Discount |
|---|---|
| Price-sensitive, low-tier plan | 15-20% off for 2 months |
| Price-sensitive, high-tier plan | 10-15% off for 3 months (smaller % but bigger absolute savings) |
| Switching to competitor | 25-30% off for 3 months (aggressive to keep them) |
| General / unclear reason | 1 month free (simple, high-impact) |
Start conservatively and adjust based on acceptance rates. If your acceptance rate is very high (above 70%), the discount may be too generous. If it is very low (below 20%), it may not be compelling enough.
Next Steps
- Extension Offers — Offer free trial extensions for trial-to-paid conversion
- Pause Offers — Offer a temporary break as an alternative
- Measuring Saves — Track discount offer performance and revenue impact
Downgrade Offers
Retain subscribers by offering a plan downgrade instead of cancellation — target higher-tier users, show plan comparisons, and track revenue impact.
Extension Offers
Retain trial users by extending their trial period — configure extension length and target the trial-to-paid conversion moment.