Analytics

Google Meridian MMM: the operator's implementation guide

The hands-on build guide, not the announcement. What the model actually is, the exact data it needs, the step-by-step workflow, how to read the diagnostics, how to calibrate with experiments, and the cases where Meridian is the wrong tool.

Google Meridian implementation guide: blueprint-style technical drawing on deep navy of a map divided into geo regions, an S-shaped response curve with a solid orange point at its steepest section, and a small bell curve distribution.

Bottom line

Google Meridian is a free, open-source Bayesian marketing mix modelling framework that estimates channel ROI and optimises budget from aggregated geo-level data, no user tracking required.

  • It launched openly on 29 January 2025 and is on version 1.7.1 as of July 2026, under the Apache-2.0 license.
  • It is a geo-level hierarchical Bayesian model using geometric adstock, Hill saturation, and No-U-Turn Sampler MCMC on TensorFlow Probability.
  • The data floor is roughly two years of weekly data for geo models and three years for national models, at weekly granularity.
  • Its edge is folding experiment results in as ROI priors, moving observational MMM toward defensible causal estimates.
  • It is the wrong tool for real-time optimisation, thin-data setups, and teams with no Bayesian capacity, despite the no-code Scenario Planner.

What Google Meridian is, and what it is not

Google Meridian is Google's free, open-source Bayesian marketing mix modeling (MMM) framework. In Google's own words, it "enables advertisers to set up and run their own in-house models." You install it, feed it aggregated spend and outcome data, and it estimates how much each channel drove your key performance indicator (KPI), computes return on investment (ROI) per channel, and optimises future budget allocation. No user-level tracking is involved.

This is the implementation guide, not the announcement. Our earlier piece on why MMM came back and what Meridian changes covers the strategic case. This post assumes you have already decided MMM is worth doing and now need to scope an actual Google Meridian build. A reader with a data team should be able to plan one from this page.

First, the facts that age fastest, stated so the post ages well. Meridian launched openly to everyone on 29 January 2025, after private testing "with hundreds of brands," alongside a program of 20+ certified measurement partners. As of July 2026 the current version is 1.7.1 on PyPI, released 22 July 2026 (the prior release, 1.7.0, shipped on 18 June 2026). It never went to a 2.x line. It is licensed Apache-2.0, which permits commercial use.

2 yrs weekly data floor for a geo-level model (3 years for national)
1.83 mean of the default paid-media ROI prior, LogNormal(0.2, 0.9)
50-100 top US designated market areas Google suggests modelling
1.7.1 current version as of July 2026, Apache-2.0 licensed

What Meridian is not: it is not an attribution tool, not a real-time optimiser, and not a replacement for Google Analytics 4 (GA4). It answers three questions Google frames explicitly. What was each channel's historical contribution and ROI? What does the response curve for each channel look like? How should you allocate future budget to maximise the business outcome? Those are planning questions, measured over quarters, not the tactical questions attribution answers this week.

One more thing it is not: plug-and-play. There is a system-requirements bar. Meridian needs Python 3.11 to 3.13 and at least one graphics processing unit (GPU) is strongly recommended (Google reports testing on a T4 with 16 GB of RAM). Install is pip install --upgrade google-meridian for the CPU build, or google-meridian[and-cuda] for GPU. The library is on the Python Package Index and the source lives on GitHub at github.com/google/meridian.

Housekeeping LightweightMMM, Google's earlier open-source MMM library, was archived read-only on 19 January 2026. Its repository states it is no longer supported and recommends switching to Meridian. If you have a LightweightMMM model in production, there is no direct port. Plan a rebuild on Meridian rather than waiting for support that is not coming.

How the model works in plain English

Meridian looks at your aggregate history, weekly KPI and weekly media by region, and estimates how much each channel contributed. It does this while respecting two realities that naive regressions ignore. Ads have a delayed effect, since people rarely convert the instant they see one. And ads have diminishing returns, so the hundredth impression is worth less than the first.

Because the model is Bayesian, every answer arrives as a probability distribution, a range with quantified uncertainty, rather than a single point number. That is a feature, not a hedge. "Search most likely drove between 28 and 41 percent of revenue" is more honest, and more auditable, than "search drove 34 percent." And because it is Bayesian, you can inject prior business knowledge directly, such as the result of a lift test, and the model will weigh it against the data.

