Free Trials and Introductory Offers on Paywalls

Show free trials and introductory offers on Superwall paywalls: check trial eligibility with products.hasIntroductoryOffer, write trial copy with product variables, override eligibility, remind users before a trial ends, and target users who cancelled.

A free trial, or another introductory offer such as a discounted first month, is set up on the product in App Store Connect or Google Play. Superwall doesn't decide who gets one: the store does. What Superwall gives you is a way to tell, on the paywall, whether the user can get the trial, so you show trial copy only to people who can actually start one.

Set up the trial on the product

Create the introductory offer in the store:

  • App Store: In App Store Connect, open the subscription, then Subscription Prices → Introductory Offers.
  • Google Play: In Play Console, add a free trial or introductory price offer to the subscription's base plan.

Then add the product to Superwall, and to your paywall. Superwall reads the trial's length and price from the store.

Show trial copy only to eligible users

Apple and Google allow one introductory offer per user per subscription group. Someone who already had a trial, even years ago, can't start another. Use products.hasIntroductoryOffer to tell:

  • true: the user can start the trial.
  • false: they can't, because they've used an introductory offer in this subscription group, or the products have none.

In the paywall editor, add a dynamic value that checks products.hasIntroductoryOffer, and use it to change text or show and hide elements:

Write both versions of the paywall. A returning user sees the version without a trial, and its button should say "Subscribe", not "Start free trial".

To check both versions in the editor, click Variables in the sidebar and switch products.hasIntroductoryOffer between true and false.

Write trial copy with variables

Each product has variables for its trial, so your copy matches the store:

VariableExample
products.selected.trialPeriodText7-days
products.selected.trialPeriodDays7
products.selected.trialPeriodPrice$0.00
products.selected.trialPeriodEndDateMay 2, 2024
products.selected.price$39.99

For example:

Try {{ products.selected.trialPeriodDays }} days free, then {{ products.selected.price }}/{{ products.selected.period }}.

Paid introductory offers, such as Pay as you go or Pay up front, use the same trial variables. For example, a first month at $3.99 is products.selected.trialPeriodPrice. For every product variable, see Variables.

Override eligibility (iOS)

On iOS, you can override Apple's eligibility per paywall: offer the trial to users who've already had one, as a win-back offer, or hide it from everyone. In the paywall editor, open Products and choose an option under Introductory Offer Eligibility:

  • Automatic (Default): Apple decides.
  • Always Eligible: Users can claim the offer even if they've had one before.
  • Always Ineligible: No one sees the offer.

This needs iOS SDK 4.11.0 or later, iOS 16 or later, and both App Store Connect keys. See Overriding Introductory Offer Eligibility for the details, including purchase controller setup.

Remind users before the trial ends

A paywall can schedule a local notification that fires before the user's trial ends. Click Notifications in the paywall editor's sidebar, then + Add Notification, and set how many days before the end it fires. The user is asked to allow notifications after they start the trial. See Trial Reminder Notifications.

Target users in a trial

Testing trials

  • On iOS, a sandbox account that has subscribed to anything in the group is no longer eligible. Reset its eligibility, following Apple's Testing introductory offers, or use a new sandbox account.
  • If you reinstall the app during sandbox testing, the SDK may not know about earlier purchases until you restore. See Sandbox Free Trial Isn't Appearing.
  • On TestFlight, subscriptions renew on an accelerated schedule, once a day. See TestFlight Subscriptions.
  • In sandbox, a trial reminder notification fires after the set number of minutes instead of days.

If the trial doesn't show at all, see Why isn't my free trial showing up in my paywall?

How is this guide?

On this page