How to Run Media Mix Modeling with Just a CSV Export
You do not need Snowflake, BigQuery, or a dedicated data engineering team to run media mix modeling. You need a CSV file with your weekly marketing spend by channel and your weekly revenue. That is the entire data requirement.
This guide walks through the practical steps: what to export from each ad platform, how to structure your data, common pitfalls that produce bad results, and how to run the analysis in MCP Analytics.
What you will end up with: A single CSV file with one row per week, columns for each channel's spend, and a revenue column. Upload it, run media mix modeling, and get channel contribution analysis, saturation curves, and budget optimization recommendations in a few minutes.
Step 1: Decide on Your Time Period and Granularity
Before exporting anything, make two decisions:
How far back? You need at least 26 weeks (6 months) of data. 52 weeks is ideal because it captures full seasonality — holiday spikes, summer slowdowns, back-to-school periods. If you have 2 years of data, even better. More data gives the model more variation to learn from.
What granularity? Weekly is the standard for MMM. Daily data has too much noise (random day-to-day fluctuations drown out the channel signal). Monthly data has too few data points (12 months = only 12 rows, which is not enough for regression). Weekly strikes the right balance: enough data points, enough signal.
Recommended Setup
Time period: Last 52 weeks (1 year)
Granularity: Weekly (Monday-Sunday or Sunday-Saturday, pick one and be consistent)
Minimum viable: 26 weeks across 3+ channels
Step 2: Export Spend Data from Each Ad Platform
You need weekly spend from every paid channel. Here is how to export from the most common platforms:
Google Ads
- Log into Google Ads, go to Reports (or Campaigns)
- Set the date range to your chosen period
- Add the Week segment (under Time)
- Include the Cost metric
- If you run Search, Display, and Shopping separately, export each campaign type — you may want to model them as separate channels
- Download as CSV
Facebook / Meta Ads
- Go to Ads Manager > Ads Reporting
- Set your date range
- Under Breakdown, select By Time > Week
- Make sure Amount Spent is in your columns
- Export as CSV
LinkedIn Ads
- Go to Campaign Manager > Performance
- Set date range, choose Weekly view
- Export the report — Total Spent is the column you need
Email Marketing (Mailchimp, Klaviyo, etc.)
Email spend is trickier because most email platforms do not charge per send in a way that maps to weekly spend. Two approaches:
- Monthly subscription cost spread evenly: If you pay $200/month for Klaviyo, assign $50/week (or $200 to the first week of each month and $0 to others — this creates variation the model can use).
- Send volume as a proxy: Use number of emails sent per week as the "spend" variable. The model will estimate revenue per email send instead of revenue per dollar, which is still useful.
Other Channels
- Podcast sponsorships: Assign the cost to the week the episode aired
- Influencer campaigns: Assign the cost to the week the content was posted
- TV/Radio: Use GRP data if available, or assign spend to the weeks the ads ran
- SEO: You can include SEO spend (agency fees, content creation costs) or leave it out — organic search is typically captured in the baseline
Step 3: Get Your Revenue or Conversion Data
You need the outcome metric at the same weekly granularity. Options:
- Shopify: Go to Analytics > Reports > Sales over time. Set to Weekly. Export.
- Stripe: Go to Reporting > Revenue. Download as CSV with weekly breakdown.
- Google Analytics: Conversions or revenue by week. Export from GA4.
- Your accounting system: Weekly revenue from QuickBooks, Xero, or wherever you track it.
Use whichever metric best represents "business results" — total revenue, online revenue, number of new customers, number of conversions. Pick one and be consistent.
Step 4: Combine Everything into One CSV
This is the most important step. Take all your exports and combine them into a single spreadsheet with this structure:
| week_start | google_ads_spend | facebook_spend | email_spend | linkedin_spend | revenue |
|---|---|---|---|---|---|
| 2025-04-07 | 2400 | 1800 | 150 | 600 | 42000 |
| 2025-04-14 | 2600 | 1500 | 150 | 800 | 45000 |
| 2025-04-21 | 2200 | 2000 | 200 | 600 | 39000 |
| ... (26-52 more rows) | |||||
Rules for the CSV:
- One row per week. Every channel and revenue on the same row for that week.
- No gaps. Every week in your range needs a row, even if spend was zero on some channels. Use 0, not blank.
- Consistent units. All spend in the same currency. Revenue in the same currency.
- Column headers. Use clear, descriptive names.
google_ads_spendis better thanChannel1. - Date format. Use
YYYY-MM-DDfor the week start date.
Pro tip: You can add optional columns that improve the model: is_holiday (1 or 0), is_promotion (1 or 0), competitor_event (1 or 0). These help the model separate marketing effects from external factors. Not required, but they make the results more accurate.
Step 5: Check Your Data Before Uploading
Before running the model, do a quick sanity check:
- Do you have enough rows? At least 26, ideally 52+.
- Do you have enough channels? At least 3 channels with meaningful spend. Two channels can work but the model has less to work with.
- Is there variation in spend? If you spent exactly $2,000 on Google Ads every single week, the model cannot estimate Google's effect — it needs variation (weeks where you spent more, weeks where you spent less) to measure the relationship between spend changes and revenue changes.
- Are there any obvious data errors? A week showing $500,000 in Facebook spend when your typical week is $2,000 is probably a data export error. Fix it before uploading.
- Is revenue reasonable? Check for weeks with $0 revenue (business closed?) or extreme spikes (a different product launch?). These are not necessarily errors, but the model treats every row the same, so outliers influence the estimates.
Step 6: Run the Analysis in MCP Analytics
With your CSV ready:
- Upload your CSV to MCP Analytics (drag and drop or file picker)
- Describe your analysis: "Run media mix modeling on this data. The spend columns are google_ads_spend, facebook_spend, email_spend, and linkedin_spend. The outcome column is revenue."
- MCP Analytics handles the rest: validates data quality, fits the regression model with adstock transformations and saturation curves, checks statistical assumptions, and generates an interactive report
The report includes:
- Channel contribution breakdown: What percentage of revenue is driven by each channel vs. your baseline (organic demand)
- ROAS by channel: Incremental return on ad spend for each channel — the true ROAS, not the platform-reported number
- Saturation curves: Where each channel hits diminishing returns — the spend level beyond which additional dollars produce less and less incremental revenue
- Budget optimization: Given your current total spend, what reallocation across channels would maximize total revenue
- Model diagnostics: R-squared, residual analysis, multicollinearity checks — so you know how much to trust the results
Upload Your Marketing Spend CSV
Have your data ready? Upload it to MCP Analytics and get channel contribution analysis, saturation curves, and budget optimization in minutes. No code, no data warehouse, no consulting engagement.
Common Pitfalls and How to Avoid Them
Pitfall 1: Not Enough Spend Variation
If you always spend the same amount on a channel, the model cannot estimate its effect. The fix: natural budget changes work in your favor. Campaign launches, seasonal adjustments, budget tests, and paused campaigns all create the variation MMM needs. If a channel has zero variation, consider excluding it and noting that its contribution is unmeasured.
Pitfall 2: Mixing Granularities
Your Google Ads data is weekly but your email data is monthly. Do not mix them. Convert everything to weekly before combining. For monthly data, divide by the number of weeks in the month — imprecise, but consistent.
Pitfall 3: Ignoring Lagged Effects
Some channels have immediate impact (search ads — someone clicks, they buy). Others have delayed impact (brand advertising — awareness builds over weeks). MMM handles this through adstock transformations, which model the carryover effect. MCP Analytics applies these automatically, but you should understand that a channel showing low immediate ROAS might have significant lagged contributions.
Pitfall 4: Too Few Data Points
With 15 weeks of data and 5 channels, you have 15 data points and 5+ parameters to estimate. The model is overfit — it will produce numbers, but they will not generalize. The rule of thumb: you need at least 5-10 data points per channel. With 5 channels, that means 25-50 weeks minimum.
Pitfall 5: Confusing Correlation with Causation
If you always increase Facebook spend during holiday weeks (when revenue naturally peaks), the model might attribute some of the holiday revenue to Facebook. Adding an is_holiday control variable helps separate the two effects. MMM improves with better controls for external factors.
What Good Results Look Like
A useful MMM output will show:
- A meaningful baseline. Typically 40-70% of revenue comes from baseline (organic demand, brand, repeat customers). If the model says 95% is baseline and marketing drives only 5%, either your marketing truly has minimal impact or the model lacks enough variation to detect it.
- Differentiated channel ROAS. If every channel shows exactly the same ROAS, something is off. Channels have different economics — search typically has higher immediate ROAS than display, and email typically outperforms paid social on a cost basis.
- Reasonable saturation points. If the model says Facebook never saturates even at 10x your current spend, the confidence interval is probably too wide. Good saturation curves show diminishing returns starting at a plausible spend level.
- Model diagnostics that pass. R-squared above 0.7 (the model explains most of the variation), no severe multicollinearity between channels, and residuals that look random (not patterned).
Frequently Asked Questions
What data do I need for media mix modeling?
Weekly spend by channel (Google Ads, Facebook, email, etc.) and weekly revenue or conversions — all in one CSV. At minimum, 26 weeks of data across 3+ channels. Optional extras: holiday flags, promotion dates, and any major external events that affected your business.
Can I run MMM from Google Sheets or Excel exports?
Yes. Export your spreadsheet as CSV. MCP Analytics accepts standard CSV format. The key requirement is one row per week with columns for date, each channel's spend, and your revenue or conversion metric. Save as .csv and upload.
How do I export spend data from Google Ads and Facebook?
Google Ads: Reports section, add Week segment and Cost metric, download as CSV. Facebook Ads Manager: Ads Reporting, set weekly breakdown, export with Amount Spent column. Then combine both into a single spreadsheet with one row per week.
How many weeks of data do I need for reliable results?
Minimum 26 weeks (6 months). Ideal is 52-104 weeks (1-2 years). More data captures seasonality and gives the model more variation. With fewer than 26 weeks, the model may run but confidence intervals will be wide — directionally useful but not precise enough for confident budget reallocation.
Try MCP Analytics Free
Media mix modeling, regression, forecasting, and 50+ validated statistical methods. Upload a CSV and get results in minutes. Free plan includes 25 analyses per month.