Back to all articles

How to A/B test conversational ads in a chat app

Learn how to A/B test conversational ads in an AI chat app in 2026 — traffic splits, sample size, RPM math, and what to track before shipping a winner.

ELContent TeamAug 7, 2026 — 8 min read
How to A/B test conversational ads in a chat app

Running two ad variants in an AI chat app without a controlled test tells you nothing about which one actually lifts revenue per session. This guide covers the mechanics of A/B testing conversational ads in 2026 — traffic splitting, sample size, statistical significance, and what an adserver should be logging for you automatically.

TL;DR
  • A/B testing conversational ads means splitting live chat sessions and comparing RPM, not click rate alone.
  • Run each variant to at least 1,000 completed conversations per arm before trusting a winner in 2026.
  • Elo's SDK logs impression, click, and conversion events per variant, so you don't need a separate analytics layer.
  • Native ad cards generally outperform banner-style prompts on click-through, but confirm it on your own traffic.
  • Test one variable at a time — copy, placement, or format — never all three in the same run.

Why this matters

A chat app that swaps ad copy every few weeks based on gut feeling is guessing, not optimizing. Conversational ads live inside the message stream, which means format, tone, and placement affect both click-through and how many users churn out of the conversation entirely. A bad variant doesn't just underperform — it can suppress engagement on the next ten messages.

Most teams shipping AI chat products in 2026 track click-through rate and stop there. That's the wrong metric to optimize alone. RPM (revenue per thousand sessions) accounts for fill rate, CPM, and conversion together, and it's the number that actually shows up on your revenue graph at the end of the month.

What you'll need

  • An ad SDK already integrated into your chat app — see the Next.js integration guide if you haven't wired this up yet
  • Two ad creative variants that differ in exactly one dimension (copy, card format, or placement)
  • A deterministic traffic-splitting mechanism (session ID hash, feature flag, or SDK-level config)
  • Baseline RPM and CPM figures from your current live traffic
  • A minimum sample size threshold set before launch — not decided after you see early results
  • Dashboard or log access to pull event-level data per variant

The steps

1. Define the single variable you're testing

Pick one thing: ad copy, card format, placement in the conversation, or ad density. Testing copy and placement at the same time means you can't attribute the lift to either one. Write down the hypothesis in one sentence — "native card ads convert better than inline text prompts in a support chatbot" — before you build anything.

Common mistake: shipping a full creative refresh (new copy, new format, new CTA) as one "variant B." You'll get a result, but you won't know why.

2. Build both variants inside your ad configuration

Set up variant A (your control) and variant B (the challenger) as separate ad units in your adserver dashboard. Elo's dashboard supports multiple creative variants per placement, so you can toggle between them without redeploying code. Keep everything else — targeting, category, matcher settings — identical across both arms.

3. Split traffic deterministically

Assign each session to A or B based on a hash of the session ID, not a random call on every page load. Random-per-request assignment lets a single user see both variants in one conversation, which corrupts your data. A 50/50 split is standard; skew it to 90/10 only if you're nervous about a risky new format and want to limit exposure.

4. Set your minimum sample size before launching

Decide the conversion count per arm you need to trust a result — 1,000 conversions per variant is a reasonable floor for most chat apps in 2026, fewer if your baseline conversion rate is unusually high. Write this number down before you look at any data. Peeking at results early and stopping the test the moment one variant looks ahead is the single most common way teams fool themselves.

5. Run the test for a full cycle, minimum one week

Chat behavior differs by day of week and by time of day — a support bot sees different traffic on a Monday morning than a Saturday night. Running a test for 48 hours captures one slice of behavior, not the average. Seven days minimum, ideally two full weeks if your app has a monthly usage pattern (billing chatbots, tutoring apps).

6. Pull event-level logs and calculate RPM per arm

Compare impressions, clicks, and conversions for each variant, then calculate RPM: (total ad revenue / total sessions) x 1000. A variant with a higher click-through rate but a lower RPM usually means it's attracting low-intent clicks — a shorter, punchier CTA that gets tapped but doesn't convert on the advertiser side.

7. Check statistical significance before declaring a winner

A 6% lift on 200 conversions is noise. A 6% lift on 5,000 conversions is a real result. Run the numbers through a basic significance calculator (any free two-proportion z-test tool works) and don't ship a change below 95% confidence. If the test is inconclusive, extend the run rather than flipping a coin.

8. Ship the winner and archive the loser's data

Roll the winning variant out to 100% of traffic, but keep the losing variant's creative and performance numbers on file. It becomes your new baseline for the next test, and it tells you what didn't work so you don't retest the same idea in six months.

Set up your first ad test

See how Elo's SDK handles variant tracking and event logs.

Troubleshooting

Traffic split looks uneven after a week. Check that your hashing function is actually deterministic and evenly distributed — a poorly seeded hash can skew 70/30 instead of 50/50, which throws off every downstream calculation.

Variant B looks great for the first two days, then flattens. That's the novelty effect. Users react to anything new at first; the real signal shows up after day 3-4 once behavior normalizes. Don't call the test early.

Sample size is too small to reach significance. Either your traffic volume is low or your conversion rate is low. Extend the test duration rather than lowering your significance bar — a false positive costs more in wasted redeployment than a longer wait.

Results contradict what worked in a different chat app. Chat context matters. An ad format that wins in a shopping assistant can lose in a customer support bot because user intent and conversation length differ. Treat every app's test as its own dataset.

Revenue per session dropped even though click-through went up. The winning variant by clicks may be attracting clicks from lower-value ad categories. Break down RPM by ad category, not just overall, before deciding.

Tools and resources

What to do next

Once you've run one clean test, the next move is building a testing cadence — one variable, one test, every two to three weeks — instead of one-off experiments. Start with placement and format before you touch copy; those two variables tend to move RPM the most in conversational ad formats in 2026.

FAQ

How long should an A/B test for conversational ads run?

Run it for a minimum of seven days, ideally two weeks, to capture weekday and weekend chat behavior. Stopping early on a strong-looking result is the most common cause of false winners.

What's the best metric to judge an ad variant by?

RPM (revenue per thousand sessions), not click-through rate alone. Click-through can rise while RPM falls if the winning variant attracts low-intent clicks.

How much traffic do I need before I trust a test result?

Aim for at least 1,000 conversions per variant before calling a winner. Below that, differences are usually statistical noise, not a real signal.

Can I test ad copy and ad format at the same time?

No. Testing two variables at once means you can't attribute the result to either one. Isolate one variable per test cycle.

Do native ad cards perform better than banner-style prompts in chat apps?

Native cards generally see higher click-through in conversational interfaces because they match the message format, but this varies by app category and should be confirmed with your own test.

What causes a false positive in an ad A/B test?

Peeking at results early and stopping the test the moment one variant leads is the top cause. Sample size below your pre-set threshold is the second.

Should I split traffic 50/50 or something else?

50/50 is standard for most tests. Skew toward 90/10 only when testing a risky new ad format you want to limit exposure on while still gathering data.

How do I calculate RPM for each test variant?

Divide total ad revenue for that variant by total sessions in that variant, then multiply by 1000. Compare the two RPM figures directly, not click-through rate.

One last thing

The variant that wins on click-through is not always the variant that wins on revenue. Teams that only track CTR end up optimizing for clicks that don't convert on the advertiser side — and that shows up as a lower CPM fill from the ad network over time, even while the dashboard looks busier.

You might also like