Update entity (adsap_update_entity)
Platform: Meta · Read or write: Write · Plan: All plans · Consumes a task: Yes · Preview supported: Yes
What it does
Edits an existing Meta campaign, ad set or ad. You can change the name, the status, the budget, the schedule, or the targeting of an ad set. Only the fields you mention change. Ask for a preview to see the current value next to the new one before it applies.
When to use it
- Use it to edit one existing campaign, ad set or ad:
name,status,daily_budget,lifetime_budget,start_time,end_time,stop_timeortargeting. - Put only the fields you want to change in
updates. At least one is required, anddaily_budgetandlifetime_budgetcannot go in the same call. - Budgets are integers in cents and belong on a campaign or an ad set, never on an ad.
targetingis accepted on ad sets only. - It supports a preview call. With
dry_runset totrue, Adsap reads the current values from Meta and returns a field by field diff. - It does not edit ad content such as text, links or media. For that, use
adsap_replace_ad_creative. To pause many entities at once, useadsap_set_entity_status.
Worked example
You ask
“Raise the daily budget on the Prospecting US ad set to $80 and rename it. Show me the change before you apply it.”
The assistant calls adsap_update_entity
{
"entity_type": "adset",
"entity_id": "120210000000001",
"ad_account_id": "act_1234567890",
"updates": { "name": "Prospecting US, broad", "daily_budget": 8000 },
"dry_run": true
}Adsap returns
The field names are the ones Adsap returns. The values are examples.
{
"ok": true,
"dry_run": true,
"entity_type": "adset",
"entity_id": "120210000000001",
"name": "Prospecting US",
"current_status": "ACTIVE",
"effective_status": "ACTIVE",
"changes": [
{
"field": "name",
"current_value": "Prospecting US",
"new_value": "Prospecting US, broad",
"will_change": true
},
{
"field": "daily_budget",
"current_value": "5000",
"new_value": 8000,
"will_change": true
}
],
"total_would_change": 2
}How to read it
changes has one entry per field you sent. current_value is what Meta holds now and new_value is what you asked for. Budgets are in cents, so 8000 is 80.00 in the account currency. will_change is false when the two already match, and total_would_change counts the entries that differ.
The response also carries a human_readable_summary sentence, left out here. Nothing has been applied. When the diff looks right, the assistant repeats the call with dry_run set to false.
Parameters
Descriptions are shortened from the tool schema. Your assistant sees the full text.
| Name | Type | Required | Description |
|---|---|---|---|
entity_type | one of campaign, adset, ad | Yes | |
entity_id | string | Yes | |
ad_account_id | string | Yes | |
updates | object | Yes | Only the fields you want to change. At least one is required. |
updates.name | string | No | |
updates.status | one of PAUSED, ACTIVE | No | |
updates.daily_budget | integer | No | In cents (minor units). campaign (CBO) or ad set (ABO) only: never on an ad. Mutually exclusive with lifetime_budget. |
updates.lifetime_budget | integer | No | In cents (minor units). campaign (CBO) or ad set (ABO) only. Mutually exclusive with daily_budget. |
updates.start_time | string | No | ISO 8601 start time. |
updates.end_time | string | No | ISO 8601 end time (ad set schedule). |
updates.stop_time | string | No | ISO 8601 stop time (campaign lifetime). |
updates.targeting | object | No | AD SET ONLY. Full Meta targeting spec, passed through to Meta as-is. Use adsap_search_detailed_targeting / adsap_search_interests / adsap_search_behaviors / adsap_search_geo_locations to obtain valid IDs first (detailed targeting groups go in flexible_spec: OR inside a group, AND between groups). |
updates.daily_min_spend_target | integer | No | AD SET ONLY. Minimum daily spend in cents (minor units); 0 removes the limit. Requires the campaign to have a daily budget (Advantage campaign budget). |
updates.daily_spend_cap | integer | No | AD SET ONLY. Daily spend cap in cents; 0 removes the limit. Requires a campaign daily budget. |
updates.lifetime_min_spend_target | integer | No | AD SET ONLY. Lifetime minimum spend in cents; 0 removes it. Requires a campaign lifetime budget. |
updates.lifetime_spend_cap | integer | No | AD SET ONLY. Lifetime spend cap in cents; 0 removes it. Requires a campaign lifetime budget. |
updates.min_spend_percentage | integer | No | AD SET ONLY. Minimum daily spend as a % of the CAMPAIGN daily budget (Advantage campaign budget campaigns), like Ads Manager’s percentage option… 0 removes it. |
updates.max_spend_percentage | integer | No | AD SET ONLY. Daily spend cap as a % of the campaign daily budget. Same mechanics as min_spend_percentage. |
dry_run | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |
Example prompts
- “Raise the daily budget on the Prospecting ad set to $80.”
- “Rename the campaign ‘Test 1’ to ‘Spring Launch, US’ and end it on May 31.”
- “Show me the diff if I widen the age range on the Retargeting ad set to 18 to 65.”
Notes
Budgets apply at the campaign level for CBO and at the ad set level for ABO. Targeting changes apply to ad sets only.
Related tools
adsap_set_entity_status: Pause or reactivate one or more Meta campaigns, ad sets, or ads in batch (max 50).
Guide
Read Managing campaigns for the workflow around this tool, and the Tool reference for every tool.
The Meta Ads MCP server page shows how to connect Meta Ads to Claude, ChatGPT or Perplexity.