---
title: "Roll out a flow gradually alongside your paywall"
description: "Test a new flow on part of your audience while your existing paywall keeps serving the rest, using your own traffic split instead of a native Adapty A/B test."
---

> **AI agents**: to search Adapty docs faster and with fewer tokens, install the Adapty skill. Claude Code (self-updating via plugin): `claude plugin marketplace add adaptyteam/adapty-sdk-integration-skill && claude plugin install adapty-sdk-integration@adapty` — other tools: `npx skills add adaptyteam/adapty-sdk-integration-skill --all`

If you have a live paywall driving revenue, you may want to test a new flow with a small share of your audience before switching everyone over.

[Flows](adapty-flow-builder) and paywalls are different content types, so each lives on its own placement type — a flow placement and a paywall placement never share traffic.

This means Adapty's native A/B tests can't bridge the two: a Regular A/B test only compares variants on a single placement, and a Crossplacement A/B test works across paywall placements only. Comparing a new flow against your existing paywall is a cohort comparison, not a single native test.

This guide shows how to run that comparison as a gradual rollout: split traffic between the flow and the paywall yourself, and grow the flow's share over time.

## Set up the rollout

1. **Build and preview the flow**: Create a new [flow](adapty-flow-builder) and preview it on a device before wiring it into your app. For full migration steps, see [Migrate to flows](migrate-to-flows).
2. **Create a separate flow placement**: A placement serves one content type only, so create a new placement for the flow — you can't reuse your existing paywall placement ID. Keep the paywall placement live.
3. **Split traffic on your side**: Use a remote-config or feature-flag tool to decide, per user, which placement ID your app passes to `getFlow` — the new flow placement or the existing paywall placement.

:::note
[Firebase Remote Config](https://firebase.google.com/docs/remote-config) is one common way to do this — add a parameter (for example, `flow_rollout_percentage`) and read it in your app to pick the placement. This isn't an Adapty feature; it's a tool you configure on your own, separate from [Adapty Remote Config](customize-paywall-with-remote-config), which configures flow and paywall content itself.
:::

4. **Assign users persistently**: Bucket each user once, for example by hashing their user ID, so they keep seeing the same option — flow or paywall — as you change the rollout percentage. Otherwise, a user could switch between the two on every session.
5. **Increase the percentage gradually**: Start small, for example 10%, and raise it over time — 25%, 50%, 100% — as you confirm the flow performs as expected.

## Compare results

Because you assign each user to a cohort — flow or paywall — instead of Adapty randomizing and rebalancing them the way a native A/B test does, treat the two placements as separate cohorts rather than test variants. Each placement tracks its own metrics, so filter your [analytics](placement-metrics) by placement to see each cohort's numbers.

Compare conversion rates between the two cohorts, not raw counts: as you raise the rollout percentage, the flow cohort grows and the paywall cohort shrinks, so their absolute numbers stop being comparable even while their rates still are.

## Once you've fully switched

When all your traffic goes to the flow, retire the old paywall placement. From here, use a native [Regular A/B test](ab-tests) across flow variants on the flow placement to keep optimizing — see [A/B test types](ab-test-types) for how Regular and Crossplacement tests differ.