Marketing mix modeling data: what you need and how much is enough

Most marketing mix models fail at the data, not the maths. Here's what to collect, how much history is enough, why spend variation matters more than row count, and how to audit a messy handoff before you fit anything.

Mike Taylor By Mike Taylor · Updated · 11 min read

Marketing mix modeling data is a weekly table with one row per period and three kinds of column: the outcome you want to explain (revenue, orders or sign-ups), the spend and ideally exposure for each paid channel, and the non-media drivers of sales such as price, promotions, distribution, seasonality, holidays and competitor activity. The usual minimum is two years of weekly history, but how much each channel’s spend varies, and how independently the channels move, matters more than the raw row count.

I’ve built marketing mix models for companies including Monzo, Breeo and The AA, and in my experience the data takes longer than the modeling. That’s rarely anyone’s fault, because the spend lives in five ad platforms with five definitions of a week, revenue lives in finance with returns booked when they’re processed, and the promotion calendar lives in someone’s head. A model can’t recover information that never made it into the table, so this page covers what to collect, how much is enough, and how to audit what you’ve got before fitting anything.

What data you need for a marketing mix model

Here’s the full list, roughly in order of how much damage leaving it out does. Not every business needs every row, but every row you skip should be a decision rather than an oversight.

DataExamplesWhy the model needs it
OutcomeRevenue, orders, new customers, app installsThe thing you’re explaining; one, precisely defined
Paid media spendWeekly cost per channel (search, social, video, TV, audio, OOH)To calculate ROI and fit the response curves
Media exposureImpressions, GRPs/TRPs, reachA cleaner measure of what customers saw than cost
PriceAverage selling price, price index, discount depthPrice moves sales directly and often moves with media
PromotionsPromotion flags, depth, free-shipping weeksThe most common confounder of media effects
DistributionStore count, listings, out-of-stock weeksSales can’t happen where the product isn’t
Seasonality and holidaysHoliday flags, school terms, weather where relevantPeaks that media budgets usually follow
EventsLaunches, outages, PR spikes, tracking changesOne-off shocks that otherwise land on a channel
CompetitorsCompetitor spend or share-of-voice estimatesExplains dips your own data can’t
MacroConsumer confidence, category demand, search trendsSlow-moving demand shifts across the market
Organic activityEmail sends, social posts, PR mentionsMarketing with no media cost that still moves sales

The first three rows are the ones people collect; the middle rows are the ones that make the model trustworthy. If promotions always run alongside your biggest media bursts and the promotion isn’t in the data, the model will credit the media for the promotion’s sales, which is the omitted variable problem and the single most common reason an MMM overstates a channel. The MMM model diagnostics page has an interactive example of exactly that.

The outcome, the media and the controls

Choose one outcome and define it precisely. “Revenue” can be gross or net of returns, discounts and tax; it can be booked on order date, shipment date or payment date; it can include or exclude marketplaces. Each choice is defensible, but the model needs one of them applied consistently for the whole history. The course’s “prepare your data” lesson puts it well: an MMM dataset is a business record, not just a matrix, and if finance uses order dates while the media export uses the ad account’s timezone, a tidy-looking join can give each row two different meanings.

For media, collect spend for every channel because that’s what ROI is calculated from, and collect exposure (impressions for digital, GRPs or TRPs for TV and radio) where you can. Robyn’s analyst guide recommends modeling exposure metrics rather than spend where they’re available, avoiding clicks because they miss people who saw an ad and didn’t click, and falling back to spend when exposure data is missing or fits poorly. Whichever you use, be consistent: spend booked in the week ads aired, not the week the invoice arrived, and one definition (gross or net of agency fees and platform credits) throughout.

Controls are everything else that moves sales. Price, promotions and distribution are the most important for retail and consumer brands; for subscription and app businesses it’s usually pricing changes, product launches and app-store features. Add seasonality and holidays, a dummy for each real one-off event, and competitor or macro data if you can get it. The measurement plan page covers choosing these from the business question rather than throwing in everything available, which matters because every column you add costs a parameter.

Weekly or daily, national or geo

