update_meta_ad_set

Meta Ads Write

User wants to edit an existing Meta ad set's targeting, budget, bid, placements, schedule, or optimization settings

Endpoint

POST https://api.adspirer.ai/api/v1/tools/update_meta_ad_set/execute

Headers

Description

User wants to edit an existing Meta ad set's targeting, budget, bid, placements, schedule, or optimization settings. IMPORTANT: This tool modifies REAL ad sets in Meta Ads Manager. Changes take effect immediately. This is the primary tool for: - Changing audience targeting (age, gender, interests, locations) - Excluding placements (e.g., remove Audience Network) - Adjusting budgets at the ad set level - Changing bid amounts - Pausing/resuming specific ad sets - Modifying optimization goals Returns: - Confirmation of updates applied - Summary of all changes made - Ads Manager URL for the ad set When to use this tool: - "Change the targeting on my ad set" - "Exclude Audience Network from placements" - "Update the budget on this ad set to $50/day" - "Pause this ad set" - "Change the age range to 25-45" - "Add interest targeting for fitness" - "Exclude custom audience from this ad set" - "Change bid to $5" - "Update the optimization goal" Parameters: - ad_set_id: The Meta Ad Set ID to update (required) - status: ACTIVE, PAUSED, DELETED, ARCHIVED (optional) - name: New ad set name (optional) - daily_budget: New daily budget in USD (optional, min $1). DO NOT use for CBO campaigns. - lifetime_budget: New lifetime budget in USD (optional). DO NOT use for CBO campaigns. - daily_min_spend_target: CBO only — minimum daily spend for this ad set (use INSTEAD of daily_budget) - daily_spend_cap: CBO only — maximum daily spend cap for this ad set (use INSTEAD of daily_budget) - lifetime_min_spend_target: CBO only — minimum lifetime spend (for lifetime budget CBO) - lifetime_spend_cap: CBO only — maximum lifetime spend cap (for lifetime budget CBO) - bid_amount: New bid amount in USD (optional) - targeting: New targeting spec as JSON (optional) — for placements, audiences, demographics - start_time: New start time ISO format (optional) - end_time: New end time ISO format (optional) - optimization_goal: REACH, LINK_CLICKS, LANDING_PAGE_VIEWS, OFFSITE_CONVERSIONS, VALUE, etc. (optional) **CBO (Advantage Campaign Budget) campaigns:** For ad sets under CBO campaigns, do NOT set daily_budget or lifetime_budget. Use daily_min_spend_target / daily_spend_cap to control spend distribution. Setting daily_budget on a CBO ad set will cause Meta to reject with an error. At least one update field must be provided. Targeting Spec Examples: *Exclude Audience Network:* ```json { "publisher_platforms": ["facebook", "instagram"], "facebook_positions": ["feed", "stories", "reels"], "instagram_positions": ["stream", "story", "reels"] } ``` *Change age and gender:* ```json { "age_min": 25, "age_max": 45, "genders": [1] } ``` (genders: 1=male, 2=female, omit for all) *Add interest targeting:* ```json { "flexible_spec": [{"interests": [{"id": "6003139266461", "name": "Fitness"}]}] } ``` *Exclude custom audience:* ```json { "excluded_custom_audiences": [{"id": "AUDIENCE_ID"}] } ``` Execution time: 2-5 seconds Modifies: Real ad set in Meta Ads Workflow: 1. Use `list_meta_ad_sets` or `get_meta_campaign_details` to find the ad set ID 2. Use `update_meta_ad_set` with the changes you want to make 3. Verify changes in Ads Manager

Request body

All tool arguments are wrapped in an arguments object.

