Skip to main content
Skip to navigation
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

Creating rules

Decide what each audience sees at each Checkpoint, from the dashboard or the MCP.

Ask RicoChatGPTClaude

A targeting rule says: At these Checkpoints, this audience gets this Flow or Offering. Create rules from Targeting in the dashboard.

Flows and Paywalls​

A Flow is one or more RevenueCat UI steps that you build in the dashboard and serve to customers at a Checkpoint. With Checkpoints enabled, the Paywalls page becomes Flows and paywalls, and it holds every Flow you build. Most Flows today are Paywalls, but a Flow doesn't have to include one. An onboarding Flow, for example, could have no Paywall at all.

Serve a Flow or an Offering​

A targeting rule serves either a Flow or an Offering:

  • Flow. RevenueCat UI you build in Flows and paywalls. The SDK presents it for you.
  • Offering. Your app gets the Offering and shows its own paywall through a custom paywall presenter.
    • Without a presenter, the SDK shows the Offering's attached paywall or RevenueCat's default paywall if none is attached.

Use one Offering on many Paywalls​

Previously, each Offering could only have one Paywall attached to it. Now, when serving Paywalls through Checkpoints, any number of Paywalls can use the same Offering.

When selecting the Offering to use on a Paywall, you'll now see Offerings grouped as either:

  • No attached flow: By selecting this Offering, you attach this Flow to it. The Flow is delivered to customers whenever this Offering is served directly, and can also be served through Targeting.
  • Flow attached: An Offering with a Flow already attached will still deliver that Flow to customers when this Offering is served directly. Additional Flows using that Offering can be served through Targeting.
⚠️Shared Offerings only reach the SDK through Checkpoints

The Offering's original Paywall is still the one returned by getOfferings and shown by older SDKs. Any other Paywall that uses the Offering is delivered only through a targeting rule.

Share a Flow across rules​

One Flow can be used by many rules. Editing a shared Flow changes it everywhere it's used. To change it for one rule only, detach it in the rule editor first.

Create a Checkpoint​

Checkpoints are created automatically the first time the SDK reaches them. To create one ahead of time, add it while you create a targeting rule. In the rule editor, click the Checkpoints field and choose New checkpoint. Then register the same identifier in your app.

Create a rule​

  1. In Targeting, click New rule.
  2. Checkpoints: Pick one or more Checkpoints for the rule to apply to.
  3. Audience: Pick a saved audience from Audiences. Use All customers to target everyone.
  4. Flow: Pick a Flow or select an Offering to serve instead.
  5. To set a rule live, select:
    • Make live to start now.
    • Make live with an end date to set the rule live until the end date.
    • Schedule to make the rule live at a later time.

Schedule times are in UTC.

Order rules​

New rules go to the bottom of each Checkpoint's order. To change the order, scroll to a Checkpoint, click Order rules, and then Save order after making your changes.

📘Ensuring all customers are served something

If you want everyone to be served a paywall at a Checkpoint, add an All customers rule last on a Checkpoint as a catch-all to ensure every customer that doesn't fit in a narrower rule is always served something at the Checkpoint.

Manage rules​

  • Make inactive pauses a rule without deleting it.
  • Duplicate copies a rule.
  • Delete removes it.

Coming soon: Create rules with Rico​

In Targeting, click New rule and choose Create with Rico. Describe it in plain language and Rico builds it, for example: "Show the winter paywall to US customers at onboarding_completed."

Create rules with the MCP​

The RevenueCat MCP server can list, create, update, and delete targeting rules, including Checkpoint rules. Ask your agent, for example: "Add a rule at onboarding_completed that shows the spring paywall to all customers."

How rules are evaluated​

When a customer reaches a Checkpoint, the SDK evaluates that Checkpoint's rules on the device.

Order and matching​

  • Rules run top to bottom. The first match wins.
  • Each Checkpoint has its own order. If one rule is served on multiple Checkpoints, you can order it differently at each one.
  • If no rule matches, nothing is shown and the Checkpoint continuation runs with a CheckpointResult whose flow is nil / null.

Every visit is evaluated again​

Rules are checked every time the customer reaches the Checkpoint. If their Audience changes, or you reorder rules, they can get matched to different rules over time.

Experiment assignment is the exception. See How assignment works.

Data the rules use​

The SDK uses what it knows on the device at that moment, including:

  • Entitlements and purchases
  • Device and app details, like platform, app version, and locale
  • Store country
  • Customer attributes set on this device
  • Coming soon: custom variables passed to checkpoint()

Data that changes during the session, like a new purchase or attribute, counts right away. A rule that uses data the SDK doesn't have, doesn't match.

Scheduled rules​

The SDK starts and stops scheduled rules on time, using the device clock. A rule keeps its position while it's scheduled.

Offline and first launch​

The SDK caches rules and uses the last fetched version when offline. If it has never fetched rules, it reports a configuration error through the error presenter and the Checkpoint continuation doesn't run. This prevents the customer from continuing past the Checkpoint before determining whether they match a rule.

FAQs​

What happens when no rule matches at a Checkpoint?​

Nothing is shown. If you want to ensure your customers are always served a paywall at a given Checkpoint, add an All customers rule as a catch-all and keep it last in the rule order. To limit the audience to only customers without an entitlement, create an audience like No active entitlements with Has active entitlement is false.

Troubleshooting​

Nothing appears at my Checkpoint​

  • Check that a rule is Live for that Checkpoint and that the customer matches its audience.
  • Check that the identifier in your app matches the dashboard exactly.
  • Check the SDK debug logs. They say why nothing was shown.

The wrong Flow appears​

Rules run in order and the first match wins. Move the rule you want higher, or narrow the audience of the rule above it.

A shared Offering shows its original Paywall​

getOfferings and PaywallView show the Offering's original Paywall. Serve other Paywalls through checkpoint() instead.

Was this page helpful?