Paywall Smart Text
Create customized messaging on your paywall with smart text variables.
Paywall Smart Text is a feature that allows you to insert variables that are determined at the time the paywall is displayed to your user.
This capability allows for more flexibility to articulate, personalize, and contextualize your paywall messaging.
Product SKU Smart Text
Product SKUs can be tricky to work with because they have to be localized to the user's language and currency. Our Smart Text variables help you easily handle these situations.
Localization
Prices and currencies need to be localized for your users so they correctly understand what they are going to be billed.
Our SDKs handle this localization and our Product SKU Smart Text variables enable you to show the localized text to your users.
One-Time Purchases
One-time purchase SKUs are very simple and only have a price. You can insert the price on your paywall with ${sku.price}
.
Subscriptions
Subscription SKUs are a bit more complex. There are a few distinct time periods in the lifecycle of a subscription. These include:
- Free Trial
- Introductory Pricing Period
- Regular Recurring Billing Period
The table below outlines the information available in each period of the subscription lifecycle.
Price | Duration | Smart Text Includes | |
---|---|---|---|
Free Trial | ❌ | ✔️ | freeTrial |
Introductory Price Period | ✔️ | ✔️ | introductory |
Regular Recurring Billing Period | ✔️ | ✔️ | ❌ |
Working with Time Periods
Time periods can be tricky. We support multiple different Smart Text variables to give you the flexibility to craft your messaging.
In particular there are 8 different Smart Text variables related to the length of a subscription:
duration
durationInMonths
durationSingular
durationInMonthsSingular
period
periodInMonths
periodNumber
periodNumberInMonths
The Smart Text variables that specify ...inMonths
attempt to convert the subscription length to months. This is useful to comparing monthly and annual subscriptions.
Let's look at how these work with several concrete examples. Each column in the table corresponds to SKUs of different subscription length
Variable | 1 Week | 1 Month | 6 Months | 1 Year |
---|---|---|---|---|
duration | 1 week | 1 month | 6 months | 1 year |
durationInMonths | n/a | 1 month | 6 months | 12 months |
durationSingular | 1 week | 1 month | 6 month | 1 year |
durationInMonthsSingular | n/a | 1 month | 6 month | 12 month |
period | week | month | month | year |
periodInMonths | n/a | month | months | months |
periodNumber | 1 | 1 | 6 | 1 |
periodNumberInMonths | n/a | 1 | 6 | 12 |
Comparing Products
Comparing Prices as a Percentage
Smart Text can automatically calculate the price difference between 2 subscription SKUs and return it as a %. To use this, setup at least 2 products on your paywall and then add the variable into display text on the product you wish to highlight. Typically this will be a product with a larger duration.
Use variable ${sku.percentagePriceDifferenceFromSku:[#]}
to reference a product on the paywall by index. Indexing starts at 1 for the first product in the Added Products list.
Or use variable format ${sku.percentagePriceDifferenceFromSku:[sku_id]}
to reference a product directly by SKU id. Note: the SKU Id referenced must be available on the paywall.

Sample paywall with 3 products. 6 Month and 12 Month products show % saved from 1 month product.
In the example above, the 6 Month and 12 Month products were setup with subtext Save ${sku.percentagePriceDifferenceFromSku:1}
, which compared their prices to that of the 1 Month product at index 1.
${sku.percentagePriceDifferenceFromSku}
only works with subscription products.
Comparing Prices as a Dollar Amount
Smart Text can automatically calculate the price difference between 2 subscription SKUs per duration and return it as a dollar amount. To use this, setup at least 2 products on your paywall and then add the variable into display text on the product you wish to highlight. Typically this will be a product with a larger duration.
Use variable ${sku.priceDifferenceFromSku:[#]}
to reference a product on the paywall by index. Indexing starts at 1 for the first product in the Added Products list. See Multiple SKUs for more info.
Or use variable format ${sku.priceDifferenceFromSku:[sku_id]}
to reference a product directly by SKU id. Note: the SKU Id referenced must be available on the paywall.
The price difference translates both products to the same duration and then returns the dollar amount difference between the price. So for example, if you had a 6 month product with price $14.99 and a 1 year product with price $24.99, ${sku.priceDifferenceFromSku:1}
would not return $10, but rather $4.99, which is the difference in costs if the product durations were the same.
${sku.priceDifferenceFromSku}
only works with subscription products.
All Product Smart Text variables
Here's the full list of product SKU Smart Text variables
${sku.duration}
${sku.durationInMonths}
${sku.durationSingular}
${sku.durationInMonthsSingular}
${sku.period}
${sku.periodInMonths}
${sku.periodNumber}
${sku.periodNumberInMonths}
${sku.price}
${sku.pricePerMonth}
${sku.pricePerDay}
(SDK version 3.1.17+)${sku.freeTrialDuration}
${sku.freeTrialDurationSingular}
${sku.freeTrialPeriod}
${sku.freeTrialPeriodNumber}
${sku.introductoryDuration}
${sku.introductoryDurationSingular}
${sku.introductoryPeriod}
${sku.introductoryPeriodNumber}
${sku.introductoryPrice}
${sku.priceDifferenceFromSku:[# or product id]}
${sku.percentagePriceDifferenceFromSku:[# or product id]}
${sku.promoPrice:[# or promo ref id]}
${sku.promoDuration:[# or promo ref id]}
{sku.promoPeriod:[# or promo ref id]}
${sku.promoPeriodNumber:[# or promo ref id]}
${sku.promoDurationSingular:[# or promo ref id]}
Checking Correctness
Many smart text variables require data that are only available on device. The paywall preview in the Control Center will show XXXX as replacements in this situation.
Be sure to check your paywall in the iOS simulator, Android emulator, or an on-device build. If any variables are still showing with the ${name}
syntax, please check that the variable name is correct in the Control Center.
Updated 17 days ago