Can I do MMM in Excel?
Yes, a basic one. Put about two years of weekly sales and weekly spend per channel in one sheet, add a carryover column and run Excel's Regression tool. Excel will not warn you when channels move together or choose the carryover, so treat the result as a first look.
By Joris van Huët, Founder & CEOUpdated 7 min read
Yes, a basic one, if you have about two years of weekly sales and spend. Excel's Regression tool fits it by least squares, and a formula column can add carryover. What Excel will not do is warn you when channels move together, or pick the carryover for you. Treat the result as a first look.
A marketing mix model is a regression with marketing in it. One row per week, one column for sales, one column per channel's spend, plus columns for promotions and holidays. The model splits each week's sales into a base and a share for each column.
Excel can fit that. The Regression tool in the Analysis ToolPak runs linear regression by least squares, on top of the LINEST worksheet function. LINEST also fits models that are linear in their parameters, including logarithmic ones, so a log of spend can bend the line.
On history, Meta's Robyn guide sets a floor of two years of weekly data. Google's Meridian guide wants two years for a model split by region and three for a national one.
Two free tools do more on top. Meridian's FAQ says its library is free to use and open sourced, and Robyn is open-source code from Meta's Marketing Science team. Robyn's guide calls adstock and saturation key marketing principles of MMM and builds both in. It also adds ridge regression against multicollinearity and overfitting. Meridian is a Bayesian model with the lagged effect of advertising and saturation built in. In Excel you build each of those by hand, or do without.
What one store's data shows
One store's anonymised GA4 export, 1 January 2024 to 21 August 2026. It holds shares of revenue only: no ad spend, no order counts.
| What the export shows | Share of revenue | Source cell |
|---|---|---|
| Direct, in last click, first click and touched views | 57.7% | Channels sheet, Direct row |
| Paid Social, in last click, first click and touched views | 0.0% | Channels sheet, Paid Social row |
| Touched view, all channels added up | 110.4% | Channels sheet, Touched column total |
An Excel model never sees a row of this. It sees weekly sales totals and the spend you type in. That is the whole point of a mix model, and also where the trouble starts.
Take Direct, at 57.7% of revenue in every view on the Channels sheet. Direct has no spend column. In a regression, its revenue lands where the weekly totals push it. Some goes to paid channels whose spend moved with sales, the rest to the intercept.
Robyn's guide describes that intercept as the base performance, what performance would be if all other factors were at their minimum. So the biggest number in an Excel MMM may be the one with no channel's name on it. Read it as sales you would get anyway, and you may cut the ads that keep Direct busy.
Then Paid Social, at 0.0% in all three views on the Channels sheet. The export cannot say whether this store ran none or ran it untagged. A mix model does not need tagged clicks, though. If paid social spend had moved and sales had moved with it, a regression could give it credit that GA4 never would.
And the touched view, which sums to 110.4% on the Channels sheet, because a journey that touched two channels counts in both. A regression cannot count a sale twice. It has to split every week's sales between columns, so channels that rise together fight over the same euros.
What the export cannot show: weekly sales, any spend, or how this store's channels moved week by week. Without those, there is nothing to regress.
Why does "MMM is just a regression" mislead?
Because the regression is the quick part. Four traps sit around it.
- Least squares fits coincidences too. LINEST finds the line with the smallest squared errors on the weeks you give it. It cannot know that a sale and your biggest Meta push landed in the same week. Robyn adds a ridge penalty to reduce variance at the cost of some bias; Excel adds nothing.
- A zero can mean dropped. Excel's LINEST help page says it removes fully redundant columns and shows each with a coefficient of 0 and a standard error of 0. Read that as Excel giving up on the column, not as a verdict on the channel.
- Near twins stay in and wobble. Columns that move together, but not perfectly, stay in the model. Robyn's guide says multicollinearity makes it hard for a regression to work out the impact of each one. Drop a few weeks and their coefficients can swap places.
- You choose the carryover. Robyn's guide explains a theta of 0.75 as 75% of one period's impressions carried over to the next. In Excel that rate is a number you type or tune. Tune it until the fit looks best, and you are fitting noise with extra steps.
What can an Excel model not tell you?
What happens at a budget you never spent. Meridian's docs say a fitted saturation curve rests on the observed range of media data, and results outside it call for caution. If Google Ads never went above one level, no spreadsheet knows what double looks like.
Which way the arrow points. Raise a channel when sales are already climbing, and the regression hands it the climb. A test that changes spend on purpose, such as a holdout, separates the two.
How sure to be. LINEST returns a standard error next to each coefficient. When the error is about as big as the coefficient, the effect could be close to zero.
What to do this week
- Count your weekly rows. In Shopify, open Analytics > Reports > Total sales over time and set the time unit to week in the Dimensions menu. Then export it. Pass: about two years of weeks with no gaps. Fail: less, so a holdout test will answer sooner than a model.
- Run one rough regression. Load the Analysis ToolPak under File > Options > Add-ins. Then run Data > Data Analysis > Regression, weekly sales against weekly spend per channel. Pass: each channel's coefficient is positive and bigger than its standard error. Fail: zeros, negatives or errors as large as the coefficient, so move no budget on it.
- Check which channels move together. Run Data > Data Analysis > Correlation on the spend columns. Pass: your biggest channels have weeks that move apart. Fail: two of them always rise and fall together, so plan a few weeks where one moves alone.
Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework
Sources, 1 October 2026: Use the Analysis ToolPak to perform complex data analysis (Microsoft); LINEST function (Microsoft); Load the Analysis ToolPak in Excel (Microsoft); An Analyst's Guide to MMM (Meta); Collect and organize your data (Google); An introduction to Meridian (Google); FAQs (Google); Media saturation and lagging (Google); Sales reports (Shopify); Setting and comparing time ranges for your reports (Shopify); LINEST (Google)
Related answers
Frequently asked questions
Can I build a marketing mix model in Google Sheets?
Yes, for the regression part. Google Sheets has a LINEST function that fits a least-squares line and accepts several independent columns at once. You still build the carryover and saturation columns by hand, and check for channels that move together, exactly as in Excel.Is an Excel MMM good enough to set next quarter's budget?
Not on its own. A spreadsheet regression shows which channels moved with sales in the past, with no guard against coincidences. Use it to choose which channel to test, then confirm with a holdout or lift test before you move real money.What does the intercept in an Excel MMM mean?
It is the weekly sales the model hands to no column at all. Robyn's guide calls it the base performance, with every other factor at its minimum. Read it with care, because it can hold brand demand that past ads built.
Go deeper: Causal attribution, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- AnalyticsAnalytics is the systematic computational analysis of data. It reveals customer behavior and measures campaign performance.
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- CorrelationCorrelation is a statistical measure showing a relationship between variables; it does not imply causation.
- Google AdsGoogle Ads is an online advertising platform where advertisers bid to display ads, service offerings, and product listings.
- Holdout TestA holdout test is an experiment where a portion of the audience does not see a campaign. This measures the campaign's true incremental impact.
- ImpressionAn Impression counts each time an ad or content displays on a user's screen. It measures exposure, not engagement.
- Marketing MixThe marketing mix is the set of actions a company uses to promote its brand or product. It traditionally includes product, price, place, and promotion.
- Marketing Mix ModelingMarketing Mix Modeling (MMM) is a statistical analysis that estimates the impact of marketing and advertising campaigns on sales. It quantifies each channel's contribution to sales.