Under the surface, Meridian is a geo-level hierarchical model. Its own documentation describes it as "a geo-level hierarchical model with non-linear parametric transformations on the media variables." It extends the academic work of Jin et al. 2017 and Sun et al. 2017, adding reach and frequency handling from Zhang et al. 2023. The pipeline runs in a fixed order.

Stage 1 Weekly geo data: KPI, spend, exposure, controls, population
Stage 2 Geometric adstock: carryover decay of past media
Stage 3 Hill saturation: diminishing returns curve
Stage 4 NUTS MCMC on TensorFlow Probability: sample the posterior
Stage 5 Posterior draws, then the BudgetOptimizer

The hierarchy is what makes the geo design pay off. Each region gets its own coefficients, but those coefficients are partially pooled toward a national mean, so regions borrow statistical strength from each other. A single-geo run is just the national special case, with far fewer effective observations. That is why national models need more history than geo models: they have thrown away the cross-regional variation that geo models exploit.

The media transforms are specific. Adstock uses geometric decay with a parameter alpha in the range zero to one, default prior Uniform(0,1); a binomial decay option also exists. Saturation uses a Hill function. For regular media the default order is adstock then Hill; for reach and frequency it flips to Hill then adstock. Inference uses a "holistic MCMC sampling approach called No U Turn Sampler (NUTS)," implemented on TensorFlow Probability, which is why the GPU recommendation is not decorative. The terms below recur through the rest of this guide.

Adstock (carryover)

The lingering effect of past media. Meridian uses geometric decay, controlled by parameter alpha in the zero-to-one range: an impression this week still nudges next week's outcome.

Hill saturation

An S-shaped or concave diminishing-returns curve mapping media exposure to effect. It captures the reality that each extra unit of spend buys less incremental outcome than the last.

MCMC / NUTS

Markov Chain Monte Carlo. The No-U-Turn Sampler is an efficient MCMC method that draws samples from the model's posterior distribution. Meridian runs it on TensorFlow Probability.

R-hat (Gelman-Rubin)

A convergence diagnostic. Values near 1.0 mean the MCMC chains agree and mixed well; values above roughly 1.1 flag non-convergence and an untrustworthy fit.

ROI prior

A prior distribution placed directly on a channel's return on investment rather than on an abstract coefficient. Meridian's default is LogNormal(0.2, 0.9), mean ROI 1.83.

Marginal ROI (mROI)

The return on the next incremental dollar at current spend levels. It is the decision metric the budget optimizer equalises across channels.

Credible interval

The Bayesian uncertainty range around an estimate. Wide intervals signal that the data lacks the variation the model needs to pin the effect down.

Hierarchical pooling

Geo-level estimates shrink toward a national mean, sharing statistical strength across regions. It is the mechanism that lets geo models need less history than national ones.

GQV

Google Query Volume, the search-query volume used as a control variable to de-confound paid search, so the model does not credit search with demand that already existed.

The data Google Meridian actually needs

This is where most Meridian projects stall, well before the model runs. The inputs are specific, and the granularity rules are firm. The table below is the assembly checklist. Every row is required unless the notes say otherwise, and every field is indexed by geo and by time period.

Google Meridian input requirements (source: developers.google.com/meridian docs)
Input Required? What it is / where it comes from Granularity
KPI / outcome Yes The response variable: revenue, units, conversions, sign-ups, applications, installs. Add revenue_per_kpi if the KPI is non-revenue, to express ROI in currency. Weekly, per geo
Media spend Yes Spend per channel. Required to compute ROI. Same dimensions as the media exposure data. Weekly, per geo, per channel
Media exposure Yes Impressions or clicks, or reach and frequency. Reach is unique viewers per period; frequency is the average impressions per viewer. Weekly, per geo, per channel
Control variables Strongly Confounders: Google Query Volume, competitor activity, holidays, pricing, macro indicators. GQV is scaled by geo population. Weekly, per geo
Geo identifier + population Yes (geo models) The regional label plus population, used to scale media across regions of different sizes. Per geo
Time index Yes Weekly is the recommended sweet spot. Daily extends runtime; monthly risks non-convergence or wide credible intervals. Weekly best practice
Organic / non-media treatments Optional Organic media with no spend, or non-media treatments such as price and promotions. Weekly, per geo

