Growth and measurement
How to measure an AI chatbot's real revenue: the holdout test
Most chatbot dashboards report revenue from shoppers who chatted. That number mixes what the bot caused with what those shoppers would have bought anyway. A randomized holdout separates the two.
Why does "revenue influenced by chat" overstate what a chatbot earns?
Because the shoppers who open a chat are not a random slice of your traffic. They are more engaged, often already on a product page with an item in mind, and some would have bought without the bot. Counting all their orders as chatbot revenue credits the bot for intent it did not create.
This is a self-selection problem. The act of chatting is a signal of buying intent, so any report that compares chatters with non-chatters, or sums the orders of everyone who chatted, mixes two things: the effect of the conversation and the pre-existing difference between the people who chose to have one. A dashboard line such as "chat-assisted revenue" is a form of attribution, not a measurement of cause.
Advertising research shows how large that gap can be. In a study of 15 large advertising experiments at Facebook, Gordon, Zettelmeyer, Chapsky and Bhargava (Marketing Science, 2019) found that common observational methods often failed to reproduce the effects measured by randomized experiments, even after controlling for extensive demographic and behavioral data. Chat is a different channel, but the selection mechanism is the same: the people exposed are not like the people who are not.
What is a holdout test for an AI chatbot?
A holdout test randomly assigns each visitor to one of two groups before they see anything: most get the chatbot, a smaller share never sees it. Because only chance decides the group, the two groups are alike on average, so the revenue difference between them is the chatbot's causal effect.
This is a controlled experiment, the same design behind A/B testing. Kohavi, Henne and Sommerfield describe it in their practical guide to controlled experiments on the web (KDD 2007) as the design for establishing a causal relationship between a change and user behavior: with random assignment, any systematic difference in the outcome is the result of the assignment.
In product teams, "holdout" usually means a control group kept away from a feature over a longer period to measure cumulative impact. Spotify's experimentation glossary describes holdouts as typically 1 to 5% of users. For a chatbot, the holdout is the group of visitors for whom the chat bubble simply does not load. The resulting difference is the incremental lift, and a holdout test is the most direct way to get it.
How do you set up a chatbot holdout test on a Shopify store?
Decide the metric and the minimum lift you care about, randomize at the visitor level, hide the chatbot entirely from the holdout, and compare revenue per visitor across all visitors in each group, not just those who chatted. Write the plan down before the test starts so the result cannot be reinterpreted afterwards.
The most important design choice is what you compare. Compare every visitor assigned to the holdout with every visitor assigned to the chatbot group, whether or not they opened the chat. This is called an intent-to-treat comparison. It looks diluted, because most visitors never chat, but it is the honest number: it is what the chatbot adds to the store as a whole.
- Pick one primary metric. Revenue per visitor captures both conversion rate and average order value. Track conversion rate as a secondary metric, because it needs far fewer visitors to read clearly.
- Choose the minimum lift worth detecting. If a 3% lift would not change your decision, do not size the test for it.
- Randomize by visitor, not by page view. A shopper should stay in the same group on every visit, otherwise she sees the bot on Monday and not on Tuesday and both groups are contaminated.
- Make the holdout clean. The chat bubble, proactive prompts and any chat-driven emails must not reach holdout visitors.
- Fix the sample size and duration in advance, in whole weeks (see below).
- Run an A/A check first if you can. Split traffic with both groups seeing the same experience and confirm the split and the revenue numbers come out even.
- Analyze once, at the planned end, and report the lift with its confidence interval.
How many visitors do you need for a holdout test?
It depends on your baseline conversion rate, the smallest lift you want to detect and how you split traffic. Small lifts on low conversion rates need hundreds of thousands of visitors. Halving the lift you want to detect roughly quadruples the visitors you need, and a small holdout share stretches the test further.
The arithmetic is worth seeing once, because it explains why many stores cannot measure a small chatbot effect in a month. The worked example below uses invented numbers for a hypothetical store and the standard two-proportion approximation with a 5% significance level and 80% power, where the combined z-value factor is (1.96 + 0.84)² ≈ 7.84.
| Target relative lift | Split (chatbot / holdout) | Approx. total visitors | At an invented 60,000 visitors/month |
|---|---|---|---|
| 10% | 50 / 50 | 128,000 | About 9 weeks |
| 10% | 90 / 10 | 356,000 | About 6 months |
| 20% | 50 / 50 | 33,500 | About 2.5 weeks (run 3 whole weeks) |
| 20% | 90 / 10 | 93,000 | About 7 weeks |
Worked example (invented numbers)
For example, a hypothetical home-goods store converts 2.5% of visitors. It wants to detect a 10% relative lift, from 2.5% to 2.75%, so the absolute difference Δ is 0.0025 and Δ² is 0.00000625. The average rate is about 2.625%, so the per-visitor variance is 0.02625 × 0.97375 ≈ 0.0256.
With a 50/50 split: visitors per group ≈ 7.84 × 0.0256 × 2 ÷ 0.00000625 ≈ 64,000, so about 128,000 visitors in total.
With a 90/10 split (10% holdout): the holdout needs about 7.84 × 0.0256 × (1 + 1/9) ÷ 0.00000625 ≈ 35,700 visitors, which means about 356,000 visitors in total. The smaller the holdout, the more total traffic the same answer costs: here roughly 2.8 times the 50/50 test.
If the store only cares about a 20% lift (2.5% to 3.0%), Δ doubles and Δ² quadruples. With the average rate now 2.75% (variance ≈ 0.0267), the 90/10 test needs about 9,300 holdout visitors, or about 93,000 in total. At an invented 60,000 visitors a month, that is about seven weeks instead of six months.
Why revenue needs more visitors than conversion
Revenue per visitor is noisier than conversion because most visitors spend nothing and a few spend a lot. Kohavi and colleagues' guide works through an e-commerce example where detecting a 5% change in revenue needs over 1.6 million users, while a 5% change in conversion needs fewer than 500,000. Use a calculator such as Evan Miller's sample size calculator for conversion, and treat the revenue read as needing more traffic still.
How long should a chatbot holdout test run?
Run it until the planned sample size is reached, and always in whole weeks, with a minimum of one to two weeks. Weekday and weekend shoppers behave differently, and stopping mid-week tilts the result. Do not stop early because the lift looks significant on day five.
Kohavi and colleagues recommend running experiments for at least a week or two and then in multiples of a week, so that day-of-week effects even out. They also show the cost of a lopsided split: a test needing five days at 50/50 takes about 25 days at 95/5, and they advise against very small splits that would run for months, because effects such as cookie churn start to contaminate the data (KDD 2007 guide).
Stopping early is a common way to fool yourself. Evan Miller's How Not To Run an A/B Test shows that repeatedly checking for significance and stopping when it appears inflates the false-positive rate far above the stated level. Fix the sample size in advance, or use a sequential method designed for early stopping.
What can go wrong with a holdout test?
The common failures are novelty effects that fade, seasonal events that swamp the signal, holdout visitors who still reach the chatbot, and analyzing only the shoppers who chatted. Each one produces a confident number that is wrong, so check for all of them before you trust the result.
| Pitfall | What it looks like | What to do |
|---|---|---|
| Novelty effect | Shoppers click a new chat bubble out of curiosity; lift is high in week one and fades | Run several weeks; compare early and late weeks; look at new visitors separately |
| Seasonality | A sale, holiday or launch lands mid-test | Avoid peak events, or make sure the test spans them evenly in both groups and say so in the report |
| Contamination | Holdout visitors see the bot on another device, or receive chat-triggered emails | Randomize by a stable visitor id; suppress every chat touchpoint for the holdout; report the leak rate |
| Analyzing chatters only | Comparing shoppers who chatted with the whole holdout | Compare all assigned visitors in both groups (intent-to-treat) |
| Peeking | Stopping the day the dashboard turns green | Fix sample size and end date in advance |
| Changing the bot mid-test | New prompts or offers in week two | Freeze the setup, or restart the test |
What should a chatbot ROI report include?
Report the lift in revenue per visitor with a confidence interval, the conversion and order-value changes behind it, the dates, the split, the number of visitors in each group and any known contamination. Then convert the lift into incremental revenue and subtract the chatbot's cost to get ROI.
A single lift percentage with no interval invites overconfidence. An interval such as "+1% to +9%" tells the owner both that the effect is probably positive and how uncertain its size is. Report the result even when the lift is flat or negative; a test that can only return good news is not a test.
- Primary result: lift in revenue per visitor, with a 95% confidence interval.
- Drivers: change in conversion rate and in average order value, each with its interval.
- Design: start and end dates, split, visitors and orders per group, randomization unit.
- Caveats: promotions or holidays during the test, contamination rate, anything that changed.
- Money: incremental revenue = lift in revenue per visitor × visitors exposed; ROI = (incremental gross profit − chatbot cost) ÷ chatbot cost. Use gross profit, not revenue, if you want true return.
How does Tycoon approach revenue measurement?
Tycoon is measured with a holdout: a small, randomly chosen share of visitors does not see Tycoon, and the dashboard compares their revenue with everyone else's. The Growth plan includes one 30-day lift test, and the Tycoon plan adds continuous holdout measurement.
We think a sales associate should be judged on incremental revenue rather than on chat-assisted revenue, for the reasons above. On Growth and the Tycoon plan, the holdout is built into the product rather than left to the merchant to wire up, and the plan details are on the pricing page. For how the agent decides what to recommend and when to make an offer, see how it works and our guide to upsell and cross-sell with AI. If you are comparing vendors, ask each one how they measure lift; our guide to choosing an AI shopping assistant has a list of questions.
Frequently asked questions
Is chat-assisted revenue useless?
No. It is useful for spotting which conversations and products lead to orders. It just is not a measure of what the chatbot caused, because shoppers who chat may already have been more likely to buy. Use a holdout for the causal number.
How big should the holdout group be?
Large enough to finish in a reasonable time. Holdouts of a few percent cost little revenue but need a lot of traffic; 10 to 20% reads faster. Run the sample-size arithmetic for your own traffic before choosing.
Can a small store run a holdout test?
Yes, but usually only for larger effects. With modest traffic, size the test to detect a lift you would act on, use conversion rate as the main read, and accept a longer run rather than stopping early.
Should the holdout see a basic FAQ bot instead?
That answers a different question: whether the AI beats your old bot. If you want the chatbot's total value, the holdout should see no chat at all. Decide which question you are asking before you start.
What if the result is not statistically significant?
Report the confidence interval anyway. A wide interval around zero means the test could not detect an effect of the size you planned for, not that there is no effect. You can extend to a larger planned sample, but decide that rule in advance.
Sources
- Kohavi, Henne, Sommerfield: Practical Guide to Controlled Experiments on the Web (KDD 2007) · checked October 20, 2026
- Gordon, Zettelmeyer, Chapsky, Bhargava: A Comparison of Approaches to Advertising Measurement (Marketing Science, 2019), Kellogg School of Management · checked October 20, 2026
- Evan Miller: How Not To Run an A/B Test · checked October 20, 2026
- Evan Miller: Sample Size Calculator · checked October 20, 2026
- Spotify Confidence: What is a holdout group? · checked October 20, 2026
See Tycoon on your own store
Leave your store address and get a private demo in about a minute: your real products and prices, Tycoon asking and recommending like it would for your shoppers. Valid for 7 days.
Keep reading
- ArticleAI sales agent for Shopify: the complete guideA practical guide for Shopify owners and ecommerce managers: what an AI sales associate should do on your storefront, how to check its facts, how to measure it honestly and how to set it up.
- ArticleHow to choose an AI shopping assistant for Shopify: 20-point checklistTwenty questions to ask before you install an AI shopping assistant on your Shopify store, grouped by what can actually go wrong: wrong answers, broken trust, a slower storefront, customer data and a bill you cannot predict.
- ArticleShopify upsell and cross-sell with AI: one offer, done rightMuch advice on how to increase average order value on Shopify is about adding more offers. This guide is about making one good offer at the right moment, and knowing when to make none at all.