Budget optimizer
Why this matters for your business
Most ad spend is allocated weekly at best, monthly at worst. "Meta gets $20K, Google gets $15K, TikTok gets $5K." A campaign that's underperforming burns through its $20K for the rest of the month before anyone notices and rebalances. A campaign crushing it stays bottlenecked at its allocation when scaling it would print money.
The budget optimizer rebalances continuously. Every hour, it reads ROAS across every campaign and every platform; if a campaign is over-performing the target by 30%, it shifts more budget to it; if a campaign is under-performing by 40%, it throttles. Within guardrails you set, the system makes hundreds of small adjustments per day — adjustments your team would never make manually.
The result: same total budget, ~25% better ROAS. The same money spent more wisely.
What this typically unlocks
| Outcome | Result |
|---|---|
| Cross-platform ROAS at flat budget | +25% typical lift |
| Time spent on weekly budget rebalancing | 0 (was ~3h/week) |
| Wasted spend on saturated campaigns | −40% |
| Velocity of scaling winners | same-day vs. weekly |
| Surprise overspend incidents | near 0 with budget gates |
What you actually get
| Capability | Description |
|---|---|
| Hourly ROAS read | Across every campaign on every connected platform |
| Within-platform reallocation | Move budget between campaigns on Meta, etc. |
| Cross-platform reallocation | Move budget from Meta → TikTok if TikTok ROAS is winning |
| Budget gates | Hard caps that the optimizer will never exceed |
| Manual approve mode (default) | Suggestions surface; you click approve |
| Auto-approve within bounds (Agency+) | Auto-execute changes ≤ X% of total spend per day |
| Audit log | Every reallocation logged with reasoning |
| Pause / disable | One-click revert to baseline |
How it works
What you set up once
| Setting | Purpose |
|---|---|
| Target ROAS per goal | "Acquisition campaigns target 3×; retargeting 5×" |
| Total budget per period | Daily / weekly / monthly cap; never exceeded |
| Per-platform min/max | "Meta no more than 60% of spend; TikTok at least 10%" |
| Per-campaign min | "Brand-awareness campaign always gets at least $100/day" (protects strategic spend) |
| Mode | Manual approve / auto within X% / fully auto (Agency only) |
| Reallocation aggressiveness | Conservative (slow drift) / standard / aggressive |
Reallocation in action (example)
Day 0 baseline:
- Meta acquisition: $200/day (ROAS 4.2× — at target)
- Meta retargeting: $100/day (ROAS 6.1× — over target)
- Google search: $150/day (ROAS 3.8× — at target)
- TikTok awareness: $50/day (ROAS 2.1× — under target)
Day 1 (after one day of optimizer):
- Meta acquisition: $200/day (no change)
- Meta retargeting: $130/day (+$30) — outperforming
- Google search: $160/day (+$10) — slight outperform
- TikTok awareness: $10/day (-$40) — throttled, will reassess in 7d
Total daily: $500 (unchanged). Reallocation: $40 moved from underperformer to overperformers.
Over a month: ~$1,200 of "wasted" TikTok spend redirected to campaigns earning 4-6×. Net: ~$3,600 more revenue at flat budget.
Holdout-based validation (Agency+)
A 5-10% always-on holdout on the optimizer itself lets you measure the optimizer's incremental value:
| Period | Cohort | Avg ROAS |
|---|---|---|
| Q1 2026 | Treatment (optimizer ran) | 4.4× |
| Q1 2026 | Holdout (manual baseline) | 3.5× |
Lift = +0.9× ROAS = +25.7% at the same total spend. That's the optimizer's actual contribution, not just an attribution claim.
Real merchant scenarios
Scenario A — DTC brand sees +28% ROAS in 90 days
Setup. $40K/month ad spend across Meta + Google. Manual reallocation weekly.
Switched to optimizer in manual-approve mode. Reviewed suggestions daily for first 2 weeks; trusted thereafter.
Result over 90 days:
- ROAS: 3.6× → 4.6× (+28%)
- Spend: $40K/month (unchanged)
- Daily ROAS variance: tightened (high days less high, low days less low — optimizer smooths)
Scenario B — Agency runs auto-approve for clients
Setup. Agency tier, manages 12 brands. Configured each client's optimizer in auto-approve mode with ±20% daily cap.
Operational gain: Agency staff spend ~30 min/day per client on ads (reviewing optimizer decisions in audit log) vs. 2-3 hours/day pre-optimizer.
Per-client lift: Average +22% ROAS across the portfolio.
Scenario C — Brand catches a runaway campaign before it ran away
Setup. New campaign launched, optimizer in manual mode.
Day 1 of campaign: Suggestion appeared: "Throttle this campaign by 80% — ROAS 0.4× vs. target 3×."
Investigation: Campaign was targeting wrong audience due to typo in saved audience definition.
Result: Caught at $80 wasted instead of $1,500. Audience fixed, campaign relaunched. Optimizer's daily check is the canary.
Best practices
✅ Start in manual-approve mode for the first month. Build trust by reviewing suggestions; flip to auto-approve when you trust the rebalancing.
✅ Set per-campaign minimums for strategic spend (brand awareness, new-market tests). Without minimums, the optimizer will starve them in favor of attribution-rich performance campaigns.
✅ Use holdouts to prove the lift — especially if justifying the platform internally.
✅ Review the audit log weekly — not the dashboard. The log tells you why changes happened; the dashboard only shows what happened.
❌ Don't run optimizer on a campaign without enough data. Below 100 conversions, ROAS is noise — the optimizer respects this and won't act on low-data campaigns, but verify before launching.
❌ Don't override the optimizer's throttle suggestions manually. If the system says "this campaign isn't earning," investigate why before re-pushing budget at it.
❌ Don't set aggressive mode on day 1. Conservative for first 30 days; standard thereafter unless you have a reason.
Plan tiers
| Capability | Free | Starter | Pro | Agency | Enterprise |
|---|---|---|---|---|---|
| Hourly ROAS monitoring | — | — | ✓ | ✓ | ✓ |
| Manual-approve mode | — | — | ✓ | ✓ | ✓ |
| Within-platform reallocation | — | — | ✓ | ✓ | ✓ |
| Cross-platform reallocation | — | — | ✓ | ✓ | ✓ |
| Budget gates | — | — | ✓ | ✓ | ✓ |
| Auto-approve mode | — | — | — | ✓ | ✓ |
| Holdout-based validation | — | — | — | ✓ | ✓ |
| Custom optimization rules | — | — | — | — | ✓ |