> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hyzl.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# A/B Testing Win-back Offers

> Test script-and-discount combinations against each other and promote the one that recovers the most revenue.

For any Stripe or RevenueCat win-back campaign, you can test a few different combinations against each other. The test shows which one recovers the most revenue, instead of relying on a single flat offer. On Stripe each variant pairs a script tweak with a discount percentage. On RevenueCat each variant pairs a script tweak with an App Store Connect offer.

## Set up a test

1. Open the campaign editor for the workflow you want to test
2. Go to **Revenue Recovery settings → A/B testing**
3. Turn on the **A/B testing** switch
4. Configure **2 to 5 variants**
5. Save the campaign

Saving the campaign is what starts the test. A/B testing is available for both Stripe and RevenueCat campaigns.

Each variant pairs an optional script tweak with its own win-back offer. You set each variant's offer independently of the others. The script tweak is a short instruction that shapes how the AI opens or frames the call.

From then on, hyzl splits every new recovery call evenly across the variants, automatically and consistently. A retry always stays in the variant hyzl assigned on the first attempt.

<Note>
  **RevenueCat variants use App Store offers.** Apple discounts come from an
  offer you create in App Store Connect, not a typed percentage. For a
  RevenueCat test, choose an App Store offer for each variant from the offer
  dropdown. If you need a different discount, the setup panel links you straight
  to App Store Connect with the price point to create. It then mints the
  redemption codes for you automatically. A test cannot start until every
  variant has an offer with codes ready.
</Note>

<Note>
  Once a test starts, its variants lock. The scripts and discount
  percentages can't be edited until the test is closed. This is intentional.
  Changing a variant mid-test would mean some calls used the old version and
  some the new. That makes it impossible to compare results fairly. If you want
  to adjust anything, close the current test first, then start a new one,
  or duplicate the closed test as a starting point.
</Note>

<Note>
  A 0% variant behaves like a 0% flat offer on a live call, which is a
  feedback-only conversation. It can't extend an offer on [resubscribe-link
  recoveries](/docs/revenue-recovery/the-call/resubscribe-links), since there's
  no discount to attach to the link.
</Note>

## Read results

While a test is running, and after it's closed, its results appear on the Revenue Recovery [Analytics](/docs/revenue-recovery/analytics/overview) page. They sit in the **Offer performance** card, inside the Cancellation recovery view, broken down by variant:

* The traffic split.
* How many calls went out.
* How many were saved.
* How many converted.
* The save rate.
* The revenue retained per month.
* The revenue collected from one-time win-back checkouts.

The variants sit side by side, so you can compare them directly. The variant with the highest revenue retained per month is marked **Leading**, once it's unambiguously ahead. A tie shows no badge. More than one test's results can be in the window, for example a closed test alongside the one that replaced it. Each test is then grouped under its own label, so results never blend together.

Click the **View results →** link in a running test's panel to jump straight to Analytics, already filtered to that workflow's results.

<Note>
  You may run recovery workflows for more than one trigger or provider. One
  example is a Stripe cancellation flow alongside a Stripe trial flow, or
  Stripe alongside RevenueCat. The Offer performance card then shows a row of
  tabs above the table: **All**, plus one per workflow. The tabs are labeled
  like **Cancellation · Stripe** or **RevenueCat**. You can then focus on a
  single workflow's results instead of reading them all blended together.
  The tabs only appear once there's more than one workflow's worth of
  results to split. Older results that predate this grouping fall under an
  **Earlier** tab.
</Note>

<Note>
  These are raw counts, not a statistical significance test. So hyzl doesn't
  yet tell you whether a difference between variants is large enough to be
  meaningful rather than chance. At low call volumes especially, treat the
  numbers as a directional signal, not a verdict.
</Note>

## Decide a test

Deciding a test, promoting a winner or relaunching with fewer variants, happens in one place: the **Offer performance** card on **Analytics**. Closing a test without deciding a winner is available in two places instead. One is **Close test** on that same Analytics card. The other is **Close test** in the campaign editor's A/B panel. Either one asks you to confirm. Recovery calls then immediately go back to using the campaign's flat win-back discount, and the variants unlock. You can then start a fresh test, or duplicate the closed one as a starting point.

### Promote a winner

Once you know how a test should end, click **Promote winner** on the **Offer performance** card (Analytics page). It is available any time a test is running. The dialog lets you choose variants, and what happens depends on how many you choose:

* **Choose one variant** to promote it. The test ends immediately. That variant's offer becomes the campaign's standing win-back offer, along with its script if it has a custom one. The other variants stop being used.
* **Choose two or more variants (but not all of them)** to keep them and relaunch. The current test closes, and its results stay right where they are on Analytics. A new test starts immediately with only the variants you kept, split evenly across them. For example, keeping 2 out of 5 variants puts each of the survivors at 50% of new calls.

Nothing is preselected, so you always choose deliberately, and selection is free: you can keep or drop any variant, including the original. The dialog shows exactly what will happen before you confirm.

<Note>
  If a promoted variant had a script tweak attached, promoting it does not
  copy that tweak into the campaign's base script automatically. The
  dialog calls this out, and you'll need to copy it over yourself if you
  want to keep it.
</Note>

<Note>
  Relaunching starts a fresh test rather than reallocating traffic within the
  current one, because changing a running test's split mid-stream would
  corrupt the comparison. A fresh test keeps every read on both tests honest.
</Note>

While a test is running, the campaign editor's A/B panel itself only shows **View results →** and **Close test**. The results link jumps to Analytics for that workflow. Use the Offer performance card on Analytics to promote a winner or relaunch with fewer variants.
