Pause unprofitable campaigns
When
- Purchase ROAS Last 7 days < 1.2
- AND Spend Today > Rp 500.000
Then
- Pause campaign
- Add to name APPEND · [LOW-ROAS {date}]
- Notify Email · once every 12 hours
Meta Ads rule automation
Write the condition and the action in plain terms. AdOps checks your campaigns against Meta Insights on the schedule you set, applies what you asked for, and records every change it made.
Illustrative sample data for one ad account. AdOps reads these figures from Meta Insights; it does not model or forecast them.
Reads from and writes to
The unit of work
An AdOps rule is a set of conditions joined by AND or OR, and the actions to take when they hold. There is no scripting language to learn and no expression syntax to debug — the rule reads the way you would say it out loud.
When
Then
Sample data The vocabulary
The rule builder exposes the same metric names Meta uses, so a condition you write here means what it means in Ads Manager.
Every metric is available to every condition, in six categories.
| Category | Count | Examples |
|---|---|---|
| Conversion | 16 | Purchases, Purchase Value, Leads, Adds to cart, Checkout initiated, Registration completed |
| Cost efficiency | 15 | Cost per Purchase, Cost per lead, CPC, CPC (link), Cost per add to cart |
| Engagement | 7 | Clicks, Link clicks, CTR, CTR (link clicks), Landing page views |
| Core performance | 2 | Spend, Impressions |
| Time-based | 3 | Hours since creation, Time greater than, Time less than |
| Custom | 2 | Lifetime budget, Remaining budget |
Grouped the way the action picker groups them.
General
Budget
Name and text
How it runs
Rule evaluation is a producer and a worker connected by a queue, which is why one slow ad account never delays the rest of your rules.
A dispatcher wakes on a fixed interval and selects the rules whose next execution time has passed. The sweep will not re-enter itself, so a slow pass never overlaps the next tick.
Every 10s dispatch interval
Matching entities are fetched from the Graph API with your pre-filters applied server-side and full pagination, retried on failure.
3 fetch attempts, 1s then 2s apart
One job is enqueued per ad account, so accounts are processed independently and a large account cannot block a small one.
1 job per ad account
The worker issues a batched Insights read for exactly the metrics your conditions need, resolves any custom metrics from their source, and folds the results with your AND/OR logic.
Each action is applied through the Graph API, then recorded against the campaign with its parameters, its before and after values, and how long it took.
Features
No feature on this site is described that the product does not do today.
Conditions on live Meta metrics paired with actions the engine executes on your campaigns, with an execution log behind every run.
Learn moreForty-five Meta Ads metrics in six categories, eleven reporting periods per condition, and metric-versus-metric comparison.
Learn moreEleven executable actions across lifecycle, budget and naming, each with its own parameters and an optional cooldown.
Learn moreA named metric bound to a Google Sheet, resolved at evaluation time, usable in conditions, budget values and campaign names.
Learn moreA plain-language goal becomes draft rule tasks in the normal editor, tagged as AI generated and scored 0 to 100 for confidence.
Learn moreA check interval or a weekly timetable decides when a rule runs; time conditions decide which hours and weekdays it may act on.
Learn moreCustom metrics
Most automation tools can only compare a Meta metric against a number you typed into the rule. That works until the number is different for every product line, changes weekly, and is maintained by someone who does not have access to your ads tool.
An AdOps custom metric points at a Google Sheet — a spreadsheet id, a sheet name, a lookup column and a value column. At evaluation time the engine resolves the value for the row that matches, and your condition compares against it like any other metric.
Rows are cached in memory for two minutes so a large batch does not re-read the sheet for every campaign, and a MongoDB copy is kept so a rule still runs if the live fetch fails.
Evidence
Automation is only worth having if you can reconstruct what it did. Each execution writes a batch record, and each campaign in that batch gets one card per task showing what ran, what it changed, and what it skipped.
PRO — Retargeting — Broad — 03
ID: 120214887731040123
Rp 500.000 Rp 400.000
Execution time: 1.4s Next: 30 Aug 2026, 14:30
PRO — Retargeting — Broad — 03 PRO — Retargeting — Broad — 03 — [ROAS 0.94]
Execution time: 0.9s
next_execute_not_reached Next: 30 Aug 2026, 20:00
Sample data Templates
Every account starts with the same handful of problems. These ship with the product, so the first rule you run is one you edited rather than one you invented.
Use cases
Each playbook is a set of rules you can copy, not a case study.
A D2C brand buying Meta traffic every day, where three or four campaigns carry most of the revenue.
Budget-scaling rules for a D2C advertiser who needs winners to grow and losers to stop on the same schedule.
A lead-gen advertiser with a cost-per-lead number the sales team agreed to, and a form that has to keep filling.
Rules that hold a cost-per-lead target by comparing spend and lead volume in the same window, then pausing or resizing the campaigns that miss it.
An agency media buyer holding a dozen Meta ad accounts, each with its own target, cap and reporting rhythm.
One rule shape applied across client ad accounts, with each client's ROAS target and monthly cap read from a Google Sheet at evaluation time.
Questions
The things evaluators ask us most, answered without hedging.
AdOps is a rule-automation platform for Meta (Facebook) Ads. An advertiser writes rules as conditions plus actions — for example, when Purchase ROAS over the last 7 days falls below 1.2, pause the campaign — and the AdOps engine evaluates those conditions against Meta's Insights API on a schedule the advertiser sets, executes the actions, and records every run.
AdOps connects to Meta Ads only. The platform-connection screen in AdOps also lists TikTok Ads, Google Ads and Snapchat Ads, but all three carry a Coming Soon badge and cannot be connected today. Every rule, metric and action in AdOps is written against Meta's Graph and Marketing API, so Meta is the single live integration.
An AdOps rule can run any of 11 actions on a campaign, grouped in the rule builder as General (notify, start, pause, delete, duplicate), Budget (increase budget, decrease budget, set budget) and Name / text (add to name, remove from name, replace text in name). Increase and decrease take a fixed amount or a percentage; set budget takes a fixed amount or a custom-metric value.
AdOps rule conditions can test 45 Meta Ads metrics across six categories: conversion (16), cost efficiency (15), engagement (7), time-based (3), core performance (2) and custom (2). Spend, Purchase ROAS, Impressions, Clicks, Link clicks, CPC, CTR, CPM, Purchases and Daily Budget are all included. Each condition also picks one of 11 reporting periods, from Today to Lifetime.
AdOps rules carry two levels, Campaigns and Ad sets, and the evaluation side reads Meta Insights at whichever level the rule selects. The action side is campaign-shaped: every write AdOps makes — pause, budget change, name change, duplicate — is issued against a campaign. AdOps executes no ad-level actions at all.
AdOps has no undo button. Once a rule pauses a campaign or changes a budget, reversing it means editing the campaign in Meta Ads Manager or writing a rule that puts it back — the shipped Re-enable Paused Winners template exists for exactly that. Before a rule goes live, AdOps shows an estimated match count so the blast radius is visible first.
Start with a template, point it at one ad account, and leave it in draft until the numbers look right. Nothing runs against your campaigns until you set it live.
Inside the product
Nine screens from the working dashboard — the rule builder, the metric picker, the dayparting grid and the log that records what happened. Scroll the strip.
Every figure is rebuilt from the product’s own interface and filled with invented data — no customer name, ad account or spend figure appears anywhere on this site. See how a run works