Skip to content

How to run a geo holdout test, step by step

Pull a year of sales by region from Shopify and pair similar regions. Let a coin choose which side goes dark, and switch the ads off there. Run a full purchase cycle plus a cooldown, then compare against the pre-test ratio.

By , Founder & CEOUpdated 8 min read

Run the numbers for your store: the free holdout test planner.

Usually in seven moves. Pull a year of sales by region, pair look-alike regions, and let a coin pick which side of each pair goes dark. Switch the ads off there and run for at least one purchase cycle. Keep counting after the ads return, then measure the gap against the pre-test weeks.

Step by step

This is the manual go-dark version: ads off in some regions, on in the rest. It needs no special access, just location settings, one Shopify report and a calculator.

  1. Pick one channel, one decision and one scoreboard. Decide which test you are running: a cut, a new channel or more budget. Google's geo guide calls these go-dark, holdback and heavy-up. Score it on store sales, since Google wants cross-platform tests measured against an independent, unattributed first-party source. Path: Shopify admin > Analytics > Reports > Category filter > Sales.
  2. Pull a year of sales by region. Open Total sales over time and choose a unit of time in the Group by menu. Then add Billing city with ⊕ in the Dimensions menu, and keep the result with Save as. Meta's GeoLift guide strongly recommends daily data over weekly, and 4 to 5 times the test length in stable history. Path: Shopify admin > Analytics > Reports > Total sales over time > Dimensions > ⊕.
  3. Pair look-alike regions, then let chance decide. Pair regions with similar sales and trends, then flip a coin for each pair. The coin picks which side goes dark and which stays on as control, as in Google's randomised paired designs. Leave out any region with its own launch during the test, as Google's guide advises. Path: Total sales over time > Filters > ⊕ > Billing city > is one of, once per group.
  4. Check the test can see an effect. If Google runs the study, its feasibility status does this job. Aim for High; Google does not recommend proceeding on Low. Without that access, GeoLift's power analysis estimates the regions, test length and budget a test needs. Path: Google Ads > Goals > Lift measurement > plus button > Conversion Lift under Based on Geo.
  5. Switch the ads off in the holdout regions. Remove country-level targeting, choose Enter another location and target the control regions only. Set Location options to Presence, which Google says prevents location leakage. On a capped budget, cut the daily budget to the control regions' past share of spend, and keep the campaign out of shared budgets. Path: Google Ads > Campaigns menu > Campaigns > Settings icon > Locations.
  6. Leave it alone, then keep counting. Log every change with a date, and make as few as you can; Google's guide says ideally none. When the test ends, return the holdout regions to business as usual and keep collecting sales through a cooldown. Path, if Google runs the study: Google Ads > Goals > Measurements > Lift measurement > study name > Details.
  7. Do the arithmetic. Use the pre-test ratio between the groups to estimate what the holdout regions would have sold with ads. The shortfall is the revenue the ads added. Divide it by the spend you held back to get incremental ROAS, which Google writes as iROAS. Path: your saved Shopify report, filtered by Billing city once per group.

On Meta, the same holdout list goes into the ad sets' excluded locations. Meta's targeting has a separate field for excluding areas, but it excludes people by home location, not by recent location. Expect a little leakage from travellers.

A worked example

For illustration, with round invented numbers. Say you sell in 20 regions and want to know whether Google Search ads earn their keep. If you pair them by past sales and the coin sends one of each pair dark, 10 regions go dark and 10 keep ads.

If the test runs for 4 weeks, Google's 3-times rule asks for at least 12 weeks of clean history. If you follow GeoLift's 4 to 5 times instead, you need 16 to 20 weeks. A year of Shopify data clears both. If your lag looks like one store's, where four-to-nine-touch journeys took 16.9 days to buy (Journeys sheet), a three-week cooldown covers it.

