Why your ad platform can't tell you whether your ads work
Ad platforms count a sale as theirs whenever someone saw or clicked an ad before buying, even if that person was going to buy anyway. A loyal customer who searches your brand name, clicks your search ad, and checks out gets counted as an ad conversion. So does someone who scrolled past your Instagram ad last week and then came back after a friend recommended you. Google and Meta can both claim the same order, and neither one knows what would have happened without the ad.
That's why the conversion numbers in your ad accounts usually look better than the business feels. If you spend real money on ads, the question that matters is narrower: how many sales would you lose if you stopped? The answer is called incrementality, and the only reliable way to measure it is to stop the ads for some people and not for others, then compare.
A geo holdout test does this with places instead of people. You keep the ads running in one set of regions and pause them in a similar set, then compare sales in the two groups over the same weeks. Regions work well because both Google Ads and Meta let you target or exclude states, metro areas, and postal codes, and your sales records already say where each order came from.
The test itself is simple. Running it well takes careful work before, during, and after. You need regions that behave alike, rules agreed before the spend, a check that the paused regions really stopped seeing ads, and an honest reading of the numbers at the end. An AI agent suits this job because it can read your sales history, your ad accounts, and your store in one pass and keep the plan in front of everyone until the result is in.
Kite is an AI marketer. It researches your business, builds a growth strategy, and ships the work that brings you new customers. Here's how it measures whether your ads drive sales.
How Kite runs a geo holdout test
Kite starts with the channel you want to test and the sales records that will judge it. It reads your order history in Shopify or your customers and payments in Stripe, then counts sales by region week by week. It also reads your Google Ads or Meta Ads account to see where the money goes now and how each campaign is targeted.
From there, Kite designs the test. It splits your regions into a test group and a control group that have tracked each other closely in the past, and it proposes how long to run and what result would change your budget. You agree on that plan before anything changes.
Your team pauses the ads in the control regions using the exact exclusions Kite lists for each campaign. Kite then reads the ad accounts to confirm the change took effect, checks in every week while the test runs, and reports the result when the agreed period ends. That report covers how many extra sales the ads caused, what each one cost, and what Kite recommends doing with the budget.
- Choose a test group and a control group that behave alike
- Agree on the rules before you spend
- Pause ads in the control regions and confirm the change took effect
- Watch the test without calling it early
- Read the result from your sales, not from the ad platform
- Turn the result into a budget decision
Choose a test group and a control group that behave alike
The test group is the set of regions where your ads keep running, and the control group is the set where they pause. The comparison only means something if the two groups would have sold about the same way without any change to your ads, so the choice of regions decides whether the test is worth running.
Kite builds the groups from your own sales history. It reads 6 to 12 months of orders from Shopify, using each order's shipping address, or Stripe payments, using each customer's billing address, and totals sales by state, metro area, or postal code for each week. It then pairs regions whose sales rose and fell together over that period and assigns one of each pair to each group. Two metro areas with similar sizes and seasonal patterns make a better pair than two neighboring states that happen to be the same size.
Kite also keeps unusual regions out of the test. It leaves out the city where you have a store or a sales team, a region where you're running a local promotion, and anywhere a big share of sales comes from a single wholesale account. Those regions keep running as normal and simply don't count toward the result.
Before it recommends the test, Kite checks whether you sell enough for it to work. If a region's weekly sales normally swing by 30 percent on their own, a 10 percent lift from your ads will be hard to see. When the history shows that, Kite proposes larger groups, a longer test, or a different measure of sales, such as new customers instead of total orders.
Agree on the rules before you spend
Kite writes the decision rules down before the test starts, so the result can't be reinterpreted once the numbers come in. It's the same discipline a good analyst would insist on, because it's easy to find a reason to believe the answer you were hoping for.
The plan names each of these in plain terms:
- the channel and campaigns under test, such as your Meta prospecting campaigns or your Google search campaigns that don't target your brand name
- the regions in each group and the regions left out
- the measure of sales, such as orders, revenue, or new paying customers
- how long the test runs, which is usually long enough to cover several full buying cycles
- what result would lead you to cut the spend, keep it, or increase it
Kite also lists what has to stay the same in both groups while the test runs. A sitewide sale, an email to your whole list, or a price change is fine, because it reaches both groups equally. A promotion that runs only in some regions would spoil the comparison.
The plan lives with the initiative in Kite, where your team can see it, and the final report is judged against it.
Pause ads in the control regions and confirm the change took effect
A holdout only works if the control regions truly stop seeing the ads. Kite gives your team the exact change to make in each campaign, then reads the ad accounts afterward to confirm it took effect.
For Meta, Kite names the location exclusions to add to each ad set using Meta's own names for those places, which it looks up in Meta's targeting options. For Google Ads, it lists the locations to exclude in each campaign. Your team makes those changes in Meta Ads Manager and Google Ads. Kite then reads each Meta ad set's targeting and each Google campaign's location settings to check that every campaign under test excludes the control regions.
Kite also checks the spend itself. In Meta Ads, it splits results by region, so a campaign that was missed shows up as spend in a region that should have none. Catching that in the first few days saves a test that would otherwise be quietly ruined.
Watch the test without calling it early
While the test runs, Kite checks in every week, and it can do that on a schedule that delivers to your Slack channel or your inbox. Each check confirms that the control regions still show no ad spend, that the test regions are spending at the planned level, and that nothing has happened in only one group, such as a stockout in one warehouse or a local news story.
Kite doesn't declare a winner partway through. Weekly sales are noisy, and a test that looks decisive in week two often evens out by week five. If something goes wrong that the plan didn't anticipate, Kite tells you what happened and proposes whether to extend the test, drop the affected regions, or start again.
Read the result from your sales, not from the ad platform
The result of a geo holdout test is the gap between the sales your test regions actually made and the sales they would have made without ads. The control regions supply that second number.
Kite works it out from your Shopify orders or Stripe payments. Before the test, it measured how the two groups' sales normally compare. During the test, it applies that same relationship to the control group's actual sales to estimate what the test group would have sold on its own. The difference is your incremental sales, and dividing your ad spend by that difference gives your true cost for each extra sale.
Here's how that plays out. Say your test regions usually sell 1.5 times as many orders as your control regions. Over six weeks, the control regions sell 1,000 orders, so the test regions would have sold about 1,500 without ads. They actually sell 1,740. Your ads caused about 240 extra orders. You spent $20,000 on Meta in those regions, so each extra order cost about $83. Over the same weeks, Meta Ads Manager reported 900 purchases, which would put the cost near $22 an order. The ads worked, but Meta claimed almost four times as many sales as they caused.
Kite reports the lift with a range rather than a single number, along with the dates, the regions, and anything that might have affected the result. If the range is wide enough to include zero, Kite says plainly that the test didn't find an effect it can rely on, and it explains what a longer or larger test would need.
Turn the result into a budget decision
A measured lift is only useful when it changes where your money goes. Kite compares your true cost for each extra sale with what a sale is worth to you, then recommends what to do with the budget based on the rules you agreed at the start.
If the ads earn back more than they cost, Kite can recommend increasing the spend and proposing a follow-up test at the higher level, because the next dollar rarely works as well as the first. If they don't, Kite can recommend cutting the campaigns that showed no lift and moving that money to the channel with the next-best case. Kite also saves the ratio between what the platform reported and what the test measured, so later reports can adjust Meta's or Google's numbers instead of taking them at face value.
The result goes into your team's knowledge base with the plan and the data behind it. The next time someone asks whether paid social is worth it, Kite answers from your own test rather than from the ad platform's dashboard.
What you get
A test plan agreed before any spend
The channel, the test and control regions, the measure of sales, the length of the test, and the rules for what result changes the budget.
Exact exclusions for each campaign
The locations your team excludes in each Meta ad set and Google Ads campaign, named the way each platform names them.
A setup check
Confirmation from the ad accounts that every campaign under test excludes the control regions, with any campaign still spending there flagged by name.
Weekly check-ins during the test
Spend by group, sales by group, and anything that happened in only one group.
A lift report
Your incremental sales, your true cost for each extra sale with its range, and how that compares with what the ad platform reported. When the report needs charts and tables, Kite can publish it as a findings page.
A budget recommendation
What to cut, keep, or increase, judged against the rules you set at the start, and saved to your knowledge base for future planning.
How to get started
Tell Kite which ads you want to test and what you're worried about. You might say, "We spend $15,000 a month on Meta and I think it's taking credit for sales we'd get anyway. Can we test it?" or "Find out whether our Google search ads bring in customers we wouldn't otherwise get." You can work with Kite in the Kite web app or in Slack.
Kite needs two connections first. Connect Shopify or Stripe so Kite can count your sales by region, and connect the Google Ads or Meta Ads account you want to test so it can read your campaigns, targeting, and spend. Kite then reads your sales history and tells you whether a geo holdout test will give a clear answer for your business before proposing the plan.
You approve the plan, and your team applies the location exclusions in the ad platform. From there, Kite confirms the setup, runs the weekly check-ins, and brings you the result and its recommendation when the test ends.
Integrations used to measure whether your ads drive sales
A geo holdout test needs two kinds of records. Your sales system tells Kite how much each region bought, and your ad accounts tell Kite where the ads ran and what they cost.
Count your sales by region
Kite searches your orders by date and reads each one's totals and shipping address, so it can count orders and revenue in each region before, during, and after the test.

