Measurement guide

Marketing mix modeling for small ad teams

Marketing mix modeling, MMM, estimates what each channel contributed to total sales from weekly spend and sales history, without any user data. Both open source options ask for about two years of weekly data, so most small teams are better served first by a weekly MER read and a lift test on their biggest channel. This guide sets the three methods side by side and gives a rule for when the model earns its cost.

Reviewed Oct 4, 2026

Three methods

Attribution, incrementality tests and MMM compared

Three questions, three kinds of evidence. The method is chosen by the question, and by the data you have.

Attribution, incrementality tests and MMM compared
AttributionIncrementality testMarketing mix model
AnswersWhich ad touched which order, under the platform's rulesHow many conversions a channel caused, in the people or regions testedHow each channel and spend level moved total sales over time
Data it needsThe pixel, Conversions API or URL tracking you already runA holdout of people or regions kept from the ads, and the KPI by groupWeekly sales, spend and exposure per channel with controls, over at least two years
Time to a resultSame dayThe length of the test, then one readWeeks to months to build, then a refresh each month or quarter
CostIncluded in the platformThe test's own ad spend and the sales the holdout forgoes; GeoLift is freeAnalyst or agency time; Meridian and Robyn are free
Who runs itThe platform; you read itThe platform's lift tools, or an analyst with GeoLift in RA data scientist or an agency, with Meridian in Python or Robyn in R
Blind spotCredits orders that would have happened anyway, and one order to two platformsOne channel at a time, and only for the period testedA channel whose spend never varied cannot be read

MMM data requirements from Meridian's Collect and organize your data page and Robyn's Analyst's guide to MMM; lift definitions from Meta's lift metrics glossary; GeoLift from its documentation, all read on 4 October 2026.

01

What marketing mix modeling is, and what it is not

Marketing mix modeling is a statistical method that explains a business outcome, usually weekly sales, from the marketing that ran alongside it: spend or impressions per channel, promotions, price, seasonality and other controls. The model estimates how much each channel contributed and how the response bends as spend rises, so the output is a set of contributions and response curves, not a list of credited orders. It uses no cookies, pixels or user identifiers, which is why interest in MMM in marketing has returned as tracking has weakened.

It is not attribution. Attribution assigns each conversion to the ads a person saw or clicked, under rules the platform sets, and reports it the same day. MMM works at the level of the whole business and the whole channel, over years, and answers a planning question: where does the next dollar do the most, and what would happen if a channel were cut. Google's Meridian documentation describes its result as a posterior distribution of model parameters, a range with an uncertainty rather than a single figure.

It is also not quick. Google's Meridian guide to collecting data recommends a minimum of two years of weekly data for geo-level models and three years for national ones, and Meta's Robyn analyst's guide asks for a minimum of two years of historical weekly data. A team that started paid media eighteen months ago cannot build a sound MMM yet, whatever the tool.

02

Marketing mix modeling vs attribution and incrementality tests

The three methods answer three questions, and the lead table sets them side by side. Attribution says which ad touched which order and is best used to compare campaigns inside one platform, because each platform credits under its own rules and two of them can claim the same order. An incrementality test says how many conversions a channel caused, by holding a group of people or regions out of the ads and comparing. MMM says how every channel moved total sales over time and where spend should shift.

They differ most in what they need: attribution needs nothing beyond the tracking you already run. A lift test needs a holdout and the patience to read it at the end. MMM needs years of weekly history with real variation in spend, because a channel whose budget never moved gives the model nothing to learn from. Meta's Robyn guide puts the same point as a ratio: one independent variable for every ten observations, so two years of weekly data, 104 points, supports about ten variables including the controls.

03

What a small team needs before MMM: a weekly MER read

Before any model, read the marketing efficiency ratio every week: the revenue the store recorded divided by everything spent on marketing in the same seven days. It is the number an MMM will later decompose, and the habit of reading revenue next to spend, rather than the platforms' attributed revenue, is most of what a small team gains from measurement. Write the definition down once and keep it: which costs, which revenue, refunds in or out.