The history rule is the one to memorise. Google's documentation is blunt: "As a general rule of thumb, historical data should be a minimum of two years' worth of weekly data for geo-level models and three years' of data for national-level models." Monthly-only data pushes the minimum to three years. Weekly is preferred because it "presents an advantageous equilibrium between the degree of variation and the extent of noise."

On the number of geos, Google deliberately declines to prescribe a floor: "we avoid prescribing a single 'correct' minimum ratio." For the US it does offer a benchmark, model the top 50 to 100 designated market areas by population. The real test is running the model and checking the observations-per-parameter ratio and the width of the credible intervals. A worked example from the docs: 105 geos times three years of weekly data gives 16,380 data points. That is the kind of density the geo design is built to exploit.

Paid search gets special handling, and it is easy to get wrong. Include Google Query Volume as a control variable, so the model does not credit paid search with demand that already existed and was going to convert anyway. And model brand search and generic search as separate channels, because brand search often harvests existing intent while generic search can create incremental demand. Collapsing them into one channel muddies the ROI estimate for both.

The implementation workflow, step by step

Here is the end-to-end build, in the order you run it. Each step names the object or method involved so a data team can map it to the docs. This is the centrepiece of the guide.

  1. Install

    Run pip install --upgrade google-meridian[and-cuda] for the GPU build (Python 3.11 to 3.13). CPU works but is slow for geo models. Confirm the GPU is visible to TensorFlow before you go further.

  2. Collect and shape the data

    Assemble weekly, per-geo, per-channel data: KPI, revenue-per-KPI, spend, exposure (impressions and clicks or reach and frequency), controls including GQV, and population. Two years plus for geo models, three years plus for national. This step usually takes longer than everything after it combined.

  3. Load into the schema

    Map your columns through Meridian's data loader into its input schema: arrays indexed by geo, time, and channel. Getting the index alignment right here saves hours of debugging later.

  4. Specify the model (ModelSpec)

    Choose the media-effects distribution, set priors (the default paid-media prior is a lognormal on ROI, LogNormal(0.2, 0.9)), set adstock max lag and knots, and decide whether Hill runs before or after adstock. This is where you set custom ROI priors from experiments for any calibrated channel.

  5. Fit with MCMC

    Run sample_prior then sample_posterior to fit with NUTS MCMC across multiple chains. A GPU is strongly recommended. National models with many channels can run for a while, so plan compute accordingly.

  6. Run diagnostics

    Check R-hat near 1.0 (roughly under 1.1 as a rule of thumb) for convergence, review effective sample size, and inspect divergences. Wide credible intervals are a signal of insufficient data or variation, not a bug to resample away.

  7. Analyse the results

    Pull ROI, marginal ROI, incremental outcome, cost per incremental KPI, channel contribution, and response curves, all from the posterior draws. Read them as ranges, because that is what they are.

  8. Optimise the budget

    Call BudgetOptimizer.optimize() for a fixed budget (the default) or a flexible budget, adding channel-level spend constraints. The section below on the optimizer covers the modes in detail.

  9. Report

    Generate the HTML summary outputs, or push an already-trained model into the no-code Scenario Planner (launched February 2026) so stakeholders can run their own budget scenarios without touching Python.

Integration reality For Google-side channels, an MMM Data Platform can supply impressions, clicks, cost, GQV, and YouTube reach and frequency on request. GA4 data lives in BigQuery and exports cleanly into Meridian's schema. There is no first-party doc confirming a dedicated GA360 connector as of July 2026, so treat integration as a BigQuery and GA4 export path, not a named product tie.

Interactive: the data-feasibility planner

Before you scope a Google Meridian build, the first question is whether your data can carry one at all. This planner turns the data rules above into a directional read. Enter your geos, weeks of history, channels, and cadence, and it returns a verdict band plus the specific gap. Every threshold here is a method-level rule of thumb, not a guarantee, and the output is a planning signal, not a model result.

Meridian data-feasibility planner

Rules of thumb only. The real test is running the model and checking credible-interval width.

Calibrating Meridian with incrementality experiments

An uncalibrated MMM is an observational regression. It can tell you that search spend and revenue moved together, but it cannot tell you whether search caused the revenue or simply rose because demand was rising anyway. Calibration is the fix, and Meridian's Bayesian design makes it clean.

