ZuckerBot

ZuckerBotTool referenceStrategy & campaign build

Create Campaign From Spec

zuckerbot_create_campaign_from_spec

Build a complete Meta campaign VERBATIM from a declarative JSON spec — no strategy generation, no copy authoring. Everything is created PAUSED, always; launching remains a separate deliberate call. Recommended flow: send with dry_run=true first to get the fully resolved Graph API payloads without creating anything, review them, then re-send without dry_run to build. Validation failures return an errors array of per-field {path, message, kind: schema|semantic} entries — fix each path and retry. Spec shape: campaign {name, objective OUTCOME_LEADS|OUTCOME_SALES, budget {type CBO_DAILY, amount, bid_strategy HIGHEST_VOLUME|LOWEST_COST_WITHOUT_CAP|COST_CAP}, special_ad_categories}, ad_sets [{name, conversion_location WEBSITE|INSTANT_FORM, attribution {click_days 1|7, view_days 0|1}, targeting {geo — ARRAY of 2-letter country codes e.g. ["AU"], age_min, advantage_audience, excluded_custom_audiences}, placements {mode MANUAL|ADVANTAGE_PLUS, exclude}; WEBSITE additionally: pixel_id, optimisation_event {type CUSTOM_CONVERSION, id}|{type STANDARD, event e.g. Lead}, performance_goal MAXIMISE_CONVERSIONS (the Ads Manager label, not the Graph enum); INSTANT_FORM instead: lead_form_id — the Meta instant form on the connected Page (no pixel_id, no optimisation_event, and its ads take NO final_url — the form is the destination; the creative's required display link is set automatically to the business's stored website, else its Facebook Page URL; single-image creative, no multi-ratio placement customisation)}], ads [{name, asset {type IMAGE_SET, refs {1x1,4x5,9x16 — https URLs or uploaded image hashes}}|{type VIDEO, ref — pre-uploaded Meta video id}|{type EXISTING_AD, ad_id — clones that ad's image/video asset from the SAME ad account; copy, CTA and destination come from THIS spec}, primary_text, headline, description, cta, final_url (WEBSITE ad sets only), ad_set_name?}]. EXISTING_AD specs need Meta credentials even for dry_run (the source asset is read from Meta). Use zuckerbot_list_custom_conversions to find custom conversion ids.

Parameters

NameTypeDescription
business_idstringoptionalOptional business ID override for the authenticated API key
specobjectrequiredThe declarative campaign spec (see tool description for the shape)
dry_runbooleanoptionaltrue = return the resolved Graph payloads without creating anything. Strongly recommended before a real build

Example call

{
  "tool": "zuckerbot_create_campaign_from_spec",
  "arguments": {
    "spec": {}
  }
}

You never invoke this directly — describe what you want in plain English inside Claude, Cursor, ChatGPT or any MCP client with ZuckerBot connected, and the agent selects zuckerbot_create_campaign_from_spec and fills the arguments for you.

Related tools — Strategy & campaign build

Connect ZuckerBot to your AI agent in about two minutes: get started free, browse the full tool reference, or grab the lifetime deal.