Trial extension
What this offer does
The widget pushes the customer’s trial end date forward by N days. The next billing date shifts according to Stripe’s billing-mode rules. See The five offers — Trial extension for the full description.
Trial extension is trialing-only. The customer must be in status='trialing' with more than 24 hours of trial remaining for the offer to appear.
Configuration
In your Unchurn dashboard, under Widget → Extend trial, you configure:
| Field | Type | Range |
|---|---|---|
trial_extension.enabled | boolean | toggles the offer |
trial_extension.days | integer | 1–30 |
trial_extension.max_per_customer | integer | locked to 1 |
One extension per customer in live mode
The widget allows one committed extension per (merchant, customer, mode) triple. Test mode doesn’t enforce the cap so you can re-test the flow against the same customer.
Stripe’s 2-year hard cap
Stripe rejects any trial_end more than 2 years past billing_cycle_anchor. The widget computes the new trial end from the existing one and skips the update if the result would exceed the cap. The customer sees the offer disappear and the waterfall moves on.
What gets called on Stripe
When the customer accepts, we extend trial_end by N days from the existing trial end (not from now):
// app/lib/offers/trial-extend.ts
const trialEnd = subscription.trial_end + days * 86_400;
await stripe.subscriptions.update(subscriptionId, {
trial_end: trialEnd,
proration_behavior: 'none',
});The next invoice timing depends on the subscription’s billing_mode. See the Stripe billing-cycle reference — flexible billing mode keeps the cycle anchor unchanged, while classic mode resets it.
When this offer is hidden
The widget hides the trial-extension tile for non-trialing subscriptions, trials with less than 24 hours remaining, customers who already received an extension in live mode, and trials with an existing discount. See Supported subscriptions for the complete list.
Common configurations
7-day extension. A “give it another week” offer that fits most SaaS trial lengths.
{
"trial_extension": {
"enabled": true,
"days": 7,
"max_per_customer": 1
}
}14-day extension for longer trials. Pairs well with a 14-day or 30-day trial — gives the customer a real second chance.
{
"trial_extension": {
"enabled": true,
"days": 14,
"max_per_customer": 1
}
}Pitfalls
- The 24-hour cutoff is intentional. A customer in the last day of their trial has already made their decision. Extending rarely activates at that point.
- A trial with an existing discount can’t also get an extension. If a customer needs both, offer the discount first and let them re-enter the flow.
- The next-invoice date depends on Stripe billing mode. Don’t promise an exact next-charge date in your own copy unless you’ve confirmed which billing mode your subscriptions use. The widget reads the new trial end back from Stripe and shows it on the success screen.
Next steps
- Discount — the typical second offer when trial extension is declined
- The five offers — the conceptual overview
- Supported subscriptions — full eligibility rules