How to check if you have enough data for MMM, step by step
Count your weekly sales rows in Shopify and your weekly spend in Google Ads and Meta. Check that each channel's spend moved and is big enough to matter, then divide rows by inputs. Under ten rows per input, merge or drop channels before you build a model.
By Joris van Huët, Founder & CEOUpdated 8 min read
Usually you check four counts: weeks of sales, weeks of spend per channel, how much that spend moved, and the number of inputs to estimate. Pull the weeks from Shopify, Google Ads and Meta, then divide rows by inputs. If you land under ten rows per input, cut or merge channels before you model.
The count is cheap next to a model. Do it first, because it tells you whether a model is worth building at all. The reasoning behind each number sits in the plain answer.
Step by step
- Decide whether you can model by region. Meridian's rule of thumb is two years of weekly data for a geo-level model and three years for a national one. A regional model needs sales and spend split the same way every week. Path: Meridian docs, Collect and organize your data, Timeframe.
- Count your weekly sales rows in Shopify. From your Shopify admin, go to Analytics > Reports, click the Category filter and click Sales. Open Total sales over time, set the date range to your full history and pick week in the configuration panel's Dimensions menu. Path: Analytics > Reports > Total sales over time > Dimensions.
- Export the weeks and drop the open one. Click the report's export option, choose CSV in the Export report dialog and click Export. Leave out the current week, which Shopify marks as in progress until it ends. Path: Analytics > Reports > your report > Export.
- Pull weekly spend from Google Ads. On the Campaigns page, select the segment icon, then Time, then Week. Then use the download icon in the upper right corner above the table and choose Excel CSV. Path: Campaigns > segment icon > Time > Week, then the download icon.
- Pull weekly spend from Meta. Select the campaigns in Ads Manager and click the Breakdown icon. Under By time, choose week, one of the time breakdowns Meta's reporting help lists. Path: Ads Manager > Breakdown > By time.
- List every channel you might model. In GA4, open Reports > Acquisition > Traffic acquisition, whose default dimension is Session default channel grouping. Write down each channel with real traffic or spend: the paid ones, email and organic social. Path: Reports > Acquisition > Traffic acquisition.
- Count the controls too. Every promotion flag, price index and holiday marker is an input the model has to estimate. Each one costs rows, exactly like a channel does. Path: your promotion calendar.
- Divide rows by inputs. Robyn's rule of thumb is ten weekly rows for every input. Meridian runs the same check as data points per model parameter, and counts its knots for time trends as parameters too. Path: Robyn docs, An Analyst's Guide to MMM, Data sparsity.
- Test each channel for variation. Sort each channel's weekly spend and compare its busiest stretch with its quietest. Meridian's guide says insufficient variation in media spend hurts national models. Path: the Google Ads and Meta files from steps 4 and 5.
- Test each small channel for volume. Ask Robyn's question: could this activity move total sales on its own? If not, Robyn's guide suggests leaving it out, and Meridian suggests merging low-spend channels with others. Path: Robyn docs, An Analyst's Guide to MMM, Data variation/volume.
- Check whether the regions line up. Shopify's Total sales by billing location splits sales by the country or region of the billing address. Google Ads shows Matched locations under Campaigns > Insights & reports > When and where your ads showed. Meta's reporting can break results down by Country or Region. Path: those three reports.
A worked example
Start with one store's export. Store A covers 1 January 2024 to 21 August 2026, about 137 weeks. As weekly rows, that span would pass Robyn's two-year floor and miss Meridian's three-year national bar. But the export holds revenue shares for the whole period, not weeks. Step 2 has to come from Shopify, and steps 4 and 5 from the ad accounts.
Its Journeys sheet still shapes the count. Journeys with 2 to 3 touches took 12.5 days to buy on the Journeys sheet, and journeys with 10 or more touches took 16.0 days. A carryover of about two weeks adds at least one parameter per channel that the simple count leaves out. Treat any ratio you get as a best case.
For illustration, now take a different store with 120 weekly rows of sales in one country. Say it runs six paid channels: Google Search, Google Shopping, Meta prospecting, Meta retargeting, TikTok and a podcast. It also sends email, posts on Instagram and logs promotions, price changes and holidays. If you count them up, that makes 11 inputs.
If you apply Robyn's ten-to-one rule, 11 inputs want 110 rows, and 120 rows scrape through. Then the last two tests bite.
For illustration, say Google Search spend sat at one level all year, so it fails the variation test. Say the podcast ran for a handful of weeks on a small budget, so it fails the volume test. And say the two Meta lines always moved together, which Robyn's guide warns makes their effects hard to separate.
Robyn's guide suggests leaving out data without enough variation and volume, so Google Search and the podcast go. The two Meta lines merge into one. If you count again, that leaves 8 inputs, or 15 rows each.
That clears Robyn's ten-to-one rule with room to spare. The example store's history is still short of Meridian's three years for a national model, though. So treat the eight-input model as a rough guide, and run a holdout test on the biggest channel before moving real money.
What to check when the count looks wrong
- Google Ads asks you to download instead. A long date range can be too much for the table. Google's help says you may get a message telling you to download a report, so do that.
- The regions do not mean the same thing. Shopify's billing location is where the buyer is billed. Meta's geography reflects where people live or were when they saw the ad, depending on your targeting. Google's matched locations can be physical locations or locations of interest.
- A region barely sells. Meridian's guide advises excluding geos with a low volume of observations before you fit the model. Leave them out of the regional count.
- The history is long but the business changed. Start the count at your last big change in prices, channels or tracking, not at your first sale. Robyn's guide names shifts in marketing practice and ad platform changes as reasons to weigh recency.
- The weekly spend has gaps. A week when a channel was paused is a zero. A missing week of sales needs an estimate, and Meridian's guide warns that filling it with zero will skew the model.
What to do this week
- Download every week of Google Ads cost you have. On the Campaigns page, segment by Time, then Week, for your full history, and download the table. Pass: a value for every week, zeros included. Fail: missing weeks or one flat line, which a model cannot learn from.
- Write your input list and divide. List every paid channel, organic input and control, then divide your Shopify weekly rows by that count. Pass: 10 or more rows per input. Fail: fewer, so merge or drop the smallest channels and count again.
- Compare one month of regions. In Meta's Ads Reporting, break last month's results down by Region. Then open Total sales by billing location in Shopify for the same month. Pass: both list the same regions with real volume. Fail: they do not line up, so plan a national model and three years of weeks.
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: An Analyst's Guide to MMM (Meta); Collect and organize your data (Google); Amount of data needed (Google); Sales reports (Shopify); Setting and comparing time ranges for your reports (Shopify); Exporting reports (Shopify); Use segments in your tables (Google); Create, save, and schedule reports from your statistics tables (Google); View matched locations and distance reports (Google); Navigate to breakdowns in Meta Ads Manager (Meta); About breakdowns, metrics and filtering in Meta Ads Reporting (Meta); Traffic acquisition report (Google)
Related answers
Frequently asked questions
Should each campaign count as its own input?
No. Meridian models media at channel level, and its guide says to sum the spend and the execution metric, such as impressions, across a platform's campaigns. Five Meta campaigns become one Meta column. Keep a platform split in two only if the parts move independently.Do promotions and holidays count against my data limit?
Yes. Robyn's ratio counts every independent variable, not only media. A promotion flag, a price index and a holiday marker each take rows like a channel does. Meridian counts its knots for time effects too, and suggests dropping controls that are not true confounders.How do I know if a channel is too small to model?
Ask whether it could move your total sales on its own. That is Robyn's volume test, and if the honest answer is no, the model will struggle to find any effect. Robyn's guide suggests leaving such data out, and Meridian suggests combining low-spend channels.
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.
- Google AdsGoogle Ads is an online advertising platform where advertisers bid to display ads, service offerings, and product listings.
- Google ShoppingGoogle Shopping is a Google service allowing users to search for products and compare prices from online retailers.
- 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.
- IncrementalityIncrementality measures the true causal impact of a marketing campaign. It quantifies the additional conversions or revenue directly from that activity.
- Incrementality TestingIncrementality Testing measures the additional impact of a marketing campaign. It compares exposed and control groups to determine causal effect.
- RetargetingRetargeting is online advertising that targets users who have previously interacted with your website or content. Attribution analysis shows the causal role of retargeting in driving conversions and improving ad spend.