01
Overview
Meridian GeoX is designed to take a marketing incrementality test from experiment design through post-test analysis. The library is open source, but a valid test still requires enough historical data, geographic volume and statistical power.
02
1. Install the library
Google publishes Meridian GeoX on PyPI and GitHub. For GeoX alone, use Python 3.10 or later and install the latest package with pip install --upgrade meridian-geox. If you are combining it with Meridian MMM, Google documents Python 3.11 or later and a combined Meridian installation path.
GeoX uses JAX. CPU-based JAX installs automatically; GPU-backed JAX is optional for heavier simulations.
03
2. Decide what you are testing
Before touching code, define the marketing intervention and the causal question. GeoX supports several designs:
- Holdback: withhold incremental media from selected geographies.
- Go-dark: reduce or stop an existing campaign in treatment geographies.
- Heavy-up: increase spend or media pressure in treatment geographies.
- Multi-cell: compare multiple treatments against a common control.
Choose the design based on the business decision you need to make, not whichever option sounds easiest to implement.
04
3. Prepare pretest data
GeoX expects daily geo-level time-series data. Core fields include date, location and conversions; spend can be included for media tests. The framework validates schema and data quality before generating a design.
Google's documentation requires enough pretest history relative to the planned experiment duration. Sparse data, missing days, duplicate rows, zero-response geographies and very high geo cardinality can weaken or invalidate a design.
05
4. Define constraints
Real campaigns cannot always randomize every region freely. GeoX lets you exclude locations and define operational or statistical constraints so the design reflects what the business can actually execute.
This is important because a mathematically attractive assignment is useless if the media team cannot implement it without disrupting critical markets.
06
5. Generate candidate designs
The design stage assigns geographies to treatment and control groups and estimates how sensitive the test will be. One of the most important outputs is minimum detectable effect, or MDE: the smallest lift the experiment is powered to detect.
A large MDE means the test may only detect very large effects. If your realistic expected lift is smaller than the design's MDE, the test is underpowered for the question you care about.
07
6. Validate the design
Do not treat the first valid split as production-ready. Inspect fit, historical stability, budget requirements and placebo/A-A behavior where appropriate. Google specifically warns that seasonality and unstable treatment/control relationships can undermine a geo test.
For highly seasonal businesses, use more historical data and validate against comparable peak periods rather than relying only on the minimum history requirement.
08
7. Implement the campaign change
Once treatment and control assignments are finalized, apply the planned budget or campaign intervention in the ad platform. Keep the assignment stable for the full test window and avoid unrelated changes that affect only one group.
GeoX is publisher-agnostic, so implementation may happen in Google Ads, another ad platform or across channels. The library does not automate every media-buying step for you.
09
8. Collect analysis data
After the test, prepare geo-level response and spend data covering both the pretest and test periods. The analysis dataset needs to match the original design's treatment/control geography set.
GeoX can include a cooldown period when the campaign effect is expected to persist after the intervention ends.
10
9. Run the analysis
Load the saved design, define AnalysisConfig with the test dates and run the documented analysis workflow. GeoX uses counterfactual modeling, primarily time-based regression, to estimate what likely would have happened without the intervention.
The framework then applies design-aware inference to estimate statistical significance while respecting the optimized geo-assignment process.
11
10. Interpret the outputs
Useful outputs include incremental conversions, percentage lift, confidence intervals, p-values and incremental conversions per dollar. If the response metric is revenue, the economic output can be interpreted in an incremental-ROAS style.
A non-significant result is not automatically a failed campaign. It can also mean the test lacked power, the intervention was too small, the geo relationship was unstable or the true effect is close to zero.
12
Common mistakes
Do not run a geo test with an MDE much larger than the effect you realistically expect. Do not mix weekly and daily input granularity. Do not change geo assignments after the experiment begins. Do not ignore seasonality or major local events. And do not treat observational lift as causal if the actual intervention was not controlled.
13
When to connect GeoX to Meridian MMM
If you also use Meridian, a well-designed GeoX result can be converted into a prior that calibrates channel ROI estimates. That is a separate modeling step, not required to use GeoX itself.
14
Practical takeaway
The code is the easy part. The hardest work in GeoX is choosing a test that the business can execute, has enough statistical power, and stays clean long enough to produce interpretable causal evidence.
Sources
Primary and supporting sources
Facts were rechecked against the linked sources immediately before publication. Pricing, product availability and rollout status can change.
- blog.google — data strength updates
- developers.google.com — geox
- developers.google.com — intro to geox
- github.com — meridian geox
- developers.google.com — mmm
- developers.google.com — notebook
- developers.google.com — meridian
- developers.google.com — intro to analysis
- developers.google.com — channel recommendation
- developers.google.com — intro to design
- developers.google.com — prepare your analysis data
- developers.google.com — data validation and quality checks
- developers.google.com — troubleshooting