How Geniemix works out what really drove your sales.
Plain answers first, the method behind them second. If you're the analyst on the team, each step ends with the technical version.
Just spend and sales, by day.
We read how much you spent on each channel and how much you sold, every day. Access is read-only, so we never change a campaign. No pixels, no clicks, nothing about your customers. A year of history works; two is better.
Daily totals are rolled up to weeks. One media variable per channel (weekly spend), one target (revenue or orders).
- Google Ads
- Meta
- TikTok
- Shopify
- Stripe
| Day | Spend | Sales |
|---|---|---|
| Mon | $4.1k | $21.3k |
| Tue | $3.8k | $19.9k |
| Wed | $4.4k | $23.0k |
Sample workspace
First, the sales you'd make anyway.
Some sales happen without any ads: loyal customers, word of mouth, the season. We separate those out so channels only get credit for what they add on top.
The baseline is an intercept plus a smooth trend, yearly seasonality (Fourier terms) and holiday and promo controls.
- Would have happened anyway$8.4M
- Google Search$2.1M
- Facebook Prospecting$1.2M
- Instagram Prospecting$1.1M
- Google PMax$820k
- Others$1.2M
Sample workspace
An ad seen today can sell next week.
People don't always buy the day they see an ad. We learn how long each channel's effect lasts and how quickly it fades, so slow channels aren't undersold.
Geometric adstock per channel, with a maximum carryover of 8 weeks.
Sample workspace
More spend works, until it doesn't.
The first dollars on a channel work hardest. Past a point, each extra dollar brings back less. We find that point for every channel; it's where the plan stops adding money.
A saturation curve per channel type: logistic by default, Hill where the data supports a slow start.
Sales rise with spend and flatten as a channel fills. The pin is this week's spend. Use the arrow keys to read each point.
Sample workspace
Every number comes with a likely range.
We start from what's typical for each kind of channel, then let your data move it. The result isn't one number but a range, and we show it. When we're less sure, we say so.
Bayesian MMM (PyMC-Marketing). Priors come from a benchmark library by channel type. Sampling uses NumPyro NUTS: 4 chains × 1,000 draws after 1,000 tuning steps. Ranges are the posterior's 10th to 90th percentile.
- Google Search2.40×–3.13×
- Facebook Prospecting1.98×–2.73×
- Google PMax1.79×–2.46×
- Instagram Prospecting2.67×–3.68×
Sample workspace
We check it on weeks it hasn't seen.
Before you see any answer, we hide your most recent weeks from the model and ask it to predict them. You get a plain grade for how close it landed.
An 8-week holdout, refit on the remaining weeks. The forecast grade is Excellent when the holdout MAPE is 8% or less.
off by 0.1% on average on weeks it hadn't seen Use the arrow keys to read each point.
Sample workspace
Then it finds a better split.
Give it your budget and your limits. It moves money to where the curves say it works harder, explains each change, and once you approve, tracks how the plan is doing.
Mixed-integer optimization (SCIP) over piecewise-linear versions of the fitted curves: same total budget, your per-channel minimums, maximums and locks.
- Draft
- Approved
- Tracking
- Report
Share the plan as a PDF with your team or your agency.
Sample workspace
See what your budget is really doing.
We're onboarding a small group of brands. We reply within one working day.
Or look around the sample first