Adrails reads this from the store and the ad accounts in one table. Analysis sets Shopify net sales, orders and sessions next to the spend of Meta and Google Ads accounts for the same period, each source in its own row, so the platforms' revenue and the store's are both visible and neither is merged into the other. A Weekly review or Ads against store automation posts the same read to Slack or email every Monday. The MER calculator does the arithmetic from figures you type when the accounts are not connected.

Read MER over weeks, not days, and watch its direction against platform ROAS. When MER falls while every platform's ROAS holds, the platforms are crediting orders that would have happened anyway, or the same order twice, and that is the moment a lift test earns its place.

04

Incrementality testing is the cheaper first step

A lift test is an experiment: part of the audience or part of the country is kept from the ads, and conversions in the two groups are compared. Meta's lift metrics glossary defines incremental conversions as the additional conversions that would not have occurred without the ads being tested, and reports a cost per incremental conversion, the amount spent divided by that estimate, with a confidence figure for whether the lift is above zero. That is the number attribution cannot give: how many orders the channel actually caused.

A geo lift test does the same with regions instead of people. Meta's GeoLift, an open source R package under the MIT license from its Marketing Science team, is built for cases where people-based measurement is not feasible, and uses synthetic control methods to build a comparison for the regions where the ads changed. Google's Meridian pairs with GeoX for the same purpose, and both Meridian and Robyn take the result of such a test as a calibration input.

For a small team the first test is obvious: the channel that takes most of the spend, held out of a few regions for the length of the test, with store orders by region as the KPI. The result costs the test's own spend and the sales the holdout forgoes, is readable without a data scientist, and settles the question MER raised. Run one before you fund a model.

  • Test the biggest channel first
  • Use store orders, not attributed conversions, as the KPI
  • Run the test long enough to read, then stop
  • Keep the result: a model will want it as a prior

05

When MMM pays for itself

The sourced floor is the data. Meridian asks for two years of weekly data at geo level or three at national level; Robyn asks for two years of weekly data and one variable per ten observations. Under that, no tool produces a trustworthy curve, and a model built on less will look precise and be wrong.

Above the floor, the judgment is ours, not a benchmark. MMM pays when three conditions hold at once: three or more paid channels with budgets that have actually moved, enough spend that a ten percent misallocation across them costs more than the weeks of analyst time the model takes to build and refresh, and someone who will own the model from one quarter to the next. A team with one dominant channel does not need a model to allocate; it needs a lift test on that channel. A team whose channels never varied has nothing to model yet, and should vary them on purpose for a year.

The order follows. Weekly MER first, because it costs nothing. A lift test on the largest channel next, because it answers the incrementality question directly. MMM last, when the data and the channel count justify it, calibrated on the tests run in the meantime.

06

The open source options: Meridian and Robyn

Meridian is Google's model, published on developers.google.com and GitHub under the Apache 2.0 license, in Python 3.11 to 3.13. It is built on Bayesian causal inference, handles large geo-level datasets in a hierarchical model and can also run nationally. Its inputs are a KPI, media exposure and spend per channel and control variables, with revenue per KPI, geo population, and reach and frequency in place of a single exposure metric as options. Its repository says it has been tested on a T4 GPU with 16 GB of RAM and recommends at least one GPU.

Robyn is Meta Marketing Science's model, MIT licensed, written in R with a Python version its repository calls an LLM-translated beta. It is not Bayesian: it fits a ridge regression, searches hyperparameters with evolutionary algorithms from Meta's Nevergrad library, and decomposes trend, season and holidays with Prophet. Its guide prefers exposure metrics such as impressions to spend as inputs, and strongly recommends calibrating on experimental results such as geo-based tests and Facebook lift studies.

Both are free to use and neither is a product. Either needs a person who can prepare the dataset, run the model, read the diagnostics and defend the result. The trail table lists what their documentation states so the choice rests on the facts rather than on the publisher.

07

How to read an MMM output without over-trusting it

Read the interval before the point. A contribution of 18% with a credible interval from 9% to 27% says the channel matters and the model does not know how much; the decision it supports is a step, not a leap. Check the response curves against common sense: a channel shown with no diminishing return at ten times its historical spend has been extrapolated, not measured.

