1Context
Several products, one marketing budget
Paid search, SEO, landing pages and CRM data for a portfolio of products, each with its own dashboards, its own definition of "conversion" and its own weekly budget meeting. A small analytics team spent most of the week assembling reports rather than deciding.
2Challenge
Decisions by hand, on numbers nobody trusted
- The same metric meant different things in different reports.
- Budgets were shifted weekly on last-click data; seasonality and price elasticity were guessed.
- Nobody could tell whether a campaign for product A was stealing demand from product B, or whether paid was cannibalizing organic.
- Rule-based automations broke on every seasonal shift; bid changes lagged the market by days and overspend surfaced at month end.
3What we build
An agentic decision layer, not another dashboard
- Semantic layer: one definition of every metric, plus customer segments as shared dimensions for models, agents and reports.
- ML core: LTV, elasticity, seasonality, incrementality and de-cannibalization models per product and segment, retrained with drift monitoring.
- Agent layer: planner proposes the daily budget and bid plan, executors apply it via ad-platform APIs, auditor checks guardrails and writes the rationale, analyst answers "why did this change?".
- Landing pages: agents propose and test variants, scored by predicted value, and retire losers.
- Human-in-the-loop: marketers set goals, caps and approval thresholds; exceptions wait for a click, everything else runs with a replayable log.
- # stack · models · guardrails
- semantic_layer: dbt + metrics layer, one governed definition per metric; behavioral clustering (HDBSCAN / k-means) and segmentation exposed as shared dimensions to every model, agent and report
- ml_models: hierarchical Bayesian elasticity, BG/NBD + Gamma-Gamma and survival LTV, state-space seasonality, geo experiments and synthetic control for incrementality; feature store, scheduled retraining, drift monitoring
- agents: planner / executor / auditor / analyst roles as stateful LLM workflows with tool-calling over ad-platform APIs and the semantic layer; structured outputs, retries, idempotent actions
- guardrails: policy engine on every action (budget caps, bid bounds, pacing, brand safety), dry-run mode, approval thresholds
- optimization: constrained optimization with bandit exploration under cost caps, per segment and product
- observability: decision log with rationale and model inputs, replayable; offline evals and canary runs for agent behavior
4Outcome
Marketers set goals and guardrails; agents run the day
Budget, bids and pages move daily on incremental value instead of weekly on last click; every change comes with a written rationale, exceptions wait for a human, cannibalized spend is cut instead of celebrated — and the analytics team argues about strategy rather than about whose number is right.
daily
budget & bid decisions
1definition
of every metric
PPC · SEO · pages · revenue
−18%
cannibalized spend
paid vs organic, A vs B
−22%
CAC
blended, across products
+31%
conversion rate
landing pages scored by predicted value
−15%
marketing budget
at the same revenue, cost caps held