Rules compare averages
“If ROAS > 4, add 20%.” Yesterday’s average decides tomorrow’s budget — but an average says nothing about what the next pound will do.
Rule-based optimisers compare yesterday’s averages — so they plateau. ROASt fits a response curve to every campaign’s own history and moves each pound to its highest marginal return. Then it checks its own predictions against what actually happened, every night.
Every rules engine eventually hits the same wall — and it’s mathematical, not a missing feature.
“If ROAS > 4, add 20%.” Yesterday’s average decides tomorrow’s budget — but an average says nothing about what the next pound will do.
Every campaign saturates. The first £100 buys cheap conversions; the last £100 fights for expensive ones. Two campaigns with identical averages can hide wildly different headroom.
The real question is never “which campaign is best” — it’s “where does the next pound return most”. That’s a calculus problem, not a rules problem.
Every signal is computed from your last 91 days of daily campaign data, recent days weighted more heavily. The pipeline is fully deterministic — every decision is the product of signal maths, not a model that guesses.
The primary scoring signal. Revenue over spend, with more weight on recent performance — exponential decay, half-life configurable (default 14 days).
Response curves fitted nightly from your spend-vs-revenue history. The blend weight ramps with curve confidence — low-confidence curves are ignored, never trusted.
Impression share lost because the daily budget ran out — proven demand going unserved. These campaigns earn a growth tilt proportional to their efficiency.
Bids too low, not budget too small. These campaigns get target nudges (tROAS / tCPA) to improve auction rank — not more money.
Data coverage (40%), conversion volume (35%), ROAS stability (25%). Low-confidence campaigns blend toward the portfolio average — neither over-allocated nor starved.
Recent 7-day ROAS against the prior 14 days, winsorised to cap outliers and dampened by volatility — so spikes get verified, not chased.
Spend up while ROAS falls is a saturation signal — allocation dampened by up to 50%. Disabled during promos so expected demand shifts aren’t misread.
The latest days are always incomplete. Recent revenue is scaled by a completeness curve so the engine never over-indexes on partial data.
Each campaign carries per-day multipliers learned from its own history — scored against tomorrow’s day, because a change staged today takes effect tomorrow.
The Pacer distributes what’s left of the monthly budget across the remaining days — recalculated on every run, with pinnable per-day multipliers. Spend is shaped intentionally, not front-loaded by default.
A configurable slice of the daily budget (default 10%) is held back, and campaigns bid for it on signal strength. A sigmoid liquidation curve deploys it — strict early in the month, relaxing toward month-end so nothing underspends.
Promo-aware: during events the engine normalises the expected demand uplift, widens its anomaly thresholds, and cools down for four days afterwards — a sale reads as a sale, not as genius.
Most optimisers never look back. ROASt records what it predicted, waits for attribution to complete, then scores itself against what actually happened — and adjusts.
When recommendations are staged, the engine records its predictions — ROAS, spend utilisation, impression share lost to budget, confidence.
It waits for attribution to complete. The window is dynamic: small changes use the base lag; large increases get extra days for smart bidding to ramp.
Predicted-vs-actual updates the engine’s calibration biases — spend ceilings, ROAS floors, confidence dampening, saturation steepness.
Learned values blend toward safe defaults until evidence accumulates (5–20 observations). The engine earns its confidence — it doesn’t assume it.
Dormant portfolios revert toward defaults with a 14-day half-life, so automation that’s been off restarts cautiously instead of acting on stale beliefs.
The engine is pure math with no LLM involvement — wrapped in safety layers trained on how each ad platform actually behaves.
Every recommendation is staged and visible before anything is pushed. Review, adjust and approve — or let trusted portfolios run nightly. Nothing happens behind your back.
After every push, ROASt reads the values back from the platform API to confirm the changes actually landed. Discrepancies are logged and surfaced — never assumed away.
Per-run step limits plus rolling cumulative caps, with an asymptotic throttle as changes approach the platform maximum — no budget flicker.
Google learning-phase locks. Meta ASC 48-hour dwell. Microsoft ghost-budget freezes. Platform adapters are the final safety layer, tuned to each platform’s learning mechanics.
A per-workspace kill switch halts automation instantly — and repeated failures trip it automatically. Dry-run mode stages everything and pushes nothing.
AI writes briefs and answers questions. Every budget and target decision is deterministic signal math — reproducible, auditable, explainable.