Skip to Content
Configure offersTrial extension

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:

FieldTypeRange
trial_extension.enabledbooleantoggles the offer
trial_extension.daysinteger1–30
trial_extension.max_per_customerintegerlocked 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

Last updated on