Budget recommendation — AI suggestions
Last updated: May 19, 2026
Budget recommendation — AI suggestions
The Budget recommendation block in Cross-Channel mode suggests how to reallocate spend across platforms. Backed by getOptimalMixRecommendation() in apps/backend/src/services/cross-channel-analytics.service.ts. Returns MixRecommendation[]. RULE-BASED logic (not machine learning): shifts budget toward higher-ROAS platforms based on historical patterns. Use for weekly budget allocation; apply gradually (auction systems dislike abrupt changes).
Who is this for
Mediabuyers + admins making cross-platform budget allocation decisions. Especially valuable when running 3+ platforms simultaneously and rebalancing across weeks / months.
What the recommendation shows
For each selected platform:
Field | What |
|---|---|
| Platform code ( |
| Current spend (period) in |
| Current ROAS |
| Current share of cross-platform spend |
| Suggested share |
| Difference (recommended − current) |
| Suggested budget multiplier (e.g. 1.25 = +25%) |
| Current avg daily spend |
UI typically renders as a table or stacked bar comparison (current vs recommended).
How it works (the rule)
The logic is rule-based, not AI / ML:
For each platform: compute historical ROAS over the period
Rank platforms by ROAS
Compute optimal allocation that shifts budget toward higher-ROAS platforms
Cap any single-platform shift (e.g. max ±30% per recommendation) to prevent disruptive reallocation
Return current vs recommended split
No machine learning. No external data feeds. Pure historical performance.
This is deliberate:
Transparent + auditable (you can verify the math)
Predictable (same input → same output)
No training-data drift risk
Marketers retain control (rule explains itself)
How to use the recommendation
Weekly cadence
Every Monday: review the recommendation. Compare with last week's actuals. Decide:
Accept fully: apply suggested multipliers to per-platform budget caps
Accept partially: shift partway toward recommendation (e.g. half the delta)
Reject: keep current allocation (e.g. you have a strategic reason ROAS-only doesn't capture)
Apply gradually
Don't shift +50% on a platform overnight. Auction systems (Meta, Google) react poorly to abrupt budget changes — bid prices spike, audience auctions destabilize.
Apply over 2-4 days in smaller deltas (e.g. +15% Monday, +15% Wednesday, +15% Friday for a +50% total).
Compare with intuition
If recommendation contradicts your intuition: investigate. The rule sees ROAS only. Maybe:
The high-ROAS platform is small-scale (won't sustain doubled budget at same ROAS)
The low-ROAS platform has strategic value (brand reach, new market test)
Postback lag is masking real performance (see an-114)
Decide with full context.
Pair with channel comparison
Recommendation is the "what should be". Channel comparison (an-108) is the "what is". Read together.
Constraints + caveats
Period sensitivity
Recommendation uses the selected date range to compute ROAS. Shorter periods (last 7d) react fast but noisy. Longer (last 30d) stable but slower to spot drift.
For weekly cadence: last_14d is a reasonable balance.
Spend floor sensitivity
A platform with €100 spend and ROAS 5 may show "scale up" recommendation, but doubling to €200 won't necessarily preserve ROAS — diminishing returns kick in.
The rule doesn't model diminishing returns. You must.
Postback lag
ROAS within the last 24-72h is incomplete (Meta API delay, postback lag). For weekly recommendations: prefer last_14d so recent days are settled.
Strategic dimensions not captured
ROAS-only logic doesn't see:
Brand reach value (TikTok awareness today → Meta conversions next quarter)
New-market testing (intentional low-ROAS spend on a new geo)
Audience cap (you can't infinitely scale Meta — eventually you exhaust the addressable audience)
These need human judgment on top of the recommendation.
What it's NOT
To be clear about scope:
❌ NOT an AI / ML model — pure rule
❌ NOT predictive (no forecasting)
❌ NOT applied automatically (you decide whether to apply)
❌ NOT considering competitive dynamics, seasonality, or external factors
❌ NOT a substitute for Rules Engine (which acts on entity-level conditions; recommendation is allocation-level)
Connection to Rules Engine (PRD-17)
The recommendation tells you "shift more to Meta". The Rules Engine (rul-*) acts at the entity level (campaign / adset / ad). They're complementary:
Recommendation: strategic budget mix (cross-platform)
Rules Engine: tactical entity action (intra-platform)
Workflow: use recommendation weekly to set per-platform total budget caps; use Rules Engine continuously to optimize within each platform.
See rul-105 actions.
Constraints
90-day max date range (Cross-Channel limit)
10-min Redis cache
target_currency required (no native currency option)
Feature gating:
ENABLE_CROSS_CHANNEL_ANALYTICS
Common mistakes
Applying recommendation in full overnight: auction shock; apply gradually over days
Treating it as AI prediction: it's rule-based on historical ROAS only
Ignoring spend column: small-spend platforms have noisy ROAS; rule may over-recommend
Skipping postback lag check: short windows give incomplete ROAS data
Reading recommendation without channel comparison: missing context
Related
Channel comparison — current state pair
Channel mix — visual share
Rules Engine actions — tactical companion