MGID Budget Reallocator
Identifies donor/recipient pairs for daily limit shifts. Rules and formulas live here — simulator only merges results.
Tools: tool reference
Assumptions: threshold assumptions
Prerequisite: mgid-tracking-health-monitor pass.
Required inputs
| Input | Required | Default |
|---|---|---|
| Scope | Yes | campaign list from simulator scope, or all active when run standalone |
| Date range | Yes | last 7 days |
| Goal | Yes | user or from get_campaign bidding |
| Target CPA/ROAS | If needed | bidding.price when strategy=cpa, else user must supply |
There is no get_account_goals.
MCP tools
| Tool | Purpose |
|---|---|
get_portfolio_statistics |
One call — spend, conversions, CPA and profit for every campaign |
list_campaigns |
status, type, limits.dailyLimit, bidding (config) |
get_campaign |
limits detail if needed |
get_campaign_statistics |
Only for shortlisted campaigns — daily spend rows for cap-binding detection |
Rank the whole account from one get_portfolio_statistics call, shortlist the
donors and recipients, and only then spend a get_campaign_statistics call per
shortlisted campaign to tell a budget-capped winner from a bid-constrained
one. That distinction needs daily rows; ranking does not.
Donor criteria (all required)
- Active
- ASSUMPTION: avg daily spend < 85% of
limits.dailyLimitover lookback - KPI on target (CPA ≤ target × 1.1 or ROAS ≥ target × 0.9) from statistics totals
- ≥ 3 days with spend in lookback
- Tracking gate pass for this campaign
Recipient criteria — increase_budget (all required)
Recommend daily limit increase only when the campaign is budget-capped, not merely profitable:
- Active, tracking OK
- ASSUMPTION: spend ≥ 95% of
limits.dailyLimiton ≥ 5 of last 7 days (fromget_campaign_statisticsdaily rows) - CPA ≤ target × 1.1 or ROAS ≥ target × 0.9 with ≥ 10 conversions in period
- Daily limit > 0
Do not recommend increase_budget when avg daily spend < 85% of dailyLimit — budget is not the binding constraint.
Underutilized budget — increase_tcpa instead
When a campaign is under-spending (< 85% of dailyLimit) but KPI-positive (CPA on target or ROAS ≥ 100%):
- Recommend
increase_tcpa(update_campaign→bidding.price), not a budget increase - ASSUMPTION: suggest +5–15% on target CPA; cap single-step change at 15%
- Rationale: bid/target CPA is limiting auction wins, not budget headroom
Budget increase sizing (capped campaigns)
When recommending increase_budget:
- Fetch daily spend rows +
limits.dailyLimitfromget_campaign - Optional:
run_custom_reportwithdimensions: ["hour"]and metricsspent,winRateto see when the cap binds and how much demand is left on the table - Conservative cap: single-step increase ≤ 50% of current dailyLimit
- Suggested formula (ASSUMPTION):
utilization = avg_daily_spend / dailyLimitover capped days onlybase_pct = min(50, max(10, round((0.95 - headroom) * 100)))whereheadroom = 1 - utilization- If
winRate≥ 70% on capped days, allow upper half of range; if < 50%, use lower half new_limit = dailyLimit × (1 + chosen_pct / 100)
- Impact:
added_spend_daily ≈ (new_limit - dailyLimit) × min(winRate, 0.85)— mark ASSUMPTION
Matching (donor ↔ recipient pairs)
- Rank recipients by efficiency; pair with top donors
- ASSUMPTION: shift ≤ 20% of donor dailyLimit; max 3 pairs per run
- Impact:
conv ≈ shift / recipient_cpa(range ±25%) — mark ASSUMPTION
Output
Chat: summary + numbered list of proposed moves.
Return: Recommendation[] with action_type: increase_budget, increase_tcpa, or reallocate_budget.
Apply
update_campaign (write scope) — decrease donor limits.dailyLimit, increase recipient.
If write tool unavailable → blocked_by: ["mcp_tool_unavailable"].