For illustrationHoldout regions (ads off)Control regions (ads on)
Weekly sales before the test€22,500€25,000
Ratio of holdout to control0.90
Sales over 4 test weeks plus 3 cooldown weeks€150,000€180,000
Expected holdout sales with ads (0.90 × €180,000)€162,000
Sales the ads added (€162,000 less €150,000)€12,000

Say the campaign spent €2,000 a week in the holdout regions before the test. If the four dark weeks hold back €8,000, the incremental ROAS is €12,000 / €8,000 = 1.5x. At a 40% margin, break-even ROAS is 1 / 0.40 = 2.5x, the same arithmetic as the Break-even sheet of one store's export. For illustration, each euro of that spend brought back €1.50 of sales and €0.60 of margin. If the numbers hold, the spend loses 40 cents on every euro: cut it back or rework it, then test again.

Google's built-in study does this sum for you and shows a range around the estimate. Read the low end of that range before you celebrate, and the high end before you cut.

What to check when the report looks wrong

  • Spend still shows in dark regions. Check that Location options is set to Presence and that the campaign targets the control regions only. On Meta, travellers can still see ads, because exclusions work on home location.
  • Control regions got more spend than before. The platform moved the saved budget there. Cut the daily budget to the control regions' share, as Google's guide describes, and note the days it happened.
  • Both groups jumped at once. Something national moved everyone: a sale, a newsletter, a TV slot. That is fine if it hit both sides equally. Meta's guide asks you to keep local and national media constant across test and control.
  • GA4's regions disagree with Shopify. GA4 derives location from IP addresses and may apply data thresholds when user counts are low. Keep Shopify as the scoreboard. Use GA4 only to spot visits from dark regions: Reports > User Attributes > Demographic details, with the Region dimension.
  • Google's study says Not enough data. That is normal early on. If it persists, run at the budget Google recommends for High feasibility, stop over-targeting audiences, and remove location exclusions.

What to do this week

  1. Save the scoreboard report in Shopify. Open Total sales over time, add Billing city, and use Save as with a name like Geo test scoreboard. Pass: a year of history, with every region present in most weeks. Fail: long gaps or near-empty regions, so merge them into bigger ones first.
  2. Audit the campaigns you would switch off. In Google Ads, open each campaign's Settings and check Locations and the budget type. Pass: an individual budget and country targeting you can swap for region lists. Fail: a shared budget, which Google's guide rules out for go-dark tests, so split it out well before the test.
  3. Clear the calendar. List promotions, launches and email pushes for the test window plus the cooldown. Pass: none, or only ones that hit every region equally. Fail: a regional launch or a sales peak lands inside the window, so move the test.

Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework

Sources, 1 October 2026: Implement campaigns for geo experiments (Google Ads Help). Set up Conversion Lift based on geography (Google Ads Help). Understand your Conversion Lift based on geography measurement data (Google Ads Help). Trimmed Match Design for Randomized Paired Geo Experiments (Google Research). GeoLift Best Practices (Meta). GeoLift Walkthrough (Meta). Basic Targeting (Marketing API reference) (Meta for Developers). Sales reports (Shopify Help Center). Filtering and editing your reports (Shopify Help Center). [GA4] Demographic details report (Google Analytics Help).

Frequently asked questions

  • Do I need a Google account rep to run a geo test?
    Only for Google's built-in Conversion Lift based on geography, which Google says is not available for all accounts. A manual go-dark test needs nothing special: location settings in your campaigns, a regional sales report in Shopify and a spreadsheet.
  • How do I choose which regions go dark?
    Let chance choose, after you pair them. Match regions on past sales and trend, drop any with their own launch, then flip a coin within each pair. Picking by hand puts your own guess into the result, and the test then measures your guess.
  • What should I do if the test shows no lift?
    Check the size of the test before you conclude anything. No significant lift means the gap was too small to separate from noise, which is not the same as zero. Rerun with more regions, more budget or a longer window, or look for lift in a narrower slice of conversions.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.