Compare the model with the tests you ran. If the lift test on your biggest channel found a cost per incremental order of $40 and the model implies $20, one of them is wrong and the model is the usual suspect, because it was fitted, not randomized. Both Meridian and Robyn exist to take that test as a calibration input, so use it. Meta's own 2019 guidance on modern mix models warned that long histories go stale as digital channels change and suggested methodologically updated models built on six to twelve months of recent data, a tension with the two-year floor that only calibration resolves.

Then move budgets in steps and re-read. A model run is a hypothesis about the next quarter, and the quarter will disagree with it somewhere. Shift no more than you can reverse, measure MER the following weeks, and refresh the model on the new data. Adrails caps any budget move it prepares at 30% per change for the same reason, with the evidence shown and an undo while the platform allows.

08

A decision rule

Pick the method by the question and the data, not by the tool's reputation. The four cases below cover most small teams, and a team moves down the list as its history and its channel count grow.

Whatever the stage, revenue next to spend for the same dates is the ground every method stands on. It is also the one habit that costs nothing to start this week.

  • One or two channels, under two years of history: weekly MER and platform ROAS, nothing else
  • One channel taking most of the spend: a geo lift test on it, read on store orders
  • Three or more channels, two years of weekly data, budgets that moved: an MMM, calibrated on the tests
  • Any MMM result: an interval, a step, a re-read the following month

The open source options

Meridian and Robyn on the facts their documentation states

The facts each project's documentation states, so the choice rests on them rather than on the publisher's name.

Meridian and Robyn on the facts their documentation states
MeridianRobyn
PublisherGoogleMeta Marketing Science
LanguagePython 3.11 to 3.13R, with a Python version the repository calls an LLM-translated beta
MethodBayesian causal inference, hierarchical geo-level modelRidge regression, hyperparameters searched with Nevergrad's evolutionary algorithms, Prophet for trend, season and holidays
BayesianYes, with posterior distributions on every parameterNo, regularized regression
Data granularityGeo-level encouraged, national possible; weekly recommendedWeekly recommended; monthly needs four to five years; built for many independent variables
History recommendedTwo years of weekly data for geo-level models, three for nationalAt least two years of weekly data, and one variable per ten observations
InputsKPI, media exposure and spend per channel, controls; optional revenue per KPI, geo population, reach and frequencyPaid media exposure, impressions preferred to spend; organic activity; context variables such as price or competitor activity
CalibrationGeo experiment results as priors, with Meridian GeoXGeo-based, Facebook lift and MTA results as ground truth
Hardware statedTested on a T4 GPU with 16 GB of RAM; at least one GPU recommendedNone stated
LicenseApache 2.0MIT

From developers.google.com/meridian and github.com/google/meridian, and from facebookexperimental.github.io/Robyn and github.com/facebookexperimental/Robyn, read on 4 October 2026.

FAQ

Common questions

What is marketing mix modeling?

Marketing mix modeling is a statistical method that estimates how much each marketing channel contributed to sales from weekly spend and sales history, with controls for price, promotions and season. It uses no user-level data and returns contributions and response curves with an uncertainty range.

What is the difference between marketing mix modeling and attribution?

Attribution credits each conversion to the ads a person saw or clicked, under the platform's rules, and reports it the same day. MMM explains total sales from channel spend over years and answers where budget should shift, without touching any individual order.

How much data does MMM need?

Google's Meridian guide recommends at least two years of weekly data for geo-level models and three years for national ones, and Meta's Robyn guide asks for a minimum of two years of weekly data. Robyn also suggests one independent variable for every ten observations.

Is Meridian free, and how does it differ from Robyn?

Both are open source and free to use. Meridian is Google's Bayesian model in Python under the Apache 2.0 license; Robyn is Meta's ridge regression model with evolutionary hyperparameter search, in R with a Python beta, under the MIT license.

What is incrementality testing?

An experiment that keeps part of the audience or part of the country from seeing the ads and compares conversions between the two groups. The difference, scaled to the whole audience, is the incremental effect of the ads; Meta's lift tools run it with people and its open source GeoLift package with regions.

What is a geo lift test?

A lift test that uses regions instead of people: ads run or change in some markets while comparable markets are held out, and sales by region are compared. It needs no user tracking, which is why Meta's GeoLift documentation positions it for cases where people-based measurement is not feasible.