Marketing mix modelling is realistic for a mid-size advertiser if you have about two years of weekly data, several channels with spend that actually varies, and someone who can run Python. Google Meridian is the most actively developed open-source option in 2026 (version 2.1.0, September 2026), while Meta's Robyn still works but its public code has seen little change since mid-2025. Treat the first model as a way to ask better questions, and calibrate it with experiments.
Marketing mix modelling (MMM) used to be something large advertisers bought from consultancies once a year. Open-source libraries from Google and Meta changed the economics: the software is free, and the method needs no cookies or user-level data. That makes MMM tempting for mid-size advertisers who spend across Google, Meta, maybe TV or radio, and no longer trust any single attribution report. Whether it is worth doing depends less on budget than on data, and on whether someone will maintain the model after the first presentation.
What does MMM actually answer?
MMM is a regression on time series. It takes weekly (or daily) sales or another KPI, weekly spend or impressions per channel, and non-marketing factors such as price, promotions, seasonality and holidays. It then estimates how much of the KPI each channel contributed, how that contribution decays over time (adstock), and where extra spend starts to bring less return (saturation).
Google's Meridian README frames the questions well:
- How did the marketing channels drive revenue or another KPI?
- What was the return on investment of each channel?
- How should the budget be allocated in future?
What MMM does not do: tell you which ad, keyword or audience performed best. It works at channel level, over weeks. It complements attribution in GA4 and the ad platforms rather than replacing them. If you are trying to understand why those platforms disagree in the first place, see why GA4, Google Ads and Meta never agree.
Is a mid-size budget enough?
Budget size matters less than four conditions. Check them before anyone writes code.
- History. Meridian's documentation suggests at least two years of weekly data for a geo-level model and three years for a national model.
- Variation. Channels need spend that moves independently: bursts, pauses, new channels, regional differences. If Google and Meta spend rise and fall together every week, the model cannot tell them apart.
- Enough data per parameter. Every channel, control variable and trend component adds parameters. Meridian's documentation gives an example: 12 media channels, 6 controls and 8 knots make 26 parameters, and two years of weekly national data gives only 104 data points, or 4 per parameter. That is thin. Merging small channels and using fewer controls helps.
- An owner. A model that is never refreshed becomes a slide, not a tool. Plan for a quarterly refresh from the start.
If you spend in four or five channels with real variation, have two years of clean weekly data and someone comfortable with Python, a first model is realistic. If most of your spend is in one channel with a steady budget, an incrementality test on that channel will teach you more for less effort.
Which open-source tool should you use in 2026?
There are three serious open-source options. Their state has changed noticeably since 2024.
| Google Meridian | Meta Robyn | PyMC-Marketing | |
|---|---|---|---|
| Language | Python (3.11 to 3.13) | R, plus a Python beta | Python |
| Method | Bayesian, NUTS sampling | Ridge regression with evolutionary hyperparameter search (Nevergrad) | Bayesian, PyMC |
| Latest release (checked 6 October 2026) | 2.1.0, dated 17 September 2026 | R package 3.12.1 on GitHub; Python beta robynpy 0.3.6, April 2025 | 1.2.0, September 2026 |
| Calibration with experiments | Yes, including prior calibration from experiments such as Meridian GeoX (2.0.0) | Yes, through calibration_input (lift or geo test results) | Yes, lift test and ROAS or CAC calibration |
| Setup notes | At least one GPU recommended | R, plus the Python library Nevergrad | Standard Python environment |
Google Meridian
Meridian reached version 1.0.0 in January 2025 and has had a steady release cadence since. The 2.0.0 release on 2 September 2026 switched the default computation backend from TensorFlow to JAX, added prior calibration from incrementality experiments such as Meridian GeoX, and added channel calibration recommendations. Version 2.1.0, dated 17 September 2026 in the changelog, added a declarative way to define calibration windows, holdouts and population scaling with channel names and dates instead of index arrays.
Earlier 2025 and 2026 releases added things a mid-size team will use: automatic knot selection for trend (1.2.0), an exploratory data analysis engine with model quality checks (1.3.0), a data adequacy check that warns when the data-to-parameter ratio is too low (1.6.0), and modules for the Meridian Scenario Planner (1.4.0), which works in Colab and Data Studio. Meridian also supports reach and frequency inputs, organic media and non-media treatments such as price or promotions.
The trade-offs: it is Python-only, the team recommends a GPU (it is tested on a T4 with 16 GB of RAM), and the 2.0.0 release contained breaking changes, so pin the version you build on. Support runs through GitHub Discussions and Issues, answered weekly in batches.
Meta Robyn
Robyn describes itself as an experimental, semi-automated MMM package. It is built for granular datasets with many variables, which suits digital and direct-response advertisers. Its strength is the semi-automated workflow: it uses a multi-objective evolutionary algorithm to search many candidate models, includes a budget allocator, and accepts lift or geo test results for calibration.
Two facts to weigh. The Python version is described by Meta as an LLM-translated beta, converted from R version 3.11.1, which "might encounter bugs". And as of 6 October 2026, the most recent commit on the public main branch is from 27 June 2025. Robyn still runs and has a large user community, but a team starting fresh in late 2026 should look at that activity before building a quarterly process on it.
PyMC-Marketing
PyMC-Marketing is a Bayesian marketing library built on PyMC, under the Apache 2.0 licence, with version 1.2.0 released at the end of September 2026. Its README lists budget optimisation, calibration with lift tests and with ROAS or cost-per-acquisition estimates, and funnel models, including a geo-level example. It is a reasonable choice for teams that already work in the PyMC ecosystem and want more freedom to customise the model structure.