Weekly data is the default, and for good reason. It smooths out day-of-week patterns, it matches how most media is planned and bought, and it’s the granularity Robyn’s guidance treats as best practice; daily data can be acceptable but needs extra validation, and the Robyn paper suggests shorter daily datasets can work for direct-response businesses such as DTC brands, apps and games. Monthly data is a last resort: with 12 rows a year you’d need many years of history to fit even a small model, and the business will have changed in the meantime.

Geography is the bigger lever. If you can get the same outcome and media data by region (states, DMAs, countries), a geo-level model multiplies your observations and, more importantly, adds variation, because spend rarely moves identically everywhere. Google’s research on geo-level Bayesian hierarchical models found they generally produce tighter credible intervals than national-only models, and Meridian recommends the geo-level model whenever the data exist. The catch is alignment: regional media and regional sales have to cover the same population, which is harder than it sounds for national TV or for digital channels whose geo reporting is approximate. The geo models brief covers the preparation.

How much data do you need for MMM?

The common rule of thumb is at least two years of weekly data, and both Robyn’s analyst guide and the Robyn paper state it. The reasoning is about seasonality: with two years, the model sees each season twice, so it has some chance of telling a Christmas peak from the TV campaign that ran during it. With one year, every seasonal pattern appears once, perfectly confounded with whatever media ran at the same time. Robyn’s guide suggests collecting four to five years if you only have monthly data.

Rows on their own aren’t the right measure, though; rows per parameter is. Robyn’s analyst guide suggests about 10 observations per independent variable. Meridian’s documentation works through a national example with 12 channels, six controls and eight knots (26 parameters, before it even counts adstock and saturation) on two years of weekly data, and calls the resulting four data points per parameter too low to estimate the model reliably; its suggested fix combines channels, cuts knots and drops a non-confounding control to get to 10 parameters on three years of data, about 15 points each, which it says might allow some directional information. That’s a sobering example, because 12 channels and two years is a pretty typical brief.

Remember too that each channel isn’t one parameter. A coefficient, an adstock rate and one or two saturation parameters make three or four per channel, so eight channels can easily mean 30 parameters before you’ve added a single control. Bayesian priors and ridge regression help by constraining parameters the data can’t pin down, but they help by substituting assumptions for evidence, which is fine only if the assumptions are earned (the Bayesian MMM page goes into this).

Variation matters more than row count

A regression learns a channel’s effect from how sales move when that channel’s spend moves. If you spent $50,000 on paid search every single week for three years, you have 156 rows and no information at all about what search does, because there’s no variation to learn from. The same goes for two channels that always move together: the data can tell you about their combined effect but not how to split it, which is the multicollinearity problem. Meridian’s guidance notes that insufficient variation in media spend adversely impacts national models, and Google’s 2017 geo paper starts from the observation that national data often has small samples and limited spend variation.

Two quick measures capture this. The coefficient of variation (CV, the standard deviation of weekly spend divided by its mean) tells you how much a channel moves; my rough rule is that below about 0.2 a channel barely varies, and the model will lean on priors or regularization to estimate it. The correlation between each pair of channels tells you how independently they move; above about 0.8 the split of credit between them will be unstable. Put your own numbers into the checker below:

Checker
Do you have enough data for a marketing mix model?

Describe your dataset and the model you want to fit. The checker counts parameters against observations and flags the things that matter more than row count: how much each channel's spend varies and how much channels move together.

