This page is outdated. Please visit this one for the most relevant information.

  1. Rules are evaluated in order.
  2. Once a rule is matched, no other rules are evaluated within the campaign.
  3. A user’s paywall assignment is sticky.

Assignments Are “Sticky”

Once a user is assigned a paywall or a holdout within a rule, they will continue to see that assignment, regardless of the paywall’s percentage, unless you reset assignments by clicking the reset icon next to Assigned or remove the paywall from the rule via the X button.

Remember: Changing a paywall’s percentage only affects new users. It doesn’t affect assignments for users who already saw that paywall.

This allows you to decide if you should continue showing an old paywall to users who already saw it. For example, you may decide to increase prices but keep the paywall with the old pricing visible for those who’ve already seen it.

Adding Rules

Add a rule to a campaign by clicking the Add Rule button from within a campaign.

Updating Conditions with the Rule Editor

Change a rule’s condition by clicking the highlighted condition itself:

In this example, we add a condition that evaluates to true if user has logged greater than or
equal to 3 days.

In this example, we add a condition that evaluates to true if user has logged greater than or equal to 3 days.

This opens the Rule Editor. Here, you can edit the rule to set conditions based on user, device or event parameters and set a limit to how often the rule is matched:

In this example, only users who have the en deviceLanguageCode and have a creator account_type will match this rule. They will only match this rule once every 2 days.

Clicking on the condition reveals a dropdown of possible conditions which you can filter on:

Conditions are added to this list when data is retrieved from the SDK via registering events or setting user attributes. If a condition doesn’t yet exist in the drop down, you can manually add it by referencing it with dot syntax. For example, user.custom_parameter would reference custom_parameter on the user object. As with paywall text variables, the following objects are all available to use:

userUser attributes that you set via the SDK using setUserAttributes(_:). See Setting User Attributes
paramsParameters defined when registering an event.
deviceDevice attributes that are gathered by the SDK.

Additionally, you can use the following device properties: device.minutesSince_X, device.hoursSince_X, device.daysSince_X, device.monthsSince_X, and device.yearsSince_X, where X is the name of an event that you’ve registered or a Superwall event. This gives you the days etc since the last occurrence of the event that you specify, excluding the event that triggered the paywall. For example, a campaign with an app_open event and the rule device.daysSince_app_open > 3 will present a paywall on app open only if the last app_open event was over 3 days ago.


You can also add a limit to how often a rule should trigger. This allows you to say “show this once per day” or “show this once per week”. It allows you to balance between number of paywall impressions (which increase conversions) with the potential impact on retention if you show the paywall too often.


Segmenting Users into Cohorts Across Campaigns

Users are assigned a random number from 0 to 99 on app install (which is reassigned if you call reset()). You can use this to segment users into cohorts across campaigns. For example, in campaign A you may have a rule if user.seed < 50 { show variant A } else { show variant B }, in campaign B you may a rule if user.seed < 50 { show variant X } else { show variant Y }. Therefore users who see variant A will then see variant X.

Rule Settings

The following settings can be access by clicking the ellipse icon to the right of any rule

Move UpSwaps the rule’s order with the rule directly above it.
Move DownSwaps the rule’s order with the rule directly below it.
PausePauses the rule, preventing it from being evaluated all together.
DeleteDeletes the rule.