What data do you need to collect?
Weekly data, at the same granularity for every input:
- KPI: revenue or orders from the backend, not from GA4 or ad platforms. MMM needs the business outcome, including sales no tag saw.
- Media: spend per channel per week, and impressions or clicks where available. Split large channels sensibly (for example Search brand, Search non-brand, Performance Max, Meta prospecting, Meta retargeting) but do not create more channels than the data can support.
- Controls: price changes, promotions, product launches, stock-outs, holidays, and anything else that moves sales without being marketing.
- Geo, if available: the same data by region gives the model much more information to work with, which is why Meridian encourages geo-level data.
If your ad spend lands in BigQuery, building the media input is mostly an aggregation. This query turns a daily spend table into a weekly, one-column-per-channel input. Adjust table and channel names to your setup.
SELECT
DATE_TRUNC(date, WEEK(MONDAY)) AS week_start,
SUM(IF(channel = 'google_search_brand', spend, 0)) AS google_search_brand,
SUM(IF(channel = 'google_search_nonbrand', spend, 0)) AS google_search_nonbrand,
SUM(IF(channel = 'google_pmax', spend, 0)) AS google_pmax,
SUM(IF(channel = 'meta', spend, 0)) AS meta,
SUM(IF(channel = 'youtube', spend, 0)) AS youtube
FROM `your-project.marketing.daily_spend`
WHERE date BETWEEN '2024-09-30' AND '2026-09-27'
GROUP BY week_start
ORDER BY week_start;Check the result before modelling: weeks with zero spend that should not be zero, currency mix-ups, and channels renamed halfway through the period are the usual problems. Our BigQuery integration page describes how we work with exported data.

How do you run a first model without overreaching?
A practical sequence for a mid-size team:
- Agree the decision first. For example: how to split next year's budget between Search, Performance Max, Meta and YouTube. A model built to answer one decision is easier to judge.
- Build and freeze the dataset. Two to three years of weekly data, documented, with a list of known anomalies.
- Run exploratory checks. Look for correlated channels, constant series and too many parameters. Meridian's EDA checks do this; with other tools, do it by hand.
- Set priors you can defend. Bayesian tools let you say, for example, that ROI for a channel is unlikely to exceed a certain value. Use past experiments or industry knowledge, and write down the reasoning.
- Check fit and plausibility, not just fit. A model that fits history well but says brand search drives half your revenue is telling you about correlation with demand, not causation.
- Calibrate. Run at least one incrementality test on your largest channel and feed the result into the model. Without calibration, the model is a well-structured guess.
- Use the optimiser cautiously. Move budget in small steps, and treat recommendations outside your historical spend range as hypotheses to test.
Where do mid-size teams usually go wrong?
- Using platform conversions as the KPI. Then the model learns the platform's attribution, not your sales.
- Too many channels. Twenty channels on two years of weekly data leaves too few data points per parameter.
- Ignoring brand search. Brand search often follows demand created elsewhere. Treat it carefully, or model it as a separate component.
- No refresh plan. Media costs, creative and competitors change. A model from last year describes last year.
- Presenting point estimates. Bayesian models produce ranges. Show the credible intervals, especially when they are wide.
How does MMM fit with experiments and attribution?
Think of three layers. Platform and GA4 attribution for daily and weekly optimisation within channels. Incrementality tests to measure causal effect for a specific channel or campaign at a specific time. MMM to bring everything together across channels and over time, calibrated by those tests. Each covers a blind spot of the others. For definitions, see the marketing mix modelling glossary entry.

Key takeaways
- MMM is feasible on a mid-size budget if you have around two years of weekly data, channels whose spend varies independently, and an owner who refreshes it.
- Meridian's documentation suggests two years of weekly data for geo models and three for national models, and warns about too few data points per parameter.
- Google Meridian is the most active open-source option in 2026: 2.0.0 (September 2026) moved to JAX and added calibration from experiments; 2.1.0 followed later that month.
- Meta Robyn still works, but its public main branch has had no commits since June 2025 and its Python version is an LLM-translated beta.
- Use backend revenue as the KPI, keep the channel list short, calibrate with at least one experiment and present ranges, not single numbers.
Tracking Whisper does not build MMM models, but it works with the inputs: it can check that conversion and spend data from Google Ads, Meta and GA4 is consistent, and analyse it in BigQuery. See analysis for how that works.
Frequently asked questions
How much data do I need for marketing mix modelling?
Google's Meridian documentation suggests at least two years of weekly data for a geo-level model and three years for a national model. More important than length is variation: if every channel's spend moves in lockstep, no model can separate their effects. Count parameters too, because a model with many channels and controls needs more data points per parameter.
Is Google Meridian free?
Yes. Meridian is an open-source Python library from Google, installed from PyPI as google-meridian. You pay only for the compute you run it on and the time of whoever builds and maintains the model. Google recommends at least one GPU.
Is Meta Robyn still maintained?
Robyn is still available in R and as a Python beta that Meta describes as LLM-translated and possibly buggy. As of early October 2026, the latest commit on its public main branch dates from June 2025. It still works, but check the activity on the repository before you commit a long-term process to it.
Can MMM replace GA4 attribution?
No, they answer different questions. MMM estimates the contribution of each channel to total sales over weeks and months, including offline effects and channels without clicks. GA4 attribution assigns credit for individual tracked conversions. Use MMM for budget allocation between channels, and platform or GA4 data for day-to-day optimisation within a channel.
What does marketing mix modelling cost for a mid-size company?
With open-source tools, the main cost is people: building a clean weekly dataset, running and reviewing the model, and refreshing it every quarter. The software itself is free. Agencies and vendors price this very differently, so ask what is included in each refresh.
Sources
Dimitris builds Tracking Whisper and writes about tracking, analytics and data from the work the agent does every day: GTM containers, GA4 properties, ad platforms and the numbers in between.