FieldTypeDescription
ad_set_idstring required**REQUIRED.** The Meta Ad Set ID to update. If you don't have it, call `list_meta_ad_sets` first. You MUST also provide at least one update field (status, name, daily_budget, etc.) — do NOT call this tool with only an ad_set_id and no changes.
statusstring optionalNew status: 'ACTIVE', 'PAUSED', 'DELETED', 'ARCHIVED'
namestring optionalNew ad set name
daily_budgetnumber optionalNew daily budget in USD (minimum $1). Will be converted to cents for Meta API.
lifetime_budgetnumber optionalNew lifetime budget in USD. Will be converted to cents for Meta API.
bid_amountnumber optionalNew bid amount in USD. Will be converted to cents for Meta API.
targetingobject optionalNew targeting specification as a JSON object. Use this for placement exclusions, audience exclusions, age/gender changes, and interest targeting updates. For LOCATION changes prefer the `locations` / `location_types` params below — they build Meta's geo_locations correctly (city keys + radius + reach mode) and merge onto the ad set's existing targeting so the rest isn't wiped.
locationsarray optionalReplace the ad set's location targeting. Country codes (['US','BR']) or location objects from search_meta_targeting ([{'key':'2344821','type':'city','radius':20,'distance_unit':'kilometer'}]). ALWAYS include the 'type' field on each object (city/region/zip/place) — a key with no type is treated as a country code and rejected by Meta. Merged onto current targeting (other targeting is preserved).
location_typesarray optionalGeo reach mode / location expansion ('people interested in this location'). List of 'home' / 'recent' / 'travel_in'. Include 'travel_in' to turn location expansion ON. Applied to the ad set's geo targeting; can be set alone (keeps the existing locations).
advantage_audienceboolean optionalAdvantage+ Audience on/off. Toggle Meta's AI audience expansion without replacing the rest of the ad set's targeting. When provided, merges into targeting.targeting_automation.advantage_audience (0/1). Pass True to enable, False to disable. Leave unset to keep existing value.
start_timestring optionalNew start time in ISO format YYYY-MM-DDTHH:MM:SS
end_timestring optionalNew end time in ISO format YYYY-MM-DDTHH:MM:SS
optimization_goalstring optionalNew optimization goal. Web/general values: REACH, IMPRESSIONS, LINK_CLICKS, LANDING_PAGE_VIEWS, OFFSITE_CONVERSIONS, VALUE, POST_ENGAGEMENT, LEAD_GENERATION. App-campaign values (only valid when parent campaign objective=OUTCOME_APP_PROMOTION): APP_INSTALLS (default), APP_INSTALLS_AND_OFFSITE_CONVERSIONS (combined goal), OFFSITE_CONVERSIONS (in-app events), IN_APP_VALUE (value optimization for in-app events), VALUE.
app_idstring optionalUpdate the Facebook App ID on the ad-set promoted_object. Numeric only — NOT iOS bundle ID or Android package name. Use to swap the promoted app on an existing OUTCOME_APP_PROMOTION ad set (e.g. relaunching with a new app version that has a different FB App ID).
app_store_urlstring optionalUpdate the App Store / Play Store URL on the ad-set promoted_object. Examples: 'https://apps.apple.com/us/app/example/id123456789' or 'https://play.google.com/store/apps/details?id=com.example'.
app_event_typestring optionalUpdate the in-app event type for OUTCOME_APP_PROMOTION optimization. Pass 'APP_INSTALLS' to revert to install optimization (clears custom_event_type so Meta uses optimization_goal). Pass a specific event (PURCHASE, LEVEL_ACHIEVED, COMPLETE_REGISTRATION, START_TRIAL, etc.) to optimize for in-app actions. Requires Meta SDK to fire the event from the app.
daily_min_spend_targetnumber optionalMinimum daily spend target in account currency for CBO campaigns. Use this instead of daily_budget when the campaign uses Advantage Campaign Budget. Set to 0 to remove the minimum.
daily_spend_capnumber optionalMaximum daily spend cap in account currency for CBO campaigns. Use this instead of daily_budget when the campaign uses Advantage Campaign Budget. Set to 0 to remove the cap.
lifetime_min_spend_targetnumber optionalMinimum lifetime spend target in account currency for CBO campaigns with lifetime budget.
lifetime_spend_capnumber optionalMaximum lifetime spend cap in account currency for CBO campaigns with lifetime budget.
ad_account_idstring optionalMeta Ad Account ID. Required for multi-account users. Get from get_connections_status.
url_tagsstring optionalAd-set-level URL parameters (e.g. 'utm_source=meta&utm_medium=cpc'). Applied to every ad in this ad set. Leading '?' stripped.

Example request

{
  "arguments": {
    "ad_set_id": "string",
    "status": "string",
    "name": "string",
    "daily_budget": 1.0,
    "lifetime_budget": 1.0,
    "bid_amount": 0.01,
    "targeting": {
      "age_min": 25,
      "age_max": 55,
      "genders": [
        1,
        2
      ],
      "geo_locations": {
        "countries": [
          "US"
        ]
      },
      "interests": [
        {
          "id": "6003107902433",
          "name": "Fitness and wellness"
        }
      ]
    }
  }
}

Example responses

200 — Success

{
  "success": true,
  "data": {
    "text": "(tool-specific textual output for update_meta_ad_set)",
    "quota": {
      "used": 42,
      "limit": 150,
      "tier": "plus",
      "period_end": "2026-05-01"
    }
  },
  "tool": "update_meta_ad_set"
}

400 — Tool-level error (bad arguments / multi-account selection)

{
  "success": false,
  "error": "You have 25 meta_ads accounts connected. Please specify which account to use by passing the ad_account_id parameter:\n  - Acme Holdings (ad_account_id=\"act_123456789\")\n  - Acme EU (ad_account_id=\"act_987654321\")",
  "is_error": true,
  "tool": "update_meta_ad_set"
}

402 — Quota exhausted

{
  "success": false,
  "error": "\ud83d\udea8 Monthly limit reached (150/150 tool calls on Plus tier).\nUpgrade to Pro at https://adspirer.ai to keep building.",
  "is_error": true,
  "tool": "update_meta_ad_set",
  "quota": {
    "used": 150,
    "limit": 150,
    "tier": "plus",
    "period_end": "2026-05-01",
    "upgrade_url": "https://adspirer.ai"
  }
}

Try it live


Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai