MetaBuyer is an operational Meta Ads monitoring and guarded execution workflow. It is not primarily an "app testing" feature.
Current behavior documented as of February 25, 2026.
Slack approvals do not execute writes automatically. Operators must run execution commands manually with explicit confirmation.
Default loop interval is 6 hours (`intervalSeconds: 21600`) unless overridden in config.
Current write operations are intentionally narrow and guardrailed:
Non-goals in the current release:
In z0, connect Settings → Integrations → Meta Ads using:
Validation checklist:
Meta Ads is connected as an API-key style integration (token + account ID), not an in-product OAuth app flow.
/metabuyer init /metabuyer doctor /metabuyer setup --apply --target-cpa 120 --target-roas 1.8 --date-preset last_7d --slack-target channel:C12345678 /metabuyer run-now /metabuyer plan-actions # Decide in Slack thread: APPROVE ... / REJECT ... /metabuyer sync-approvals /metabuyer execute-actions --confirm sandbox # or --confirm live /metabuyer action-log --limit 20 /metabuyer rollback-actions --confirm sandbox --limit 3
Example back-and-forth between an operator and MetaBuyer during normal operations.
Operator
Can you configure MetaBuyer for our account? Target CPA 120, target ROAS 1.8, and post updates in channel:C12345678.
MetaBuyer
Yes. I will apply the config and keep writes disabled initially. /metabuyer setup --apply --target-cpa 120 --target-roas 1.8 --date-preset last_7d --attribution-window 7d_click --source-of-truth meta --slack-target channel:C12345678 --execution-enabled false
Config applied
Operator
Run health checks and give me current status.
MetaBuyer
/metabuyer doctor PASS meta_runtime PASS meta_api_read PASS meta_permissions /metabuyer status enabled=true, executionEnabled=false, intervalSeconds=21600, halted=false
Diagnostics complete
Operator
Great. Run analysis now and tell me what it found.
MetaBuyer
/metabuyer run-now Summary: spend $2,843.19 | purchases 19 | CPA $149.64 | ROAS 1.21 Top recs: 2 high, 3 medium Posted report to Slack thread in channel:C12345678
Analysis run complete
Operator
Create an action plan but do not execute anything yet.
MetaBuyer
/metabuyer plan-actions Planned actions: 4 Requires approval: 3 Approval queue posted to Slack thread
Plan generated
Operator
I approved two actions in Slack and rejected one. Pull the latest decisions.
MetaBuyer
/metabuyer sync-approvals scannedThreads=1 processedCommands=2 approvedKeys=2 rejectedKeys=1
Slack decisions synced
Operator
Execute only approved actions in sandbox mode.
MetaBuyer
/metabuyer execute-actions --confirm sandbox applied=2 skipped=2 (1 rejected, 1 approval_required) failed=0 action log updated
Manual execution complete
Operator
Show last 10 actions and pause the agent until tomorrow.
MetaBuyer
/metabuyer action-log --limit 10 /metabuyer pause-agent --reason "manual review until tomorrow"
Operator override active
Approval replies in Slack never trigger writes by themselves. Execution only happens after explicit execute command confirmation.
`verify-use-cases` exists to validate Meta Marketing API permission/use-case probes on real connected accounts. It is a diagnostic helper, not the core purpose of MetaBuyer.
This page is the canonical workflow doc for MetaBuyer operations.