A marketing mix modeling dataset is a time series, usually weekly, of an outcome like revenue or conversions alongside spend (or impressions) for each marketing channel and the non-marketing drivers that move sales, such as price, promotions, holidays and seasonality. The best free ones to learn on are the simulated datasets that ship with Robyn, Google Meridian and PyMC-Marketing, plus Vexpower’s own synthetic files, which are small enough to understand completely.
I’ve built marketing mix models for brands like Monzo, Booking.com and The AA, and none of that data could ever be published, which is the norm rather than the exception. Spend and sales by week is about as commercially sensitive as data gets, so almost every public MMM dataset is simulated. That’s less of a problem than it sounds. A simulated dataset where you know the true effects is a better teacher than a real one where you don’t, because you can check whether your model got the answer right. What you need to watch for is the opposite trap: treating a clean simulated dataset as evidence that a method works on messy real data. Every dataset below was checked against its source on 24 October 2026, including the license, and the files were opened to confirm what’s actually in them.
Preview the Vexpower MMM datasets
The previewer loads each Vexpower file directly from this site. You can see the first rows, a summary of every column (mean, min, max and missing values), a few automatic data checks and a chart of any column, split by group where the data has one. The Northstar file is the interesting one to start with, because it was deliberately broken in four ways, and all four show up in the quick checks without you doing anything. You can also load any CSV of your own, including the public datasets further down, and it’s read in your browser rather than uploaded.
Try the geo test with the chart split by arm: you can see the treatment and comparison regions moving together before the campaign and separating after it, which is the whole idea behind difference-in-differences in one picture. On the holdout dataset, plot flexible_prediction against spend and split by split to see a model that fits the training points beautifully and goes wild between them.
The four Vexpower datasets and what each one teaches
These were built for the Vexpower MMM course and the simulators on this site. Each one is small on purpose, so you can read every row and know exactly what’s in it, and each one comes with a README (datasets-README.md in the same folder) that explains how it was constructed. They’re invented data, so there’s nothing confidential in them and no reason to be precious about how you use them.
The weekly practice dataset
mmm-practice-synthetic.csv has 104 weekly rows from January 2024 to December 2025, with revenue, spend on search, social and video in the same currency unit, and a 0/1 promotion flag. That’s the minimum shape of an MMM: two years of weekly data so each season appears twice, three channels and one control. It’s what the in-browser models on what marketing mix modeling is and the Python and Excel walkthroughs use. Its limits are deliberate: it leaves out price, distribution, competitors and macro conditions that a real model would need, so it’s for learning the mechanics, not for ranking modeling methods against each other. It’s also worth knowing that the file is exactly linear with no noise: revenue is 20,000 plus 1.4 times search, 0.8 times social and 0.6 times video spend, plus a sine-wave seasonal term and 1,800 in promotion weeks, with no adstock and no saturation built in. If you fit carryover or diminishing returns to it, the model should find close to zero decay and push saturation to its bound, which is the correct answer for this file rather than a finding about how media works.
The geo experiment dataset
geo-experiment-synthetic.csv is a geo lift test in 96 rows: 12 invented regions in six matched pairs, observed for four weeks before and four weeks after a campaign. A shared trend lifts every region by eight between periods, the campaign adds a known eight to each treated region, and one treated region also runs a local promotion. That construction lets you reproduce three answers exactly: a naive before/after comparison on the treated regions says 17, difference-in-differences says 9, and the true media effect is 8. The extra 1 is the local promotion, which a shared control can’t remove. It’s exact arithmetic with no sampling noise, so it teaches the logic of a geo test rather than the statistics of one; for those, see statistical power for marketing tests.
The holdout model comparison dataset
holdout-model-comparison-synthetic.csv has 32 observations of an invented spend input and a noisy outcome. Every fourth row is held out, leaving 24 for training, and the file includes predictions from two polynomial fits trained only on those 24: a restrained degree-three curve and a flexible degree-fourteen one. The flexible fit has the lower training error and the much higher holdout error, which is overfitting in its most visible form. It’s the dataset behind the demo on MMM validation. It isn’t an MMM, and its point is narrow: good predictive accuracy is necessary but doesn’t prove that a model’s channel split is right.
The Northstar decision pack
Northstar is the invented online homeware brand that runs through the whole Vexpower course, and its decision pack is the closest thing here to a real MMM handoff. The zip contains a brief (finance has authorised £300,000 for a quarter, and the marketing lead wants to move £30,000 from search to social), a data dictionary, a messy weekly input file, a source-corrections file, planning evidence for four allocations under three social-response scenarios and two margins, a model review, a decision memo template, a marking rubric and an answer key with a verification script. The messy file is a copy of the practice dataset with 105 rows instead of 104 and four planted problems: a blank social spend cell, a search value recorded in thousands, a duplicated week and a week labeled on a Tuesday instead of a Monday. It’s the dataset I’d point anyone to who wants to practise the unglamorous part of the job, which in my experience is where most models actually go wrong. The Northstar example walks through it end to end.
Free MMM datasets from Robyn, Meridian and PyMC-Marketing
The open-source libraries all ship sample data, and it’s the data their tutorials are written against, so it’s the fastest way to get a working model before you bring your own. All of it is simulated. The table summarizes what I found in each file.
| Dataset | Source and license | Shape | What’s in it |
|---|---|---|---|
dt_simulated_weekly | Robyn, MIT | 208 weeks, Nov 2015 to Nov 2019 | Revenue; TV, out-of-home, print, search and Facebook spend; Facebook impressions; search clicks; competitor sales; events; newsletter |
dt_prophet_holidays | Robyn, MIT | 87,651 rows (CSV copy), 123 countries, 1995 to 2044 | Date, holiday name, country code and year, for Prophet’s holiday effects |
geo_all_channels.csv | Meridian, Apache 2.0 | 40 geos × 156 weeks, Jan 2021 to Jan 2024 | Impressions and spend for five paid channels, one organic channel, competitor sales and sentiment controls, promo, conversions, revenue per conversion, population |
national_all_channels.csv | Meridian, Apache 2.0 | 156 weeks | The same variables aggregated nationally |
geo_media_rf.csv | Meridian, Apache 2.0 | 20 geos × 156 weeks | Four channels, one of them with reach and frequency columns |
mmm_example.csv | PyMC-Marketing, Apache 2.0 | 179 weeks, Apr 2018 to Aug 2021 | Outcome y, two channels x1 and x2, two event dummies, day of year and a trend index |
mmm_multidimensional_example.csv | PyMC-Marketing, Apache 2.0 | 2 geos × 159 weeks, Jun 2022 to Jun 2025 | Two channels, two events and y per geo |
mmm_roas_data.csv | PyMC-Marketing, Apache 2.0 | 131 weeks, Oct 2021 to Mar 2024 | Two channels plus the true adstocked, saturated effect of each, so you can check your estimates |
case_study_data.csv | PyMC-Marketing, from sibylhe/mmm_stan (MIT) | 209 weeks, Aug 2014 to Jul 2018, 80 columns | Impressions for 13 channels, spend for 10, sales, CPI, gas price, store count, markdowns, retail holidays and seasonal dummies |
Robyn’s two datasets load in R with data("dt_simulated_weekly") and data("dt_prophet_holidays"), and the Python port keeps CSV copies in its tutorial resources folder. The column names follow a simple pattern, with an _S suffix on every spend column and _I on Facebook impressions, which makes it easy to see which variables Robyn treats as paid media. It’s a good first dataset because it has the mix of channels a real advertiser has, but there’s no regional dimension, so it can’t teach you anything about geo-level modeling.
Meridian’s files are the richest of the official samples. The geo-level file is what the getting-started notebook loads, and it’s the best public dataset for learning hierarchical, geo-level MMM, because 40 regions give the model far more variation than one national series. The outcome is conversions with a separate revenue-per-conversion column, which is how Meridian likes its inputs and worth copying in your own data. The channel names are anonymised (Channel0 to Channel4), so there’s no business story to sanity-check against.
PyMC-Marketing’s mmm_example.csv is the smallest and the easiest to read, with just two channels, and it’s what the library’s main example notebook uses. The one I’d single out is mmm_roas_data.csv, because it includes the true effect of each channel alongside the inputs, which makes it a proper test of whether a model can recover what it should. case_study_data.csv is the largest and most realistic-looking; it originally comes from Sibyl He’s mmm_stan project, whose README describes it as a more complicated, real-world setting without saying where the data came from, so I’d use it for practice with lots of channels and controls rather than as a benchmark.
Marketing mix modeling datasets on Kaggle
Kaggle has fewer genuine MMM datasets than a search suggests, and the licenses vary, so I’ve listed only the ones that are actually weekly or monthly media-and-sales data and noted what each license field says.
- Marketing Mix Modelling (MMM) dataset (Nafees Sayyed, CC0): synthetic weekly data from January 2022 to December 2025 with sales, spend on seven channels (Instagram, Google Ads, TV, YouTube, newspaper, influencer and OTT), competitor spend, a promotion field and a holiday flag. Missing values are included on purpose for cleaning practice.
- MMM Weekly Data - Geo:India (Subhagato Adak, Apache 2.0): a synthetic FMCG panel of 11,232 rows and 28 columns, covering 156 weeks from July 2022 to June 2025 across eight Indian regions, three brands and nine SKUs, with media, trade promotion, price, distribution and macro variables. It’s the most complete public panel I found for practising hierarchical models with price and distribution in them.
- Sample Media Spends Data (Yogesh Agrawal, license listed as “Data files © Original Authors”): 3,051 rows covering 26 divisions over 113 weeks from January 2018 to February 2020, with sales and views or impressions for YouTube (paid and organic), Google, email, Facebook and affiliates. Despite the name, the channel columns are exposure rather than spend, so you can’t compute ROAS from it.
- DT MART: Market Mix Modeling (Aman Miglani, license listed as “Data files © Original Authors”): order-level ecommerce sales with monthly media investment across nine channels from July 2015 to June 2016, plus NPS scores and a sale calendar. It’s good practice in aggregating transaction data to a modeling grain, but 12 months of monthly media is far too little to estimate channel effects.
You’ll also see the “Advertising” dataset everywhere, often titled as a marketing mix dataset. It’s the 200-market example from An Introduction to Statistical Learning (TV, radio and newspaper budgets against sales), and it’s cross-sectional rather than a time series, so there’s no adstock, no seasonality and nothing that behaves like a real MMM. It’s fine for learning linear regression and not much else.
How to choose a dataset for what you’re trying to learn
The right dataset depends on the skill you’re practising. To learn regression and decomposition, use something small where you can see every row, such as the Vexpower practice data or PyMC-Marketing’s mmm_example.csv; for adstock and saturation, use a file that actually has them built in, like mmm_roas_data.csv or Robyn’s demo data, because the Vexpower practice file has neither. To learn a specific library, use its own sample data first, because the tutorials, defaults and column conventions are built around it, then move your own data into the same shape. To learn geo-level and hierarchical modeling, use Meridian’s geo file or the India FMCG panel. And to test whether a method actually recovers true effects, use a dataset with the answer included, such as mmm_roas_data.csv or the Vexpower geo test, rather than one where you can only judge the fit.
To learn what a real project feels like, use the Northstar pack, because finding the blank cell, the duplicated week and the value in the wrong units is a bigger part of the work than fitting the model. When you’re ready to move to your own data, the MMM data requirements page has a sufficiency checker and a data template, and the templates page collects every workbook, brief and memo template on the site.
