Feature

The evidence trail behind every AdOps rule run

Updated 20 August 2026

Every AdOps rule run writes a batch record plus one result row per campaign per task. The Rule Log Detail screen shows an Executed, Not Executed or Skipped badge, the action parameters, the before and after values where something changed, how many seconds the run took, and the next scheduled execution.

Batch records, per-campaign per-task results, condition-level pass and fail evidence, and before and after values for every change.

In numbers

The figures behind this feature

Execution badges
3 Executed, Not Executed, Skipped, plus Pass or Fail per condition
Recorded per result
Action, parameters, level, ad account Plus batch id, task id, campaign snapshot and next execution time
Execution step names
4 execution_skipped, insights fetch, condition calculation, condition check
Slow execution threshold
10 seconds Renders red in the log detail; over 5 seconds renders amber
Batch statuses
2 RUNNING while the batch is in flight, DONE when it ends
Cooldown skip reason
next_execute_not_reached Written with the time the cooldown expires
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

Every AdOps rule run leaves evidence. AdOps writes one batch record per run and one result row per campaign per task, carrying an Executed, Not Executed or Skipped badge, the action’s parameters, each condition’s pass or fail with the value read, before and after values on changes, the execution time and the next scheduled execution.

Why does the log matter more than the feature list?

Because automation that spends money is only worth running if you can answer two questions afterwards: what did it do, and why. A rules engine without evidence asks you to trust it. A rules engine with per-condition evidence lets you check it, and checking is what makes it safe to widen the rule to more accounts.

The log is also where a rule gets debugged. A threshold that never fires and a threshold that fires on every campaign look identical from the outside. In the log they look completely different, because the actual value the engine read is printed next to the expected value on every condition.

What does a batch record hold?

Rule Logs lists execution batches with four columns: Execution Time, Ad Account, Applied Items and Affected Tasks. Applied items renders as a badge, and affected tasks renders green when something happened and grey when nothing did, so a month of runs can be scanned in a few seconds.

Behind each row sits a benchmark document keyed on the batch id, carrying the rule, the ad account, the start time, the number of applied items, a running execute count and a status of RUNNING or DONE. The record is written as an upsert on the batch id, so a job that the queue redelivers reuses the same row rather than leaving duplicate half-finished audit lines.

Beside the table, a Rule details card shows the rule name, its list of actions, its schedule rendered either as a run interval or a per-day timetable, and who last updated it.

What does the detail view show per campaign?

Opening a batch shows every campaign it evaluated. For each campaign, one card per task.

The card header carries the action icon and label, one of three badges, and the timing. Executed means the action ran. Not Executed means the conditions did not pass. Skipped means a cooldown blocked the evaluation before it began.

The card body has two columns.

Action Details prints the parameters the action actually used. For a name action that is the mode, the separator and the text. For a budget action that is the increase value, the maximum budget cap and the value type. For a replace action it is the find text and the replacement. Below them sit the level badge, the ad account and the executed-at time.

Condition Evaluations prints each condition as the metric label with its reporting period, a green Pass or red Fail badge, and the sentence Actual value, operator, Expected value. Where the condition used a custom metric, AdOps resolves the stored id back into the metric’s real name, so the log reads in the language you named things in rather than as a database id.

When an action changed something, a Value Changes block shows Before in red and After in green. Budget and name actions record this pair; the three lifecycle actions record the status they wrote rather than a before and after.

How do you find a run that was slow?

Every result carries a total execution time, colour graded in the detail view: green under 5 seconds, amber from 5, red past 10. Administrators additionally see an Execution Steps timeline, a numbered list of the internal stages with the elapsed seconds and a pass or fail chip for each.

Four step names appear: the skipped marker written when a cooldown blocked the run, the batched Meta Insights fetch, one entry per condition calculation, and the final condition check. Reading that list tells you whether a slow run was slow because Meta was slow or because the rule asked for too much.

The Benchmark page collects both angles. A Queue Progress tab lists batches in flight with start date, rule name, ad account and a progress bar reading executed against total. A Slow Rule tab filters executions by a minimum execution time, defaulting to 10 seconds, over a date range, and prints per-execution timing, the initial and new values of the action, the per-step breakdown in seconds and every condition’s pass or fail.

What if you only want to see what changed?

Use the Activity Log. It returns only results where an action really ran, enriched with the rule name, an event name combining the action and the level, the affected campaign as an ID and name badge, and the time of the change. A six-field filter panel narrows it by event name, ad account, rule name, entity ID, entity name and action, and the filter pill shows a dot whenever a filter is active.

Clicking a row opens the same evidence in a modal: the affected campaign, the rule, the action, the ad account, the time, and each condition’s pass or fail with the value read, plus a link into the full logs.

Capabilities

What this feature does, item by item.

Each line is a behaviour you can reproduce in the product today.

One record per campaign per task
Every campaign a rule evaluated writes a result row for every task, whether or not an action ran, carrying the action, its parameters, the level, the ad account and the batch it belonged to.
Three execution states
Each task on each campaign carries an Executed, Not Executed or Skipped badge, so a run that did nothing is distinguishable from a run that was blocked by a cooldown.
Condition-level pass and fail
The detail view prints every condition as Actual against Expected with a green Pass or a red Fail, so you can see the exact number the engine read for each metric.
Before and after on changes
Budget and name actions stamp the old value and the new value onto the result, which the detail view renders as a Before and After block.
Timing you can act on
Each result carries a total execution time, colour graded past 5 and 10 seconds, and admins additionally get a numbered step timeline with per-step durations.
One run, three tasks, one budget change from 150,000 to 250,000. The log records all three, not only the one that fired. No sound. 8 sec No sound

Questions

Asked about this feature.

Direct answers, with the numbers attached.

How do I find out why AdOps paused a campaign?

Open the rule log for the batch that ran. AdOps shows the campaign, the task, an Executed badge, the action parameters it used, and a Condition Evaluations panel printing each condition as Actual against Expected with a Pass or Fail badge, so the number that triggered the action is visible.

Does AdOps log runs where nothing happened?

Yes. AdOps writes a result row for every campaign a rule evaluated and every task in that rule, whether or not the action ran. A campaign that failed its conditions carries a Not Executed badge and still shows every condition and the value the engine read.

What does the Skipped badge mean?

Skipped means an action cooldown blocked the evaluation. AdOps writes an explicit skipped result carrying the reason next_execute_not_reached and the time the cooldown expires, so the gap in activity is explained rather than left for you to guess about.

Can I see what a budget was before AdOps changed it?

Yes for budget and name actions. Those actions stamp a before value and an after value onto the campaign's result row, and the log detail renders them as a Before and After block, showing old and new budget or old and new campaign name.

How long did a rule take to run?

Each result carries a total execution time in seconds, rendered in green under 5 seconds, amber between 5 and 10, and red past 10. The Benchmark page adds a slow-rule report that filters executions by a minimum execution time, defaulting to 10 seconds.

Write this rule against your own account.

Every feature on this page is available on every plan. Connect one ad account, copy a template, and read the log after the first run.

Contact us See pricing

14 days free · no card · 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