Feature

A/B test paywalls and offerings in your app with audiences and targeting rules

RevenueDot lets you show different offerings to different customers and A/B test two of them, with no app release. Audiences filter customers by country, platform, spend and attributes. Ordered targeting rules and placements pick the offering. An experiment splits customers deterministically and reports conversion, revenue and the chance the new offering wins.

Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.

Audiences

Conditions on country, platform, app version, subscription status, entitlements, spend, dates, attribution and custom attributes.

Ordered rules

The first live rule that matches decides the current offering. Reorder rules and set start and end times.

Placements

Ask for the offering of a spot in your app, such as onboarding_end, and target it separately.

Experiment results

Customers per variant, conversions, trials, revenue, revenue per customer and the chance the treatment converts better.

How does RevenueDot decide which offering a customer sees?

Your app asks for the current offering, or for the offering of a placement. RevenueDot answers per customer, in this order: an offering you assigned to that one customer through the API, then your live targeting rules from the top, then the project's current offering.

An audience is a set of conditions. Conditions in a group must all be true, and separate groups are alternatives. Preview shows how many of your customers match today.

  • Fields: country, platform, app version, SDK version, locale, subscription status (active, trialing, expired, never), active entitlements, total spent, first and last seen, latest product, email, attribution (campaign, media source) and any customAttribute:<key>.
  • A rule can have start and end times through the API.
  • Rules are checked from the top. Use Move up and Move down to order them. New rules start off.

How do you read the targeted offering in your app?

Your app code stays the same. It reads the offering the way it does today, and RevenueDot decides which one comes back.

Offerings.swiftSwift
let offerings = try await Purchases.shared.offerings()

// The offering your targeting rules chose for this customer.
let paywallOffering = offerings.current

// The offering for a placement you named in a rule.
let onboarding = offerings.currentOffering(forPlacement: "onboarding_end")

Steps

How to run an offering A/B test

An experiment compares two offerings: a control (a) and a treatment (b). Each offering can carry its own paywall.

  1. 01

    Create both offerings

    Make the control and the treatment offering in your catalog, with the packages and the paywall each one should show.

  2. 02

    Create the experiment

    Open Experiments and select New experiment. Pick both offerings, an optional audience and the share of customers to enroll.

  3. 03

    Start it

    Select Start. Matching customers are enrolled the next time the app fetches offerings and always keep the same variant.

  4. 04

    Read the results

    Wait for at least 100 customers in each variant, then compare conversions, trials, revenue per customer and the chance the treatment converts better.

  5. 05

    Pause or stop

    Pause keeps enrolled customers on their variant and enrolls nobody new. Stop ends the experiment for good.

What do experiment results show?

Enrollment is deterministic: a customer who matches always lands in the same variant. Enrolling sends an EXPERIMENT_ENROLLMENT webhook once per customer and experiment, and enrolled customers' purchase, renewal and cancellation webhooks carry an experiments list, so your analytics tool can split by variant.

  • Customers per variant.
  • Conversions, which count any purchase or trial after enrolling.
  • Trials, revenue and revenue per customer.
  • The chance the treatment converts better than the control.

What is in the API?

Audiences live at /v2/projects/{project_id}/audiences and targeting rules at /v2/projects/{project_id}/targeting_rules. Experiments live at /v2/projects/{project_id}/experiments, with .../results per variant. Start, pause and stop are actions on the experiment. An experiment compares two offerings, so test several ideas one after the other.

FAQ

Targeting and experiments: questions people ask

How do I A/B test paywalls in my iOS or Android app?

Create two offerings, each with its own paywall, then create an experiment in RevenueDot that enrolls a share of your customers and sends half to each offering. Customers keep their variant, and the results page shows conversions, revenue and the chance the new offering wins. No app release is needed.

Can I show a different paywall to customers in a specific country?

Yes. Create an audience with a country condition, then a targeting rule that gives that audience a different current offering. The offering carries its own paywall. The first live rule that matches the customer decides.

What is a placement in an offering?

A placement is a named spot in your app, such as onboarding_end. A targeting rule can assign a different offering to each placement, and the app asks for it with offerings.currentOffering(forPlacement:).

How many customers do I need for an experiment result I can trust?

RevenueDot suggests waiting for at least 100 customers in each variant before you read the chance the treatment converts better. Small samples swing a lot, so let the experiment run until both variants have enough customers.

Can one customer be in two experiments?

Enrollment is per experiment and deterministic, so a customer always keeps the same variant in an experiment. To keep results clean, give overlapping experiments different audiences.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free