Launch experiments
Plan, configure, and launch monetisation experiments with flexible A/B testing solution
This guide helps you walk through four main steps to launch your experiment:
- Plan your experiment
- Configure and test variants
- Adjust traffic level
- Launch the experiment
1. Plan your experiment
Writing down your hypothesis before configuring and starting the experiment is essential. This helps to avoid several biases (for instance, confirmation bias) during experiment analyses.

Choose your Primary Metric
You can select the Primary Metric for the experiment from the metrics that Qonversion analytics tracks:
- User-to-Trial Conversion
- User-to-Paid Conversion
- New Trials
- Trial-to-Paid Conversion
- Trials Cancellation Rate
- New Subscriptions
- Subscriptions Cancellation Rate
- Sales
- Proceeds
- Refunds
2. Configure and test variants
Prerequisites
To enable Qonversion to run and calculate A/B testing results, you need to have Qonversion SDK installed in your app.
By using Qonversion Experiments, you can test any part of your paywall (and even more). Moreover, Experiments and Remote Config share the same API & architectural concepts, so you do not need to implement complex logic to use both.
Use various data types
You can select one of the following:
- String, native.subs.full.v4.w.8.99.trial.7d, Unlock Fast and Secure Browsing, #3076FF, etc.
- Number, 2, 5, 23, etc.
- Boolean, true, false.
- Json,
{"banner_text": "Choose your plan", "skip_onboarding": true}
, etc.
Please, follow the Remote Config data types guide for more details.
Get your configuration
Simple remoteConfig
SDK method enables you to retrieve previously built configurations. This method is created for both, Experiments and Remote Config features, follow this guide to learn more.
Test changes before launch
We highly recommend testing if your app works properly with the changes you want to roll out to your users. You can do so by following the following steps:
- Copy the ID for your experiment and the variant you want to test.

- Pass the values to Qonversion SDK by using the
attachUserToExperiment
method
Qonversion.shared().attachUser(toExperiment: "your_experiment_id", groupId: "your_group_id") { success, error in
// handle result
}
[[Qonversion sharedInstance] attachUserToExperiment:@"your_experiment_id" groupId:@"your_group_id" completion:^(BOOL success, NSError * _Nullable error) {
// handle result
}];
Qonversion.shared.attachUserToExperiment("your_experiment_id", "your_group_id", object : QonversionExperimentAttachCallback {
override fun onSuccess() {
// handle success
}
override fun onError(error: QonversionError) {
// handle error
}
})
Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id", new QonversionExperimentAttachCallback() {
@Override
public void onSuccess() {
// handle success
}
@Override
public void onError(@NonNull QonversionError error) {
// handle error
}
});
await Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id");
await Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id");
Qonversion.GetSharedInstance().AttachUserToExperiment("your_experiment_id", "your_group_id", (success, error) =>
{
// handle result
});
await Qonversion.getSharedInstance().attachUserToExperiment("your_experiment_id", "your_group_id");
- In case your user has already been attached to another experiment, use the
detachUserFromExperiment
method.
Qonversion.shared().detachUser(fromExperiment: "attached_experiment_id") { success, error in
// handle result
}
[[Qonversion sharedInstance] detachUserFromExperiment:@"attached_experiment_id" completion:^(BOOL success, NSError * _Nullable error) {
// handle result
}];
Qonversion.shared.detachUserFromExperiment("attached_experiment_id", object : QonversionExperimentAttachCallback {
override fun onSuccess() {
// handle success
}
override fun onError(error: QonversionError) {
// handle error
}
})
Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id", new QonversionExperimentAttachCallback() {
@Override
public void onSuccess() {
// handle success
}
@Override
public void onError(@NonNull QonversionError error) {
// handle error
}
});
await Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id");
await Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id");
Qonversion.GetSharedInstance().DetachUserFromExperiment("attached_experiment_id", (success, error) =>
{
// handle result
});
await Qonversion.getSharedInstance().detachUserFromExperiment("attached_experiment_id");
- Call the Qonversion
remoteConfig
method. Now Qonversion SDK returns data associated with previously set experiment and variant. - Validate your app logic without starting the experiment.
Pay attention before release
Do not forget to remove the usage of the
attachUserToExperiment
method before your app release. Otherwise, all your users may be exposed to only one experiment group.
Segment your users
You have the following segmentation opportunities at your disposal:
- App install date
- App version
- Country
- Store
- User's active subscription
Follow this guide to learn more.
3. Adjust traffic level
We do not recommend starting your experiments with 100% of all eligible users. It might be enough to start with 10% to ensure everything works fine and gradually increase your traffic level later.

4. Launch the setup
Once you have your experiment configured, segmentation, and traffic level set, it's time to start your experiment and proceed to the section with real-time analytics.

Updated about 1 month ago