VoidhashDocs
DevelopersHelp centerGuidesAPI reference
Dashboard
Help center
Get started
Get access to Studio
Find your way around Studio
Glossary
Files and bots
Files and boards
Bots
Analytics
Analytics overview
Reports
Chart reference
Metric definitions
Insights and dashboards
Query with VoidQL
Alerts
Check your data
Ads
Ad measurement
Connect Meta Ads
Send purchases to Meta
Ads reports
People
Find and help a person
Refunds and cancellations
Products
Set up products and perks
Paywalls
Design a paywall
Prices and buttons
Design for every device
Onboarding flows
Translate a paywall
Fonts and images
Paywall components
Build and deploy
Paywall locations
A/B testing
Feature flags
A/B tests
Automations
Automations
Push notifications
Settings
Payment providers
Manage projects and teams
Members and roles
SSO and directory sync
Notices
Plans and billing
Audit log
Your account
Help
FAQ
Troubleshooting

A/B tests

Split the people who reach a paywall location between paywalls and find out which converts better.

An A/B test shows different paywalls at the same paywall location and measures which one makes more people convert. Each variant is a paywall and a share of traffic. Voidhash picks each person's variant when their app opens the location, so the app needs no changes.

Early access

A/B tests are in early access. Ask us on Discord, or email support@voidhash.com on a paid plan, to turn them on for your team.

Set up a test

Create the test

Open A/B testing → A/B tests, click New A/B test, enter a Name of 3–64 characters and click Create A/B test. The test's page opens. A new test is a Draft with Variant A and Variant B at 50% each.

Describe it

On the Overview tab, add a description and a Hypothesis: what you expect to happen, and why.

Add locations and paywalls

The variants grid has a row per variant and a column per location. Click Select location for the first column, and Add location to run the same test at more places. In each cell, click Select paywall and pick the paywall that variant shows there. Every paywall needs a live build; see Build and deploy.

Set the split

An A/B test's Overview tab: the hypothesis, the variants with their paywalls, and the test's propertiesEach variant gets a paywall and a share of traffic

Give each variant a weight; weights must add up to 100%. While they don't, Split evenly divides traffic equally. Add variant adds more than two. The first row is the control, the variant the others are compared with.

Choose the goal

In the properties, set the Goal event: what counts as a conversion. Type the event's code exactly as shown:

  • For a paywall that sells subscriptions, type $subscription.created. It counts Subscription started: every new subscription, free trials included.
  • For one that sells one-time products, or both kinds, type $purchase.completed. It counts Purchase completed: every new purchase, but not renewals.

Always set the goal before you start. An empty goal counts nothing, and every variant shows 0 conversions.

An event your app records works too; ask your developers for its exact name. Secondary events, comma separated, are recorded for reference. Both lock once the test starts.

Save and start

Click Save changes, then Start. The test turns Running and replaces whatever the locations showed.

A test can't start while a variant's paywall has no live build, or while one of its locations runs another test. Each location runs one test at a time.

Statuses

StatusWhat happens at the locations
DraftNothing changes yet. Everything can be edited.
RunningEach person sees their variant's paywall. Variants and locations are locked.
PausedEveryone sees the control's paywall, and nobody is counted. Variants can be edited again.
ConcludedThe test has ended and each location shows the winner. Final.
ArchivedListed under Archived and All. A running or paused test's locations show no paywall.

Use Start, Pause, Resume, Conclude, Archive and Restore on the test's page. Conclude is available once the test has started. Conclude a test before you archive it, so its locations keep showing a paywall. Restore brings an archived test back. A test that was running then shows everyone the control's paywall and counts nobody until you Pause and Resume it.

The name, description and hypothesis stay editable until the test is concluded or archived. The change history at the bottom of the Overview tab lists every change, with the user ID of whoever made it, or System, and when; Changes shows the details. Members see "Could not load activity." instead.

How people are assigned

Each person is assigned at random, but consistently: they see the same variant every time and, once signed in, on every device. Someone who signs in during the test may move to another variant.

  • A variant always shows its paywall's current live build. Deploying a new build of that paywall changes the variant while the test runs.
  • Changing weights while paused can move people between variants when you resume.
  • A person whose app is too old to show a variant's paywall sees nothing there and isn't counted.
  • People who declined analytics still see a paywall but aren't counted.

Read the results

The Results tab has a row per variant:

The Results tab of an A/B test: people, conversions, rate, revenue and a reading for each variantRead the Reading column to see which variant wins

ColumnMeaning
PeoplePeople who saw the variant, counted in the variant they saw first.
ConvertedPeople who reached the goal any time after first seeing it.
RateConverted divided by People.
RevenueRevenue from those people after they first saw it, in US dollars.
ReadingHow the variant compares with the control.

Reading is one of:

  • Better than the control or Worse than the control: the difference is unlikely to be chance (95% confidence). With several variants, each needs a bigger difference, so the chance of any false winner stays at 5%.
  • No clear difference: there's enough data, but the difference could still be chance.
  • Too early to tell: fewer than 100 people in the variant or the control, or fewer than 10 conversions in the two together.
  • Nobody yet: nobody has seen this variant, or the control, yet.

Results cover the time since the test last started or resumed, and only production traffic: people who saw a paywall through a test key, and their simulated purchases, don't appear here. Secondary events aren't analyzed. On Voidhash Cloud, the A/B tests list also shows Views, Unique viewers, Purchases and Conversion for each test.

Conclude a test

Click Conclude, pick the winner under Winning variant (optional) or leave it at No winner, and click Conclude in the dialog. The winner's paywall is placed at each location; with no winner, the control's. A concluded test can't restart; create a new one.

If something's off

  • Every variant shows 0 conversions: the Goal event is empty or misspelled. It locks once the test runs, so conclude and start a new test.
  • Start does nothing: a variant's paywall has no live build, a location runs another test, or you're a Member. Studio shows no message.
  • People stays at 0: nobody has opened the locations since the test started, or the Experiment exposure event is off in Settings → Events. It's off by default in self-hosted Studio.
  • "Failed to create A/B test" or "Failed to save changes": Members can open tests but not change them. See Members and roles.
  • Stuck on Too early to tell: the locations get too little traffic. Run the test longer, or add locations.

For developers: tests can also be managed from the CLI or the API (developer docs).

Next steps

  • Create a paywall location
  • Read paywall reports
  • Test messages in an automation

Still stuck? Check Troubleshooting, ask us on Discord, or email support@voidhash.com on a paid plan.

Something wrong or missing on this page? Tell us by email or on Discord.

PreviousFeature flagsNextAutomations

On this page

Set up a testCreate the testDescribe itAdd locations and paywallsSet the splitChoose the goalSave and startStatusesHow people are assignedRead the resultsConclude a testIf something's offNext steps