The mechanism is priors, not post-hoc adjustment. You fold ground-truth experiments, such as geo lift tests, conversion-lift studies, or randomised controlled trials, into the model as priors on that channel's ROI. Meridian's documentation exposes exactly this: set custom ROI priors using past experiments. A lift study that returns an ROI of roughly 2.5 with a standard error becomes a lognormal ROI prior on that channel. The MCMC then weighs that experimental prior against the observational likelihood, and the posterior respects both.

Contrast that with the default. Meridian's out-of-the-box paid-media prior is deliberately moderate: LogNormal(0.2, 0.9), which the docs describe as "a priori the mean ROI of each channel is 1.83 ... 80% are between 0.5 and 6.0." That default is a sensible, weakly-informative guardrail for a channel you have not tested. A channel you have tested deserves a tighter, experiment-anchored prior, and the difference in the resulting posterior can be large.

Helper utilities exist to construct these priors from an experiment's mean and standard deviation, or from a confidence interval. Design the experiments to feed this step, our incrementality testing guide covers how to run geo holdouts and lift tests that produce a usable lift estimate. For the cross-border privacy context that increasingly forces teams toward this aggregated, consented approach, the cookieless MMM and Bayesian incrementality piece goes deeper on APAC specifics.

The failure mode Running Meridian uncalibrated on a full dataset is the single implementation mistake most likely to produce confident-but-wrong output. The model will report tidy ROI numbers with credible intervals, and a channel with an endogenous relationship to demand will look better than it is. At least one holdout experiment turns a defensible-looking model into an actually defensible one.

The budget optimizer, honest limits, and when not to use it

Once the model is fit, the BudgetOptimizer is what turns posteriors into a recommendation. It builds response curves from the posterior adstock-and-Hill draws, marks your current spend and the optimal spend on each curve, and reallocates. There are two modes.

Meridian BudgetOptimizer modes (source: Meridian budget-optimization docs)
Mode What it does When to use it
Fixed budget (default) Holds total spend constant and finds the allocation across channels that maximises the outcome or ROI. Runs when optimize() is called with no arguments. You have a set budget and want the best split.
Flexible budget Lets total spend vary, constrained by a target ROI or target marginal ROI. The budget grows until the marginal ROI of total spend hits your target_mroi. You want to know whether to spend more or less overall, at what efficiency.

The decision metric that matters here is marginal ROI, the return on the next dollar at current spend levels. A channel with a high average ROI but a saturated response curve may have a low marginal ROI, which means the next dollar is better spent elsewhere. The optimizer equalises marginal ROI across channels subject to your constraints. You can bound how far it moves any single channel with per-channel spend-shift ratios, which matters when a purely mathematical optimum would swing spend more violently than an organisation can execute.

Now the honest limits, stated plainly, because the hype version skips them.

  • Compute is real. NUTS MCMC is expensive. A well-specified geo model with many channels can run for hours, and a GPU is effectively required for a working cadence.
  • Statistical literacy is required. Reading R-hat, divergences, and credible intervals, and setting priors well, needs genuine Bayesian skill. The no-code Scenario Planner sits on top of an already-trained model; it does not remove this need for the modelling step.
  • It is data-hungry. The geo hierarchy is the strength, but it needs clean, aligned geo-level data over two to three years that many smaller advertisers simply cannot assemble. Low spend variation means weak identification, whatever the sample size.
  • It has a Google-centric edge. Meridian is richest with Google data: GQV, and reach and frequency via the MMM Data Platform. Non-Google channels are harder to feed at the same fidelity.
  • It is channel-level, not campaign-level. The granularity is deliberate. Meridian is not user-level attribution and will not tell you which creative won.

Google, citing Harvard Business Review Analytic Services research, puts a number on the adoption gap: nearly 40 percent of marketers struggle to connect MMM insights to decisions, which is the stated reason the Scenario Planner exists. That is the honest backdrop. Meridian is a strong tool for teams with the data and the skill. It is the wrong tool for thin-data setups, real-time optimisation needs, and teams without any Bayesian capacity. Reach for it where those conditions hold, and reach for something lighter where they do not.

Google Meridian versus Meta Robyn in brief

