Three platforms. One plan. One approver.
Plan-driven Google + Meta + TikTok ad management. Hourly budget reallocation based on attribution-engine ROAS rollups. Per-account token-bucket throttle. Approval gates for high-blast-radius actions. Every mutation snapshot-and-undo, every action audit-logged.
Three ad platforms. Three sets of dashboards. Three sets of rate-limits.
Most teams run them in parallel and reconcile in spreadsheets. The reconciliation is the bug.
"Where does each dollar go?"
Operators allocate $X to Google, $Y to Meta, $Z to TikTok manually. ROAS comparisons happen in a Looker dashboard the next day. Decisions lag.
429s eat the day.
Run a bulk update across 14 client accounts. Half the calls 429. Half succeed. State diverges. Now you reconcile by hand.
Bad bid set, no rollback.
An operator pushed bids 30% high to Meta. By the time anyone noticed, $14k was spent. No snapshot, no undo.
Plan. Allocate. Approve. Dispatch.
Every campaign action is a node in the plan DAG, gated by ROAS thresholds + approval rules.
Plan defined as DAG
Operator defines campaigns, budgets, target ROAS, approval thresholds. Plan persists as a typed graph; phases have explicit transitions.
Hourly optimizer runs
Reads attribution-engine ROAS rollups across all platforms, proposes hourly budget shifts. Recommendation-only at Pro; auto-apply at Enterprise (above approval threshold).
Gate at thresholds
Bid adjustments above plan threshold (e.g. >$500/day) route to approval queue. Full context - simulated impact, historical ROAS, traceId - surfaces in one card.
Throttled mutation
Per-account token bucket. 429 → backoff → retry. Snapshot before, audit after, undo on demand. Every mutation traces back to the plan + the approver.
Three platforms. One planner. Hourly cadence.
The exact runtime topology. Hover any node to inspect.
Three ways this earns its place.
Capability, not customer outcomes - we have none to report yet. Each of these is demonstrable in the architecture review.
Three platforms, one plan
Google, Meta and TikTok execute from a single plan, with budget reallocated hourly against attribution-engine rollups rather than each platform's own conversion count. You review the plan; the runtime executes it. Spend-affecting changes serve the 7-day dry-run first, however confident the planner is.
Reallocation on the hour, not the week
When ROAS slips on one platform mid-afternoon, the optimizer proposes moving budget to where it is holding and shows the attribution rollup it based that on. A human approves the shift. Whether hourly cadence beats your current weekly review depends on how volatile your auctions are - which is measurable before you buy.
Approval queue for high-blast actions
Bid adjustments above a $500/day threshold route to a human approver. The full plan, the simulated bid impact, and the historical ROAS context land in one card. Approver clicks once. Mutation dispatches with audit.
What's available where.
| Capability | Starter | Pro | Agency | Enterprise |
|---|---|---|---|---|
| Google Ads · read + write | ✓ | ✓ | ✓ | ✓ |
| Meta Ads · read + write · CAPI | - | ✓ | ✓ | ✓ |
| TikTok Ads · read + write · Events API | - | ✓ | ✓ | ✓ |
| Multi-platform plan DAG | - | - | ✓ | ✓ |
| Daily budget optimizer | - | ✓ | ✓ | ✓ |
| Approval queue · agency-tier | - | - | ✓ | ✓ |
| Per-account token-bucket throttle | ✓ | ✓ | ✓ | ✓ |
| Plans + ad accounts (max) | 1/2 | 20/10 | 100/50 | 999/999 |
See orchestration on your own ad accounts.
We connect to your Google + Meta + TikTok, run the optimizer in dry-mode for an hour, and walk through every recommendation with traceback to ROAS data.