Troubleshooting

Reading execution logs

How Rule Logs, the log detail view and the Activity Log record what a rule did, and how to read the evidence. This page of the AdOps documentation sits in the Troubleshooting section, last updated 20 August 2026. AdOps runs rules — conditions plus actions — against your Meta Ads campaigns on the schedule you set.

Updated

Key facts

Execution badges
Executed, Not Executed, Skipped
Rule Logs columns
4 Execution Time, Ad Account, Applied Items, Affected Tasks
Evidence per condition
Pass or Fail plus the actual value shown as "Actual <value> <operator> Expected <value>"
Slow-run colouring
over 10 seconds is red over 5 seconds is amber in the log detail
Log cleanup
daily at 00:00 execution results older than 3 days are removed

Every AdOps run writes two things: one batch record for the run, and one result per campaign per task. The Rule Logs page lists the batches, the batch detail shows each campaign’s tasks with an Executed, Not Executed or Skipped badge, and every condition is stored with the actual value the engine read and a Pass or Fail badge.

Opening the log for a rule

From the Rule List, open a rule’s three-dot menu and choose Logs. The page is headed Rule Logs with a back arrow to the rule.

The table has four columns — Execution Time, Ad Account, Applied Items and Affected Tasks. Applied items render as a blue badge; affected tasks render green when the count is above zero and grey when it is zero. The whole row is a link into that batch. When there is nothing yet the page reads No rule logs found.

On the right, a Rule details card repeats what the rule is: its name linking back to the editor, Actions in rule: N with the action list beneath, a Schedule section reading either “Runs every N minutes” or the per-day timetable from Sun to Sat, and Updated by <user> (<time ago>).

Selecting log rows raises a bulk bar with Delete Selected.

Reading a batch

Clicking a row opens the batch. A summary card names the Rule Name, the Batch ID and the Applied Items count.

Below it, each campaign gets a block: the campaign name and ID: <campaign_id> on the left, and one card per task on the right. The task card header carries the action icon and label, the execution badge, and either Next Execute: <date> or Execution Time: <n>s followed by Next: <date>. Execution time is colour-graded — amber above 5 seconds, red above 10.

The card body has two columns.

Action Details lists the parameters that action ran with — Mode, Separator and Text for Add to name; Increase Value, Max Budget Cap and Type for a budget action; Remove Text; Find Text and Replace With — plus a Level badge, the Ad Account and Executed At.

Condition Evaluations lists every condition with its metric label and period, a green Pass or red Fail badge, and the comparison written out: Actual <value> <operator> Expected <value>. This is the answer to “why did this campaign get paused?” — the number in Actual is the number the engine saw at that moment.

When an action changed something, a Value Changes block shows Before in red and After in green.

If you have the ADMIN role, the detail also renders an Execution Steps timeline: numbered steps with a name, a message, the elapsed seconds and a Pass or Fail chip on the metric evaluated.

An empty batch shows No execution logs found with a Back to Logs button.

The three badges

Executed — the conditions passed and AdOps called Meta.

Not Executed — the task was evaluated and at least one condition failed. Read the Condition Evaluations column to see which.

Skipped — the task was not evaluated because its action frequency cooldown had not elapsed. The result carries the reason next_execute_not_reached and the time the task becomes eligible again, so a quiet rule is explained rather than mysterious.

The Activity Log

Where Rule Logs is scoped to one rule, the Activity Log is one chronological feed across every rule, and it lists only actions that actually executed. Columns are Event, Affected item, Rule and a relative timestamp; the affected item is a campaign badge with its id and name, and the rule links to its editor.

A Filters pill expands six fields — Event Name, Ad Account, Rule Name, Entity ID, Entity Name and Action — with Apply and Reset, and shows a dot badge while any filter is active. Clicking a row opens a modal listing the Affected Campaign, Rule, Action, Ad Account and Time, plus a Rule Conditions: list with each condition’s operator, target and “Current: <value>”, footed by an Open Logs button.

When a run was slow

The Benchmark page has two tabs. Queue Progress lists in-flight batches with their start time, rule, ad account and a “Progress: executed/total” bar. Slow Rule filters executions by a Minimum Time in seconds (the field defaults to 10) and a date range of Today, Yesterday, Last 7 days or Last 30 days, then prints the per-step timing breakdown and every condition’s Pass or Fail for each slow execution.

Keeping evidence

A cleanup job runs daily at midnight and removes execution results older than 3 days, and you can clear a rule’s logs yourself — the confirmation reads “Clear All Logs?”. Export anything a client or an audit will need before it ages out.

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.
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 about this page

What is the difference between Not Executed and Skipped?

Not Executed means the task was evaluated and its conditions did not all pass. Skipped means the task was not evaluated at all because its action frequency cooldown had not elapsed; the result carries the reason next_execute_not_reached and the time the task becomes eligible again.

Where do I see what a budget action actually changed?

In the log detail, the Value Changes block shows Before in red and After in green. Budget and name actions record it. Start, Pause and Delete do not write a before-and-after pair, so their evidence is the Executed badge.

How long are logs kept?

A cleanup job runs daily at 00:00 and removes execution results older than 3 days. Treat the log as recent history, not an archive, and export anything you need to keep.

What does the Activity Log show that Rule Logs does not?

The Activity Log is a single chronological feed of actions that actually executed, across every rule, filterable by Event Name, Ad Account, Rule Name, Entity ID, Entity Name and Action. Rule Logs is scoped to one rule and includes runs where nothing was executed.

Read it once, then write the rule.

Everything in this manual describes a screen you can open today. Start a trial and follow along in the product rather than on the page.

Start free trial Documentation

14 days free · no card required

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