Before you create a rule
- Connect the intended Meta ad account and check its retained inventory and metrics.
- Install Signals and verify counted arrivals. Rule comparisons use counted arrivals, not purchases, unique visitors or Meta-attributed conversions.
- Review the workspace’s Action policy. Only the team owner can change rules in the dashboard; other members can review them.
- For MCP, use the production server and an authorized Workspace key. Read keys can list and inspect rules; creating, editing or enabling requires Write and an active grant for that operation. Older account-bound keys keep their restriction. Never put a key in a prompt or source control.
What can a rule change?
Budget rules apply to daily budgets and remain subject to current provider state and policy. Rules do not resume targets, change lifetime budgets or create ads.
Both conditions must hold over the last three complete days in the account timezone, with UTC as the fallback:
- The target reaches your
minimum_counted_arrivals. - Its cost per counted arrival is
at_leastorat_mostyourcost_ratiotimes the whole account’s cost per counted arrival.
at_least with 1.5 matches a target costing at least 1.5 times the account average. This comparison includes the target in the account baseline; it differs from the Resume outcome’s rest-of-account comparison. It does not establish causal harm or a performance forecast.
Create and enable a rule in the dashboard
- Open Settings → Action policy, then Account rules. Confirm the workspace and account.
- Enter a Name, choose the Account, Action and Level, and set the arrival threshold and cost ratio. Budget actions also need Budget change (%).
- Click Create rule. Confirm the saved rule says Disabled, and review its complete condition.
- Click Enable rule only when you intend scheduled evaluation to propose matching changes under the approval behavior above. Use Disable rule to stop future evaluation.
Configure the same rule through MCP
Use these tools with their own grant permissions:
For
actions.rules.create, replace internal Plainrouter account ID 91 with your account’s ID. This field is platform_ad_account_id, rather than account_id or an external Meta act_… ID. Example arguments for a disabled pause rule:
rule. Save its id and confirm enabled: false, account, window and current_revision. Do not send enabled on creation. To enable it, call actions.rules.update with the returned rule ID; the ID below is an illustrative placeholder:
enabled: false to disable. A name or definition edit appends an immutable revision; when editing definition, supply all its required fields. Enabling or disabling alone does not add a revision. The three-day window is fixed, so omit window and window_days.
How do I verify evaluation and execution?
Evaluation is scheduled hourly. It reads retained metrics and arrivals, records a window and revision, then proposes eligible matches through normal Actions admission. Saving a rule is not an evaluation or proof of a Meta change. Callactions.rules.show with rule_id. Inspect enabled, suspended_at, suspended_reason, current_revision and runs. Each run records its window, timezone, status, reason, account totals and per-target decisions. Reads return the latest five runs; each run includes at most 100 decisions, with decisions_truncated indicating more. For lists, page starts at 1, per_page defaults to 25 and accepts 1–100; continue with rules.next_page_arguments until it is null.
A decision marked proposed includes action_batch_id. Follow that batch in Inbox or the Actions API; confirm approval where required, the execution receipt and exact provider verification. A matching rule or proposed batch is not Landed.
Why did a rule not produce another change?
Rules and system-generated inverse proposals do not create recursive lost-outcome inverse chains. For other eligible actions, see what happens after a lost outcome.