Marketing Mix Model + Budget Optimizer
Know what TikTok, YouTube and Meta actually returned - and where the next €10k should go. Response curves with honest intervals, not last-click fiction.
MMM - RESPONSE CURVES ↔ BUDGET OPTIMIZER · LIVE
spend per channel, €k / quarter → · dashed = fitted knee · band = 90% credible
Budget €120k / quarter · unchanged
How it works
Last-click hands the credit to whoever stood closest to the conversion. This measures what actually moved the outcome, using the only data that survives cookie deprecation: your own spend and your own results.
Spend and outcomes, weekly
Weekly spend per channel, revenue or conversions, and the things that move sales and aren't ads: seasonality, promotions, price changes, LT holidays. Aggregate numbers only - no cookies, no user-level data, nothing to consent-manage.
Adstock and saturation
Ads don't work instantly and don't scale forever. Geometric adstock models the carryover into later weeks; Hill saturation models the point where another euro into TikTok stops buying anything. Those two curves are the model - the rest is bookkeeping.
Bayesian, so the answer has a range
Fitted in the PyMC-Marketing / Meridian lineage, so every channel's return arrives with a credible interval. "YouTube returned 2.1x, ±0.7" is a sentence you can plan against. "YouTube ROI is 2.1x" is a sentence somebody made up.
The optimizer moves the money
Constrained optimization over the fitted curves: maximize return against your total budget, channel minimums and contract commitments. The output isn't a dashboard - it's a reallocation you can act on Monday.
The Four Guarantees™ - this build
Measured value
Time-series cross-validation on held-out weeks, and where you can run one, a geo-lift or holdout test that checks the model's return claim against reality. Eval gate before ship: if it can't beat a seasonal baseline on your own history, we say so out loud.
Defensible
Every run versioned - data snapshot, priors, fitted curves, optimizer constraints - in a tamper-evident hash-chained audit log, with Annex IV regenerated each time. When the CFO asks why €40k moved from Meta to YouTube, the answer is a curve with an interval on it.
Self-correcting
Refit every cycle as new weeks land. Drift alerts when a channel's response curve shifts under you: platform algorithm change, creative fatigue, a competitor showing up. Lift-test results feed back as priors, so the model gets less wrong every time you test.
Yours & everywhere
One container, your cloud, full source handover. MCP tools so your agents can ask "what's the marginal return on TikTok right now" and get the current curve instead of last quarter's slide.
The claims, sized honestly
Reference buyer: LT/Baltic advertiser running 3-6 channels with two-plus years of weekly history and no honest read on incrementality.
Three ways to own it
| Tier | What you get | Price | |
|---|---|---|---|
| Scaffolding ★ | The full repo - adstock and saturation transforms, the Bayesian MMM, the budget optimizer, eval gate, audit log, MCP server. Fitted on a synthetic spend dataset so you can read the code and the curves before your data moves. You own the source. | €1,990 | |
| PoC ★★RECOMMENDED | Fitted on your real spend and revenue history. Channel returns with credible intervals, response curves, and a proposed reallocation - validated on held-out weeks. Full code and the quality report are yours. No performance guarantee at this stage, by design. | from €6,000 | |
| Implementation ★★★ | Production: wired to your ad platform exports and revenue data, refit every cycle, optimizer running under your budget constraints, drift alerts, monthly report - and where you run lift tests, the model gets checked against them. The agreed number (conservative) attaches here. | from €18,000 |
★ = engagement depth. PoC is the recommended path: quality proven on your data before production money. The PoC carries no performance guarantee by design; the agreed number (conservative) attaches at Implementation, informed by the PoC report.
The same engine, pointed at your budget
What we don't promise
Ready to see your own number?
Request the build: within 48h you get a personal reply with the value sized to your volume.
No commitment · reply within 48h · your data stays in the EU