Stripe subscription schedules vs first-period discounts

Choose between a multi-phase Stripe subscription schedule and a legacy first-period discount on a normal subscription.

Open Plans & Prices, find the recurring Stripe price, and select its edit (pencil) icon. The price settings show one of two mutually exclusive ways to configure the beginning of a subscription.

Introductory offers & TrialsSubscription trials
Stripe billing modelSubscription Schedule with phasesNormal Subscription with a Coupon
Best forUp to two opening phase rows, with an optional free trial in the first rowA free trial or discounted first period on the normal billing cycle
CheckoutStripe Checkout FormStripe Checkout Form or Stripe Embedded Form
Additional currenciesConfigure an amount for each currency in every phaseNot available with legacy paid-trial fields
🚧

These settings cannot be combined on one web2wave Price. If the legacy Free/Paid trial fields contain values, the phases card is replaced by Subscription trials phases are not available with Free/Paid trial settings below.

Configure both options in the web2wave price settings. Do not add the trial or introductory offer to the Stripe Product or Price itself.

Introductory offers & Trials (Stripe Subscription Schedules)

Use Introductory offers & Trials when the subscription needs a sequence of temporary prices or billing periods before it reaches the regular recurring price.

For example:

3 days free → $2 for 4 days → $8.99 per month until canceled

At checkout, web2wave creates a Stripe Subscription Schedule. Stripe moves the subscription through the introductory phases in order. After the last introductory phase, Stripe releases it as a normal subscription at the regular price.

Configure the phases

  1. Make sure Free trial days, Paid trial discounted price, and Paid trial periods with discount in Subscription trials are empty.
  2. In Introductory offers & Trials, select Add trial phase.
  3. Configure the first introductory row:
    • Free trial days — optional and available only in the first row.
    • Period — choose Day, Month, or Year and enter the length.
    • Amount — enter the price for this phase. If the Price has additional currencies, enter an amount for each currency.
  4. Add a second introductory phase if needed.
  5. Review the final Until canceled row. It always uses the Price's regular amount and billing period.
  6. Save the Price.

Screenshot: Plans & Prices → price settings → Introductory offers & Trials → Add trial phase.

Limits and charges

  • A Price can have up to two introductory phases, followed by the regular Until canceled row.
  • Each introductory phase must be no longer than the main billing period. The limit applies to each phase separately, not to their combined duration.
  • A phase amount can be zero or at least 0.50 in the selected currency.
  • If a phase is cheaper than the regular price, Stripe applies a one-time percentage discount for that phase.
  • If a phase is more expensive than the regular price, Stripe charges the regular price plus the difference for that phase.

Add the scheduled Price to a paywall

  1. Open the paywall that should use the scheduled Price.
  2. Add the Price to that paywall.
  3. Add or select the Stripe Checkout Form on the checkout screen or popup.
  4. Show every phase amount and duration in the paywall copy, including the regular Until canceled price.
  5. Preview the paywall and complete a test purchase before publishing.

Screenshot: Paywall editor → checkout screen or popup → Stripe Checkout Form with a scheduled Price.

❗️

The Stripe Embedded Form does not attach the Subscription Schedule. A customer who pays through the Embedded Form will not receive the configured phases.

First-period discount (Stripe Coupon on a normal Subscription)

Use the legacy Subscription trials settings for a free trial or a discounted opening period on an otherwise normal recurring subscription.

This section appears when the Price is recurring and has no rows in Introductory offers & Trials.

Configure a legacy trial or discount

  1. Make sure the Price has no introductory phase rows.
  2. Under Subscription trials, configure the fields you need:
    • Free trial days — delay the first charge.
    • Paid trial discounted price — set the discounted amount.
    • Paid trial periods with discount — set how many discounted periods should apply.
  3. Save the Price.
  4. Add the Price to the paywall and use either the Stripe Checkout Form or Stripe Embedded Form.
  5. Preview the paywall and complete a test purchase before publishing.

Screenshot: Plans & Prices → price settings → Subscription trials → Free trial days, Paid trial discounted price, and Paid trial periods with discount.

🚧

Legacy paid-trial fields cannot be used with Additional Currencies.

How the discount duration works

  • If Paid trial periods with discount is 1 or less, Stripe applies the Coupon once.
  • If it is greater than 1, Stripe treats the entered number as months, regardless of the Price's billing period.

For example, entering 2 periods on a weekly Price creates a discount that repeats for 2 months, not 2 weeks. Use Introductory offers & Trials instead when the discounted duration must follow a weekly or other non-monthly period precisely.

Checkout and promotion-code compatibility

The Stripe Embedded Form supports this legacy free-trial and Coupon setup, but it does not support Subscription Schedules.

❗️

Stripe promotion-code flows documented for the Embedded Form have the opposite checkout requirement from Subscription Schedules. If the checkout must use the Embedded Form for promotion codes, use the legacy first-period discount or redesign the offer; the phases from Introductory offers & Trials will not be attached.

Create variants with Duplicate and lookup_key

You can create several web2wave offer variants from one imported Stripe Price:

  1. Import the Stripe Price once.
  2. In Plans & Prices, select Duplicate on the web2wave Price row.
  3. Configure different introductory phases on each duplicate.
  4. Add each duplicate to the paywall that should show that offer.

The duplicates keep the same Stripe External ID and External code (lookup_key). This lets different paywalls use different web2wave phase configurations without creating another Stripe Price.

🚧

Additional currencies belong to the shared Stripe Price. Saving additional-currency changes on one duplicate updates that Stripe Price for every web2wave duplicate with the same External ID.

Screenshot: Plans & Prices list → one imported Stripe Price and duplicated web2wave rows sharing External ID and External code (lookup_key).

Customer Portal

Subscriptions created with schedules or legacy trial pricing must use the web2wave Customer Portal. Do not send these customers to the native Stripe Customer Portal.