Paywall Smart Text

Create customized messaging on your paywall with smart text variables.

Paywall Smart Text is a set of features that allow 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.

Smart Text Enabled Fields

The following fields on Nami Paywalls support Smart Text variables.

  • Title
  • Body
  • List
  • Purchase Terms

Smart Text is also supported on the purchase buttons on the paywall. These fields can be found on the Product SKU

  • Display Text
  • Sub Display Text
  • Product Badge (some templates)

For paywalls created with the Nami Paywall Creator, the Display Text is shown on the button itself and the Sub Display Text is displayed immediately beneath the button on the paywall background.

In Linked Paywalls, you may use these fields in any way that works with your paywall design.


Smart Text Syntax

The syntax for all smart variables is ${variable_name}. Just write this into any of the supported fields.

When you check your paywall in the a simulator or on device, you'll see the Smart Text replaced with the appropriate values.

List of Smart Text Variables

Product SKUs

All the variables in this category deal with Product SKU. 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.



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}.


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.

PriceDurationSmart 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

Variable1 Week1 Month6 Months1 Year
duration1 week1 month6 months1 year
durationInMonthsn/a1 month6 months12 months
durationSingular1 week1 month6 month1 year
durationInMonthsSingularn/a1 month6 month12 month

Comparing Price Saved
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. See Multiple SKUs for more info.

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.

All SKU Smart Text variables

Here's the full list of 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.freeTrialDuration}
  • ${sku.freeTrialDurationSingular}
  • ${sku.freeTrialPeriod}
  • ${sku.freeTrialPeriodNumber}
  • ${sku.introductoryDuration}
  • ${sku.introductoryDurationSingular}
  • ${sku.introductoryPeriod}
  • ${sku.introductoryPeriodNumber}
  • ${sku.introductoryPrice}
  • ${sku.percentagePriceDifferenceFromSku:[# or product id]}

Multiple SKUs

The SKU button always references a single SKU. However, the Title, Body, and Purchase Terms may reference multiple SKUs if you are selling 2 or more different SKUs on a single paywall.

Smart Text supports a 1-indexed array notation for all fields that may refer to multiple SKUs. The syntax is ${sku.#.<variable>}. The SKU number is always based on the order of the SKUs you have set in the Control Center for the paywall.


  • ${sku.1.price} - The price of the 1st SKU on the paywall
  • ${sku.2.duration} - The duration of the 2nd SKU on the paywall


Title, Body, and Purchase Terms must use array notation for SKU Smart Text variables, even if there is only 1 SKU on the paywall.


The value of ${sku.1.price} will change if you re-order the SKUs on the paywall.

Setting SKU Button Text

Through the Nami Control Center, you can configure the text displayed on the SKU purchase button on the paywall, called the Display Text as well as an optional text field that displays beneath the purchase button, the Sub Display Text.

These fields can be found on the SKU Detail Page.

  1. Navigate to the Products section of the Control Center.
  2. Click the Edit button for a SKU.
  1. Click the "Languages" tab

  2. Edit the Display Text and Sub Display Text fields on the detail screen using any of the Smart Text Variables described above.

If your product SKU has multiple languages, you don't need to translate the Smart Text variables for each language. The SKU Smart Text variables are automatically translated in the SDK. However, if you want different Display Text copy for each language, you can set it here and incorporate Smart Text.

  1. Click "Update Language" to save changes.

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.