---
title: meta_update_budget
description: Change the daily or lifetime budget of a Meta campaign or ad set, with a safety cap and a level check.
---

Ask to change the daily or the lifetime budget of a campaign or an ad set on Meta. AdCrunch checks the amount and the level of the budget before the change reaches Meta. It also checks that the object is in the ad account of the advertiser, and it keeps the budget that the change replaces.

> Raise the daily budget of Spring Prospecting to 150 euros.

The agent calls `meta_update_budget`, then [`get_mutation_status`](/mcp/tools/get-mutation-status), and you see whether Meta applied the new budget. [Change what runs on Meta](/mcp/tools/change-what-runs-on-meta) lists each guardrail.

## Reference

**Available on:** [![Meta](/providers/meta.svg)](https://docs.adcrunch.dev/connect/providers)

Change a Meta campaign's (Advantage campaign budget) or ad set's daily or lifetime budget on a live ad account. Before you change a budget, read its live amount with `meta_list_campaigns` or `meta_list_adsets`. Budgets are in whole units of the ad account currency: 10.5 is 10.50, never 1050. Provide exactly one of `dailyBudget` or `lifetimeBudget`. A daily budget is not a hard limit for one day: Meta can spend up to 175% of it on one day, and up to 7 times it in one week. To change a daily budget to a lifetime budget, first set an end time with meta_update_schedule, then set the lifetime budget. To change a lifetime budget to a daily budget, first set the daily budget, then remove the end time with meta_update_schedule. Meta refuses a lifetime budget with no end time. Runs asynchronously: returns a `workflowId` immediately — call `get_mutation_status` with it to see whether the change succeeded, and to get the budget that it replaced as `priorValue`. AdCrunch refuses a budget over the safety cap, a budget at the level that does not hold the budget of the campaign (`wrong_level`), and an object that is not in this ad account (`not_found`).

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `advertiserId` | string | yes | Advertiser account ID (`acc_<id>`). Must belong to the active organization. |
| `dailyBudget` | number, more than 0 | no | New daily budget in whole units of the ad account currency (10.5 is 10.50). Provide this or `lifetimeBudget`, not both. |
| `id` | string | yes | The Meta object ID of the campaign or ad set, digits only. |
| `level` | one of `campaign`, `adset` | yes | Which level the `id` refers to. |
| `lifetimeBudget` | number, more than 0 | no | New lifetime budget in whole units of the ad account currency (10.5 is 10.50). Provide this or `dailyBudget`, not both. |

### 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](/mcp/errors) describes the shape of a failed call.

- `not_found`
- `provider_not_connected`
- `missing_write_access`
- `forbidden`
- `invalid_request`
- `internal_error`

### Scope

The token must hold `mutation:write`. [Auth & scopes](/mcp/auth) 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:

```json
{
  "advertiserId": "acc_1485443900032333",
  "dailyBudget": 150,
  "id": "120215678901234567",
  "level": "campaign"
}
```

The result, in `structuredContent`:

```json
{
  "workflowId": "3f9c2b7e-8a41-4d6e-9b05-c1e7a2d4f860"
}
```
