create_budget_group
Create or update advertising budget and spending allocation.
Writes campaigns
Creates or changes something in the account. Put it behind whatever review your agent uses.
What it does
Create or update advertising budget and spending allocation.
Set up budget groups to control how much money campaigns can spend.
ALSO KNOWN AS: set budget, allocate spend, create spending plan, budget allocation, ad budget, campaign budget
KEYWORDS: budget, spend, spending, money, dollars, $, quarter, monthly, allocation, cost, funds, cap, limit
SUPPORTED TYPES:
- Lead Generation (default): goal=CPL, groupMetric=CPL, optimizerFormula=CPL_2 (or CPC_2), autoPauseConfigurationId=14, enableBooster=true. Requires benchmark, groupMetric, startDate, endDate.
- Brand Awareness: goal=CTR, autoPauseConfigurationId=9, enableBooster=false, budgetType=MONTHLY_RESET. Two formula variants:
• CPC variant: groupMetric=CPC, optimizerFormula=CPC_2 (benchmark is a CPC target, e.g. 10)
• CTR variant: groupMetric=CTR, optimizerFormula=CTR (benchmark is a CTR target in basis-points style, e.g. 10000)
budgetRedistributionStrategy may be PERFORMANCE or PACING_ONLY. Omit startDate/endDate.
⚠️ BUDGET-GROUP TYPE MUST FOLLOW THE CAMPAIGN GOAL (do not mix):
- A CPL / Lead Generation campaign (campaignType "Lead Gen") REQUIRES a Lead Generation (CPL) budget group: goal=CPL, groupMetric=CPL, optimizerFormula=CPL_2, enableBooster=true, autoPauseConfigurationId=14.
- A Brand Awareness campaign (campaignType "Brand Awareness") REQUIRES a Brand Awareness budget group: goal=CTR, enableBooster=false, budgetType=MONTHLY_RESET, autoPauseConfigurationId=9 (CPC or CTR formula variant per SUPPORTED TYPES above).
- NEVER attach a Brand-Awareness (CTR) budget group to a CPL campaign, or a Lead-Generation (CPL) budget group to a Brand Awareness campaign — the optimizer goal must match the campaign's objective. If the campaign goal is unknown, confirm it before creating the budget group.
To UPDATE: include 'id' field with the budget group ID.
To CREATE: omit the 'id' field.
Pass all fields inside the `data` object. Dates must be ISO 8601 UTC with exactly 3 ms digits, e.g. 2026-01-15T12:00:00.000Z (format example only — compute the real values).
⚠️ CRITICAL DATE RULES:
- You do NOT inherently know today's date. If you are not already certain of it, call get_current_date FIRST and anchor every rule below to that real value — never guess.
- The endDate MUST ALWAYS be in the future (strictly after today's real date).
- NEVER set an endDate that is today or in the past — this will cause the budget group to be immediately expired.
- "this month" → endDate = the last day of the current month. "this quarter" → endDate = the last day of the current quarter. "next month" / "next quarter" → compute relative to today's real date.
- If the user provides a specific end date that is in the past, WARN THEM and ask for a valid future date. Do NOT submit a past endDate.
- startDate can be today or in the future, but never in the past for new budget groups.
REMARKS:
- If the user doesn't EXPLICITLY states that their budget is by month or MONTHLY, then use FIXED_BUDGET as budgetType.
- In other words, the default value is FIXED_BUDGET unless the user explicitly says MONTHLY or BY MONTH.
- IF the user says "this month" then also use FIXED_BUDGET and start date should be today, end date should be the last day of the month.
- When you use FIXED_BUDGET (fixed-date) but the user's timing expectations/goals are NOT clear, ASK for an explicit start-date and end-date before creating — do not silently invent a date range. Only skip the question when the dates are already unambiguous (e.g. the user gave a range, or said "this month"/"this quarter").
- monthlyCap is the user's money: when the user has NOT explicitly stated a budget / monthly cap (or confirmed a figure you proposed), ASK for it before creating — do not silently invent a cap. This applies to campaign-creation flows too: a budget group needed by a new campaign still requires a user-chosen cap. Same when an update would change monthlyCap.
- If the user says "set a monthly budget of $X" or equivalent then use MONTHLY_RESET as budgetType (MONTHLY is NOT a valid value, the platform rejects it)
- Before an update, refresh the information by using get_budget_group to avoid overwriting fields unintentionally.
- The campaign doesn't need to be in a launched state for its budget group to be updated.
WHEN TO USE:
- User wants to create a new budget group with specific settings
- We're creating a campaign and need to set up its budget group.
- User requests to update an existing budget group with new parameters
- User requests to update the budget of a campaign
INTEGRATION WITH OTHER TOOLS:
- If the ID for a budget group update is unknown there are a few options:
- if you have the campaign name, use search_campaigns_by_name. In its response, `$.optimizationGroup.id` is the budget group ID.
- From search_campaigns_by_names's response, you get the property `$.optimizationGroup.id`. That's the budget group ID.
- You can also use get_budget_group if you have the budget group name to retrieve its ID.
Anchor every date calculation to the REAL current date — if you are not certain what today is, call get_current_date before computing start/end dates.Arguments
| Argument | Type | Notes | |
|---|---|---|---|
data |
object | required | Budget group configuration |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_budget_group","arguments":{"data":{}}}}'
Response
No recorded response. This tool writes to the account, so it is never executed to build these docs.
The request above is still the exact shape to send. Nothing on this page is invented.
Related
Other campaigns tools: