Meta Ads rule automation

Rules you can read,
running while you sleep.

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.

14 days free. No card required.

Spend and revenue

Last 14 days · one ad account

Sample
Illustrative sample data for one ad account. AdOps reads these figures from Meta Insights; it does not model or forecast them. Attributed revenue rises from 3.4 to 10.1 million Rupiah while spend rises from 1.8 to 4.0 million. 1 Aug14 Aug
Illustrative sample data for one ad account. AdOps reads these figures from Meta Insights; it does not model or forecast them. Attributed revenue rises from 3.4 to 10.1 million Rupiah while spend rises from 1.8 to 4.0 million.
PeriodRevenue (Rp m)Spend (Rp m)
1 Aug Rp 3.4mRp 1.8m
Rp 4.2mRp 2.1m
Rp 3.8mRp 2.0m
Rp 5.1mRp 2.4m
Rp 5.6mRp 2.6m
Rp 4.9mRp 2.5m
Rp 6.4mRp 2.9m
Rp 7.2mRp 3.1m
Rp 6.1mRp 2.8m
Rp 8.0mRp 3.4m
Rp 8.8mRp 3.6m
Rp 7.6mRp 3.3m
Rp 9.2mRp 3.8m
14 Aug Rp 10.1mRp 4.0m
Revenue Spend

Purchase ROAS

2.524x

Profitable Last 7 days

Sixty-eight per cent of this account's monthly budget has been spent, with nine days remaining.
68% of monthly budget

9 days left

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

  • Meta Graph API
  • Meta Insights
  • Google Sheets
  • Email
  • MongoDB
  • Redis

The unit of work

One rule, stated once, in the terms you already use.

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.

Six operators
Greater than, less than, greater or equal, less or equal, equal, not equal — applied to any of the 45 metrics.
Eleven reporting periods
From today through lifetime, chosen per condition, so a spend guard and a ROAS check can look at different windows in the same rule.
Scope before you evaluate
Pre-filters narrow a rule to specific campaigns by id, by a substring of the name, or by status, before any metric is read.

Pause unprofitable campaigns

Live
Applies to
Campaigns
Scope
Campaign status is ACTIVE
Checks
Every 30 minutes

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
The AdOps Performance Dashboard showing a Purchase ROAS card at 2.380x and an Aggregated ROAS card at 2.088x, both badged Profitable, a Monthly Budget card at Rp 155jt, and a Spend Breakdown ranking the top five ad accounts against a budget utilisation bar at 45.5 per cent. Sample data
Two ROAS figures to three decimals, a budget meter, and spend ranked by ad account — over Today, Last 7 days, Last 30 days or This month. Read the details

The vocabulary

What AdOps can watch, and what it can do about it.

The rule builder exposes the same metric names Meta uses, so a condition you write here means what it means in Ads Manager.

45 metrics it can watch

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

11 actions it can take

Grouped the way the action picker groups them.

General

  • Notify
  • Start
  • Pause
  • Delete
  • Duplicate

Budget

  • Increase budget
  • Decrease budget
  • Set budget

Name and text

  • Add to name
  • Remove from name
  • Replace text in name

How it runs

From a clock tick to a paused campaign.

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.

  1. A sweep picks up what is due

    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

  2. Campaigns are pulled from Meta

    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

  3. Work is fanned out onto a queue

    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

  4. Conditions are evaluated

    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.

  5. Actions run, and are written down

    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.

Custom metrics

Your targets live in a spreadsheet. Your rules can read them.

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.

Read the custom metrics guide
Source
Google Sheets by spreadsheet id and sheet name
Lookup
Column match a key column and a value column
Cache
2 minutes in memory, with a MongoDB fallback
Usable in
Conditions and budget actions

Evidence

Every run leaves a record you can argue with.

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

  • Decrease budget Executed
    Type
    Percentage
    Decrease value
    20%
    Minimum budget
    Rp 150.000

    Rp 500.000 Rp 400.000

    Execution time: 1.4s Next: 30 Aug 2026, 14:30

  • Add to name Executed
    Mode
    APPEND
    Separator
    Text
    [ROAS {metric|purchase_roas.omni_purchase|last_7d}]

    PRO — Retargeting — Broad — 03 PRO — Retargeting — Broad — 03 — [ROAS 0.94]

    Execution time: 0.9s

  • Notify Skipped

    next_execute_not_reached Next: 30 Aug 2026, 20:00

An AdOps execution log detail: one campaign, two action panels badged Not Executed, each listing the action parameters and every condition evaluated with its actual value, its expected value and a Pass or Fail badge. Sample data
Why a rule did nothing is recorded as carefully as why it did something — actual against expected, condition by condition. Read the details

Illustrative sample of the rule-log detail view. Badges, field names and the skip reason are the product’s own.

Templates

Ten rules that already work, ready to adapt.

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.

  1. 01 Scale Profitable Campaigns
  2. 02 Pause Unprofitable Campaigns
  3. 03 Tiered Budget Scaling
  4. 04 Night Budget Reset
  5. 05 Tag Campaign Performance
  6. 06 Pause + Tag Failed
  7. 07 Re-enable Paused Winners
  8. 08 Budget Cap Protection
  9. 09 Performance Monitor
  10. 10 Stop & Label Campaign

Questions

Straight answers before you sign up.

The things evaluators ask us most, answered without hedging.

What is AdOps?

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.

Which ad platforms does AdOps support?

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.

What can an AdOps rule do to a campaign?

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.

Which metrics can an AdOps rule check?

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.

Does AdOps work at the ad set level?

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.

Can AdOps undo an action it has taken?

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.

Write one rule. See what it would have done.

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.

Contact us See pricing

14 days free · no card required · billed in Rupiah

Inside the product

What the screens actually look like

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.

  • The AdOps Performance Dashboard showing a Purchase ROAS card at 2.380x and an Aggregated ROAS card at 2.088x, both badged Profitable, a Monthly Budget card at Rp 155jt, and a Spend Breakdown ranking the top five ad accounts against a budget utilisation bar at 45.5 per cent.
    Performance Dashboard. Two ROAS figures to three decimals, a budget meter, and spend ranked by ad account — over Today, Last 7 days, Last 30 days or This month.
  • The AdOps rule list showing twelve automation rules, each with an on/off toggle, the ad accounts it manages, and when it last triggered — some minutes ago, others on a dated timestamp.
    Rule List. Every rule, what it manages and when it last fired. The toggle is the only thing between draft and live.
  • The AdOps condition builder showing a task with time-of-day conditions across seven day tags, a nested AND group holding a lifetime spend condition under 400,000, and a second task with four stacked metric conditions.
    Conditions. Metric, period, operator, value — joined with AND or OR, and nestable, so a rule can say something a dropdown cannot.
  • The AdOps metric picker open over a condition row: a panel with Meta Ads and Custom metrics tabs, a search box, and a scrolling list of metrics with Spend selected.
    Metric picker. Forty-five Meta metrics and your own sheet columns in the same list, each carrying a reporting period and any of six operators.
  • The AdOps dayparting timetable: a grid of hours against the seven days of the week, with the daytime hours filled navy for every day and the night hours and weekend evenings left empty.
    Dayparting grid. Or draw the hours instead. Anything outside the shape you fill in simply does not run.
  • An AdOps execution log detail: one campaign, two action panels badged Not Executed, each listing the action parameters and every condition evaluated with its actual value, its expected value and a Pass or Fail badge.
    Rule Log detail. Why a rule did nothing is recorded as carefully as why it did something — actual against expected, condition by condition.
  • The AdOps activity log listing budget increases and campaign renames, each row naming the affected campaign by id, the rule that caused it and how long ago it happened.
    Activity Log. One row per change AdOps made in your account, naming the campaign and the rule responsible.
  • The AdOps ad account list: eighteen Meta ad accounts with on/off toggles, account ids, Active or Inactive badges and this month’s spend in rupiah.
    Ad Accounts. Accounts discovered from Meta arrive switched off. Nothing is read, and nothing is changed, until you turn one on.
  • The AdOps custom metric editor mapping a Google Spreadsheet: a spreadsheet id, a sheet name, a column to match campaigns on and a column holding the values.
    Custom metric. Point AdOps at a sheet, name the matching column and the value column, and your own number joins the metric list.

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