Parameters to estimate
-
Observations
-
Rows per parameter
-
VIF from correlation
-
Warnings
    What you could do
      Rules of thumb, not laws. Rows per parameter: Robyn's analyst guide suggests about 10 observations per independent variable; Meridian's guidance calls 4 per parameter too low for a national model. Two years of weekly data is the usual minimum (Robyn). With several geos the effective ratio sits between no pooling and full pooling (Meridian). Correlation-based VIF assumes two channels; CV = standard deviation ÷ mean of weekly spend.

      The defaults describe a common brief: two years of weekly national data, six channels with adstock and saturation, four controls and six trend and seasonality terms. That’s 29 parameters on 104 rows, about 3.6 rows each, which is in the territory Meridian calls too low. Change geographies to 20 and watch the range jump, then set the lowest CV to 0.08 and see why more rows don’t fix a flat channel. The best data fix is often not more history but more variation: flighting spend on and off, varying it by region, or running a geo-lift test whose result can become a prior.

      A real data audit: the Northstar handoff

      The Vexpower course’s invented Northstar case includes a deliberately corrupted copy of its 104-week dataset, the kind of file an analyst actually receives. It has 105 rows and four planted problems, and a fictional re-export from the source owners confirms the fix for each. All the numbers are invented for teaching, but every problem is one I’d expect to find in a real handoff.

      IssueWeekWhat was receivedConfirmed valueSource
      Missing export2024-02-26social_spend blank1,148Social owner re-export
      Unit mismatch2024-04-29search_spend 1.8271,827Search owner confirms GBP, not thousands
      Wrong week boundary2024-07-30a Tuesday date2024-07-29Finance confirms Monday week start
      Duplicate export2024-03-11two identical rowskeep oneFinance confirms duplicate upload

      Paste the messy file into the data template you can download from this page and its Audit sheet flags all four: one duplicate row, one date that isn’t a Monday, one blank social cell, and a smallest search value of 1.827 against a typical week of around 2,400. Two details are worth dwelling on. First, the “missing weeks” check reports zero gaps, because the misdated Tuesday row fills the slot the missing Monday left; a count can pass while the calendar is wrong, which is why you check weekday alignment separately. Second, that single unit error raises search’s coefficient of variation from about 0.18 to about 0.20, nudging it across the low-variation threshold. A data error manufactured variation, and a model would have happily learned from it.

      Notice also what the audit can’t tell you. Passing every check doesn’t mean an important variable isn’t missing, that spend wasn’t set in response to expected sales, or that the regions respond the same way. The course asks students to write one substantive missing-data question even after the planted issues are fixed; for Northstar, mine would be whether stock availability was ever constrained, because the absence of a stock column doesn’t mean stock was always available. The full case, with the corrections and an answer key, is in the Northstar decision pack, and the worked marketing mix modeling example walks through it end to end.

      zip
      Northstar decision packBrief, data dictionary, messy weekly inputs, source corrections, planning evidence, model review, memo template, rubric and answer key. Invented case.
      Download

      Align time and geography before you join anything

      Every row is a claim about what belongs together, as the course’s “align time and geography” lesson puts it. Check three joins before you fit. Time: are weeks defined by order date, shipment date or payment date, which timezone closes the week, and is media booked when delivered or when invoiced? Population: do the outcome and the media cover the same geography and customers, or are you comparing online-only media with all-store revenue? Scope: have fees, tax, refunds, discounts and currencies been treated consistently?

      These mismatches can do worse than add noise, because they create fake mechanisms. A campaign delivered over a weekend that crosses a reporting boundary puts the spend in week one and much of the response in week two, and the model may read that recording artefact as adstock. Real responses can be delayed too, so fix the recording definitions before assuming every apparent lag describes customer behavior. Keep the raw data, document every transformation, and when a source changes its definition partway through the history, flag the break rather than smoothing it away.

      Recognise measurement error

      A precise column name doesn’t guarantee a precise measurement. In the Northstar case, search spend is recorded net of credits, social spend is gross and the video export omits agency fees, so the channels’ ROIs aren’t comparable even though the columns look identical. The course’s lesson gives a simple denominator example: a modeled contribution of 40,000 on 20,000 of recorded media spend is a return of 2.0, but if the intended denominator also includes 5,000 of campaign costs, the comparable ratio is 1.6. Nothing about the model changed; the definition of return did.

      Measurement problems come in different kinds (a consistent scaling error, a noisy input, a definition change halfway through), and their effects depend on the model and on how the errors relate to other inputs, so be wary of anyone who says measurement error always biases an estimate in one direction. More rows reduce sampling noise but leave a systematic recording problem untouched, and a model can be confidently wrong about a poorly measured channel. The practical fix is unglamorous: reconcile a month of each channel’s spend to the finance definition used in the business decision, and check that definition held for the whole period. The data cleaning brief and the note on interpolating missing data cover the mechanics.

      Download the marketing mix modeling data template

      The template has a weekly Data sheet with typed columns and validation (dates, non-negative numbers, 0/1 flags), a Data dictionary with yellow cells for the source system, owner and exact definition of every column, and an Audit sheet with live formulas for time coverage, missing and duplicate weeks, non-Monday dates, blanks, zero-spend weeks, CV and spend share per channel, a CORREL correlation matrix and a rows-per-parameter calculator. It comes filled with the course’s invented practice data so you can see the audit working, and it works in Excel and Google Sheets with no macros. If you want more sample data to practise on, the MMM datasets page collects them.

      xlsx
      MMM data templateData sheet with validation, data dictionary and a live audit sheet. Pre-filled with invented practice data.
      Download

      If you’d rather learn this on a dataset that’s already been through the wringer, the Vexpower MMM course starts with exactly this audit before any modeling, and the introduction to marketing mix modeling shows where data preparation fits in the full process.

      Downloads

      xlsx
      MMM data template (Excel)Weekly data sheet with validation, a data dictionary, and a live audit: missing, duplicate and non-Monday weeks, blanks, zero-spend weeks, CV per channel, correlation matrix and rows per parameter.
      Download
      zip
      Northstar decision pack (zip)The course's invented case, including the messy weekly handoff and source corrections used in the audit on this page.
      Download
      csv
      Practice weekly dataset (CSV)104 invented weeks of revenue, three spend channels and a promotion flag.
      Download

      Frequently asked questions

      How much data do you need for marketing mix modeling?

      The usual minimum is two years of weekly data, so the model sees each season at least twice. Just as important is the ratio of rows to parameters: Robyn's analyst guide suggests about 10 observations per independent variable, and Google's Meridian guidance calls four data points per parameter too low for a national model. Regional data multiplies the rows and is often the best way to get more.

      What data do you need for a marketing mix model?

      You need a weekly outcome such as revenue or orders, spend and ideally exposure (impressions, GRPs) for each paid channel, and the non-media drivers of sales: price, promotions, distribution, seasonality and holidays, one-off events, and where available competitor activity and macroeconomic indicators. Every column needs a consistent definition across the whole history.

      Should marketing mix models use weekly or daily data?

      Weekly data is the standard choice because it smooths day-of-week noise and matches how most media is planned. Daily data can work for direct-response businesses such as apps and DTC brands, but it needs extra validation, and Robyn's guidance treats weekly as best practice.

      Can you do MMM with one year of data?

      You can fit a model, but with one year of weekly data the model sees each season only once, so it can't distinguish a seasonal peak from the media that ran during it. If you only have a year, keep the model small, use informative priors from experiments, or get regional data to add rows and variation.

      Why does spend variation matter in MMM?

      A regression learns a channel's effect from how sales change when that channel's spend changes. If spend is nearly flat, or always moves together with another channel, there is little or no information to separate its effect, however many rows you have. Deliberate flighting or geo tests create the variation the model needs.

      References

      1. Robyn: analyst's guide to MMM Weekly data as best practice; two years minimum; about 10 observations per independent variable; exposure metrics over spend.
      2. Runge, Skokan, Zhou and Pauwels, Packaging Up Media Mix Modeling: An Introduction to Robyn's Open-Source Approach Two years of weekly data generally recommended; shorter daily data can suffice for direct-response businesses.
      3. Google Meridian: amount of data needed Data points per parameter; 104 weeks with 26 parameters is too few; insufficient media variation hurts national models.
      4. Google Meridian: national models Geo-level models recommended where possible; national is the single-geo special case.
      5. Sun, Wang, Jin, Chan and Koehler (2017), Geo-level Bayesian Hierarchical Media Mix Modeling National data often has small samples and limited spend variation.
      Mike Taylor
      Mike Taylor

      I've built marketing mix models for Monzo Bank, Booking.com, Time Out, The AA and others, advised Google, Appsflyer and Recast on MMM, and teach marketing mix modeling on LinkedIn Learning. Before that I co-founded a 50-person growth marketing agency. I write the Vexpower MMM course.

      Keep reading

      Learn MMM by doing itThe Vexpower course walks through thirty lessons on one invented brand, with simulators, Python labs and a decision case you can defend.
      See the course