meta_create_campaign
Create a Meta campaign from a conversation. It always arrives paused.
Ask for a new campaign on a Meta advertiser, with its objective and its budget. AdCrunch creates it paused, so it spends nothing until you activate it.
Create a sales campaign called Spring Prospecting on Northwind, with a daily budget of 50 euros.
The agent calls meta_create_campaign, then get_mutation_status, and you see the id of the new paused campaign. Change what runs on Meta walks the whole campaign, from the Page to the activation.
Reference
Create a campaign on a live Meta ad account. It is always created PAUSED and cannot be created active — nothing spends until you separately activate it with meta_set_status. Optionally set a campaign budget to run Advantage campaign budget (CBO); omit it and each ad set carries its own budget instead. Runs asynchronously: returns a workflowId immediately — call get_mutation_status with it to get the new campaign’s id. Budgets are in whole units of the ad account currency: 10.5 is 10.50, never 1050.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
advertiserId |
string | yes | Advertiser account ID (acc_<id>). Must belong to the active organization — find one with list_advertisers. |
dailyBudget |
number, more than 0 | no | Campaign-level daily budget in whole units of the ad account currency (10.5 is 10.50). Setting either budget turns on Advantage campaign budget; provide this or lifetimeBudget, not both, or neither to budget at the ad-set level. |
lifetimeBudget |
number, more than 0 | no | Campaign-level lifetime budget in whole units of the ad account currency (10.5 is 10.50). Provide this or dailyBudget, not both. |
name |
string, at least 1 character | yes | Campaign name, as it will appear in Ads Manager. Use something the user would recognize. |
objective |
one of OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC, OUTCOME_APP_PROMOTION |
yes | What the campaign optimizes toward. This constrains which optimization goals its ad sets may use, so pick it from what the user actually wants (e.g. OUTCOME_SALES for purchases, OUTCOME_TRAFFIC for site visits). |
specialAdCategories |
array of (one of NONE, EMPLOYMENT, HOUSING, CREDIT, ISSUES_ELECTIONS_POLITICS, ONLINE_GAMBLING_AND_GAMING, FINANCIAL_PRODUCTS_SERVICES) |
no | Regulated categories this campaign falls under, which Meta requires you to declare — employment, housing, credit, politics, gambling, or financial products. Declaring one restricts targeting. Omit (or pass ["NONE"]) when none applies; do not guess, ask the user. Default: []. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
workflowId |
string | yes | The id of the change. The change has not reached Meta yet. Give this id to get_mutation_status to find out how the change ended. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
not_foundmissing_write_accessforbiddeninvalid_requestinternal_error
Scope
The token must hold mutation:write. Auth & scopes lists each scope.
Annotations
A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.
- Writes. The tool can change data.
- Destructive. The tool can make a change that you cannot undo. A client can ask you to confirm before it calls the tool.
- Not idempotent. A second call with the same arguments can change more.
- Open world. The tool reaches a system outside AdCrunch, such as an ad platform.
Example
The arguments:
{
"advertiserId": "acc_1485443900032333",
"dailyBudget": 50,
"name": "Spring Prospecting",
"objective": "OUTCOME_SALES"
}
The result, in structuredContent:
{
"workflowId": "3f9c2b7e-8a41-4d6e-9b05-c1e7a2d4f860"
}