meta_create_campaign
Create a Meta campaign from a conversation. It always arrives PAUSED.
Creates a campaign on a live Meta ad account your organization owns and has connected with write access — so setting one up no longer means leaving the conversation for Ads Manager.
Input
| Field | Type | Required | Description |
|---|---|---|---|
advertiserId |
acc_* |
yes | The Meta advertiser. Must belong to your active organization. |
name |
string |
yes | Campaign name, as it appears in Ads Manager. |
objective |
OUTCOME_* |
yes | What the campaign optimizes toward. Constrains its ad sets’ optimization goals. |
specialAdCategories |
string[] |
no | Regulated categories Meta requires you to declare. Declaring one limits targeting. |
dailyBudget |
number |
no | Campaign-level daily budget, in whole units of the account currency. |
lifetimeBudget |
number |
no | Campaign-level lifetime budget, in whole units of the account currency. |
Objectives are OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC, OUTCOME_APP_PROMOTION.
Setting a budget here turns on Advantage campaign budget (CBO) — Meta distributes one pot across the ad sets. Omitting it means each ad set carries its own budget instead. Provide at most one of the two.
Output
{ workflowId }, immediately. The write runs asynchronously: call get_mutation_status with that workflowId to get the created campaign’s { id }.
That returned id is the handle — pass it to meta_update_budget, meta_set_status, or a future ad set. Do not expect the new campaign to appear in list_entities right away; AdCrunch refreshes it in the background, and the id is the contract.
Example
“Set up a sales campaign called Spring Prospecting on my Meta account, €50 a day.”
Claude calls meta_create_campaign({ advertiserId: 'acc_998877', name: 'Spring Prospecting', objective: 'OUTCOME_SALES', dailyBudget: 50 }), then polls get_mutation_status and reports the new campaign’s ID — paused, spending nothing.
Errors
Advertiser not found for this organization— calllist_advertisers.This advertiser is connected without write access— reconnect Meta and grant write permission.- A budget above the safety cap is rejected with the same message
meta_update_budgetgives; it is one guardrail, not two. - Anything Meta itself refuses is surfaced in Meta’s own words, including its error subcode.
401or403— see Errors, which every tool shares. This one needsmutation:write.