Kite reads your customers, payments, and subscriptions, so it can count new paying customers and revenue by region when your sales happen through Stripe checkouts or subscriptions.
Read where your ads run and what they cost
Kite reads each ad set's targeting to confirm the control regions are excluded, looks up Meta's names for the places to exclude, and splits spend and results by region to catch any campaign still running there.
Kite reads each campaign's location settings and its spend and conversions over the test period, so it can confirm the setup and compare what Google reported with what the test measured.
Common questions
What is the difference between a test group and a control group?
The test group gets the thing you're testing, and the control group doesn't. In a geo holdout test for ads, the test group is the set of regions where your ads keep running, and the control group is the set of similar regions where you pause them. Because both groups would normally sell in step with each other, any extra sales in the test group can be credited to the ads.
Is a ROAS of 4 good?
It depends on your margins and on whether the 4 is real. A return on ad spend of 4 means the platform credits your ads with $4 in revenue for every $1 spent, which is profitable for a business with healthy margins and thin for one with low margins. But that figure comes from the platform's own conversion count, which includes sales that would have happened anyway. A holdout test often finds that the return your ads actually cause is a fraction of the reported one, so the better question is what your ROAS looks like once only the incremental sales are counted.
Is my business big enough to run a geo holdout test?
You need enough sales in each group that normal week-to-week swings don't hide the effect of your ads. Businesses that sell across many regions, with at least a few dozen orders a week in each group, are usually in a good position. Kite checks this from your own sales history before recommending the test. If your sales are too thin or too concentrated in one place, it tells you so and suggests an alternative, such as testing over a longer period, measuring a more frequent action like new trials, or asking Meta or Google whether your account qualifies for the conversion lift studies they run themselves.
How long should an incrementality test run?
Long enough to cover several full buying cycles and to let the ads' effect show up in sales. For a store where most people buy within a few days of first hearing about you, four to six weeks is common. For a product with a longer decision, the test needs to run longer, or it should measure an earlier step such as trials or demo requests. Kite proposes the length from how quickly your past customers went from first visit to purchase.
Won't pausing ads in some regions cost me sales?
It may, and that cost is the price of knowing. If the ads cause sales, the control regions will sell a little less during the test. If they don't, you'll have saved that spend. Kite proposes a control group large enough to give a clear answer and no larger, so the cost stays limited, and the answer tells you how to spend every month after the test.
Can I test Google Ads and Meta Ads at the same time?
It's clearer to test one channel at a time, because pausing both in the same regions tells you what your ads cause together but not which channel earned it. If you need answers for both quickly, Kite can use separate sets of regions for each channel, though that needs more regions and more sales to give a clear result. Kite recommends which approach fits your sales volume.