Adding Products
Add your existing products from their respective storefront, such as the App Store or the Google Play Store, to an app so they can be used in one or more paywalls.
Right now, Superwall for iOS does not support Promotional Offers, only Introductory Offers. Superwall for Android only supports 1 billing phase per offer.
To get started, select an app. Then click the Products button from the sidebar. Choose + Add Product:
From there, you have five fields to fill out:
Field | Description |
---|---|
Identifier | The StoreKit or Google Play product identifier for your product. |
Trial | The trial duration attached to the product, if any. |
Price | The price attached to the product. Either type one in, or just the dropdown to select common price points. |
Period | The length of the subscription. |
Entitlements | The entitlements this product belongs to. |
When your done, click Save.
Note that the pricing information you enter here is only used in the Paywall Editor. On device, that information is pulled directly from the App Store or Google Play Store and will be localized.
Take care to make sure your product identifier is correct and matches its storefront. This is the most common cause for products not working correctly when testing.
Entitlements
Entitlements represent the amount of access or features users are entitled to. They can be used to offer different tiers of service, or just represent a single “active” subscription if your app only has one level of service (i.e. “Pro” unlocks everything). All products are granted a default entitlement.
If you don’t have multiple tiers of service, then you don’t need to make any additional entitlements.
To add an entitlement, click on the Entitlements tab within the products page. Then click Add Entitlement:
From there, give it a name, and click Create:
At this point, you can go back to your products and attach one or more entitlements to each one.
Editing entitlements
To edit or delete and entitlement, click on the trailing pencil icon or the trash can icon to remove one. Note that if your entitlement is associated with any product, you’ll need to remove it first before you can delete it.
Getting product identifiers
If you use RevenueCat to handle in-app subscriptions, skip to Using RevenueCat
Using App Store Connect
On App Store Connect, head over to Your App ▸ App Store ▸ Subscriptions ▸ Your Subscription Group:
Then, copy your Product ID:
Using Google Play Console
To add subscription products, on Google Play Console, head over to Your App ▸ Monetize ▸ Products ▸ Subscriptions:
You can also grab your base plan id and any offer ids if you’re going to use them.
To add in-app products, no base plan id is required. For period, select None(Lifetime/Consumable):
Google Play Offers
Google play allows you to create multiple base plans and multiple offers for each base plan. When using Superwall, you can either specify a specific offer or let Superwall choose the best offer for the user.
Automatically Choosing Offers
Once Google has returned offers that are applicable for that user, Superwall will use the following logic to choose the best offer for the user:
- Find the longest free trial the customer is eligible for
- If there is no free trial, find the cheapest introductory period the customer is eligible for
- If there is none, fall back to the base plan
- If you have an offer on one of your products that you never want to automatically be selected by this logic (for example, because it is a discount only used for a specific customer group), you can add the tag sw-ignore-offer to that offer.
That means that if your eligiblitiy criteria is set so that someone can use an offer only once, we’ll respect that and choose from the best remaining offers.
Specifying Offers
Let’s say you have a base plan with two or more offers which differ in trial duration. You may want to A/B test these offers to see which one performs best. To achieve this, you can specify the offer id in the Superwall dashboard.
When we specify an offer id, we’ll ignore the logic above and always use the offer if the user is eligible. If the user is not eligible for the offer, we’ll fall back to the base plan. The eligiblity criteria is set in the Google Play Console, and is based on the user’s purchase history.
Using RevenueCat
For those who use RevenueCat, Superwall can automatically pre-populate your product identifiers to choose from when adding a product. In the Add Product modal, Superwall will display any product attached to an offering by following the steps below.
On RevenueCat, make sure your products are associated with an offering (it doesn’t need to be the current offering):
Then, add your RevenueCat Public API Key inside of settings by clicking the cog wheel icon in the navigation bar from any page and selecting Settings. Paste your API key then click Update Application:
Using products in paywalls
After you’ve added products to an app, you’re ready to start using them in paywalls. Check out our docs for a step-by-step guide on how to do that.
Understanding how consumable and non-consumable products work
Superwall uses entitlements to determine access to features instead of treating purchases as a simple “subscribed/unsubscribed” status. To that end, here is how to work with consumable and non-consumable products:
- Consumable products (e.g., credits, tokens, energy boosts) generally aren’t associated with an entitlement.
- Non-consumable products (e.g., a lifetime unlock) should be linked to an entitlement in Superwall. This ensures users who purchase them receive the appropriate access to features.
Note that on iOS, if you’re using consumables you need to include SKIncludeConsumableInAppPurchaseHistory
(Apple’s docs here) in your info.plist
file. Ensure its type is set to Boolean
and its value is YES
. Note that on pre-iOS 18 devices, StoreKit 1 will be used when this key is present.
Understanding paid offer types
Any paid up front or pay as you go product offer types will also be referenced using the trial
variables. In Superwall, these are represented as “paid trials”. For example, to reference the product’s trial price of $3.99 in the image below, you’d use products.selected.trialPeriodPrice
:
For more on setting customized text using Liquid Templating, visit this doc.
A note on StoreKit configuration files
If you’re using a StoreKit Configuration file, pricing information will come from there during local testing. Therefore, it’s important to keep your StoreKit Configuration file, Superwall, and the App Store products all in sync. Follow our Setting up StoreKit testing guide for more information.
Having an issue on device with products not appearing? Run through this checklist to make sure everything is configured correctly.