The two open-source MMM frameworks that matter in 2026 are Meridian and Meta Robyn. They solve the same problem with different mathematics, and the choice is less about which is better and more about which fits your team. The short version is below; our Meta Robyn implementation guide covers the Robyn side in the same depth this post covers Meridian.

Google Meridian versus Meta Robyn, at a glance
Dimension Google Meridian Meta Robyn
Statistical approach Bayesian: NUTS MCMC on TensorFlow Probability Frequentist: ridge regression plus evolutionary hyperparameter search
Language Python R (production); a Python port exists in beta
License / owner Apache-2.0, Google MIT, Meta Marketing Science
Output Full posterior distributions and credible intervals Point estimates across a Pareto front of candidate models
Geo hierarchy Native Limited
Reach and frequency Native Not natively
Priors on ROI Yes, direct ROI priors from experiments No priors; business logic enters via a plausibility objective and calibration
Compute Heavy, GPU recommended Lighter and faster

The decision heuristic. If you are Google-heavy, have clean geo-level data, and want quantified uncertainty and the ability to encode experiment results as priors, Meridian is the natural pick. If your team lives in R, your data is Meta-heavy or lighter, and you value speed and automation over posterior uncertainty, Robyn fits better. Neither is correct in the abstract. The Robyn guide walks the full frequentist workflow, the Pareto model selection, and the methodological criticisms, so if you are genuinely undecided, read both and match the tool to the team.

Commercial MMM software is the third option, and the trade-off there is transparency for convenience. Meridian is free and self-hosted, and you own the model, the data, and the results. Managed MMM software trades that transparency for maintained pipelines, support, and a lower in-house statistical burden. For teams building a measurement layer a board can interrogate, that ownership matters. For a fuller treatment of building measurement your CFO will trust, see our incrementality testing guide and the MMM revival piece. If measurement architecture is what you are actually scoping, our analytics and insights service is where that work lives.

Frequently asked questions

Is Google Meridian free to use?

Yes. Meridian is released under the Apache-2.0 open-source license, which permits commercial use. You install it with pip install --upgrade google-meridian and run your own models in-house. The software costs nothing. The real cost sits elsewhere: the analytical work to configure priors, read the diagnostics, and interpret the posteriors, plus the data engineering to assemble two to three years of clean weekly data. Google's own framing is that Meridian lets advertisers set up and run their own in-house models, not that it removes the need for measurement skill.

Do I need to write code to use Google Meridian?

To build and fit a model, yes. Meridian is a Python library (Python 3.11 to 3.13 as of July 2026), so training a model means writing Python, shaping data into its schema, and setting up the model specification. Google launched a no-code Scenario Planner in February 2026 that sits on top of an already-trained model and lets stakeholders run budget scenarios without code. The Scenario Planner does not remove the coding step for the model itself. It addresses the downstream question of getting non-technical decision-makers to act on the output.

How much data does Google Meridian need?

Google's rule of thumb is a minimum of two years of weekly data for geo-level models and three years for national-level models. Monthly-only data pushes the national minimum to three years and risks non-convergence or very wide credible intervals. Weekly granularity is the recommended sweet spot: daily data extends runtime, monthly data loses variation. There is no single required number of geos. For the US, Google suggests modelling the top 50 to 100 designated market areas by population. The practical test is running the model and checking whether the credible intervals are usably tight.

Do I need a GPU to run Google Meridian?

Strongly recommended, not strictly required. Meridian fits its Bayesian model with No-U-Turn Sampler Markov Chain Monte Carlo on TensorFlow Probability, which is compute-heavy. Google recommends at least one GPU and reports testing on a T4 with 16 GB of RAM. You can run on CPU, but robust geo-level models with several channels can take hours, and a GPU turns that into a manageable job. Install the GPU build with pip install --upgrade google-meridian[and-cuda]. For a one-off national model with few channels, CPU may be tolerable.

What is the difference between Google Meridian and Meta Robyn?

The core divide is statistical paradigm. Meridian is Bayesian: it samples full posterior distributions with MCMC and lets you encode business knowledge as priors, including direct priors on channel ROI. Meta Robyn is frequentist: it uses ridge regression plus an evolutionary hyperparameter search and returns a Pareto set of point-estimate models. Meridian is Python with native geo hierarchy and reach and frequency support. Robyn is production-grade in R. Google-heavy setups with geo data and a need for uncertainty ranges lean Meridian. See our Meta Robyn implementation guide for the other side in depth.

Does Google Meridian replace GA4 or attribution?

No. Meridian is aggregate marketing mix modelling. It works from spend and outcome data at the geo and week level, without user-level tracking, and answers strategic questions: historical channel contribution, the response curve per channel, and how to allocate future budget. GA4 and multi-touch attribution work from user-level signals and answer tactical, in-flight questions. They are complementary. Attribution tells you what to adjust this week; Meridian tells you how to plan the quarter. Meridian also sees channels attribution cannot, such as television and out-of-home, because it does not depend on pixels.

How does Google Meridian handle paid search?

Two specifics from the docs. First, include Google Query Volume as a control variable, scaled by geo population, so the model does not credit paid search with demand that already existed. Paid search spend rises when people are already searching, which is a classic confounder. Second, model brand search and generic search as separate channels, because they behave differently: brand search often captures existing intent while generic search can create incremental demand. Treating them as one channel muddies the ROI estimate for both. This is one of the places where a Google-native measurement design shows through.

Can I calibrate Google Meridian with A/B or geo lift tests?

Yes, and this is the highest-value step most teams skip. Meridian's Bayesian design lets you fold experiment results in as priors rather than post-hoc adjustments. A geo lift test that returns an ROI of roughly 2.5 with some uncertainty becomes a lognormal ROI prior on that channel. The MCMC then weighs that experimental prior against the observational likelihood, producing a posterior that respects both. The default paid-media prior is deliberately moderate, a lognormal on ROI. Custom ROI priors from experiments are what move the model from correlation toward defensible causal estimates.

How do I know a Google Meridian model has converged?

Check the R-hat diagnostic first. R-hat, the Gelman-Rubin statistic, compares variation across the MCMC chains: values near 1.0 mean the chains agree and mixed well, while values above roughly 1.1 flag non-convergence. Also review the effective sample size and any divergences reported by the sampler. Then look at credible-interval width: if the intervals around your ROI estimates are so wide they cannot inform a decision, the data lacks the variation the model needs, and no amount of resampling fixes that. Convergence and usefulness are two separate checks.

Is LightweightMMM still an option instead of Google Meridian?

No. Google's earlier open-source MMM library, LightweightMMM, was archived read-only on 19 January 2026. The repository states that it is no longer supported and recommends switching to Meridian. Its last release was v0.1.9 back in May 2023. There is no direct model port: migration means reloading your data into Meridian's schema and rebuilding. If you are starting fresh in 2026, start on Meridian. If you have a LightweightMMM model in production, plan the rebuild rather than waiting for support that will not come.

When is Google Meridian the wrong tool?

Several cases. If you have less than two years of clean weekly data with meaningful spend variation, the model runs but the outputs carry too much uncertainty to drive budget decisions. If your team has no Bayesian statistical capacity, interpreting R-hat, divergences, and priors becomes a liability, and the no-code Scenario Planner does not remove that need for the modelling step. If you need real-time or campaign-level optimisation, Meridian is the wrong granularity, since it is aggregate and channel-level by design. And if most of your media is non-Google, some of Meridian's richest signals, such as Google Query Volume and reach and frequency via the MMM Data Platform, are harder to feed at full fidelity.

Does Google Meridian differ in use across Singapore, Malaysia, Australia, the US, and Canada?

The method is identical everywhere; the data assembly differs. The US benefits most from the geo-level design, with Google's guidance to model the top 50 to 100 designated market areas. Australia and Canada have fewer large metropolitan regions, so geo variation is thinner and pooling toward a national mean matters more. Singapore is effectively a single geo, which pushes teams toward a national-level model that needs three years of weekly history rather than two. Malaysia teams often model at the state level. The two-versus-three-year data rule and the weekly-granularity rule hold across all five markets.

Related

Work with leapbuzz

The planner flagged your data gap. Want a Meridian build that survives a CFO review?

leapbuzz designs and runs marketing mix modelling for teams across Singapore, Malaysia, Australia, the US, and Canada. Data readiness, model specification, experiment calibration, and outputs a board can interrogate, built as a working system rather than a one-off report.

Talk to us