# Metrics library

> Forty-five Meta Ads metrics in six categories, eleven reporting periods per condition, and metric-versus-metric comparison.

Source: https://adops.id/features/metrics-library/
Last updated: 2026-08-20
Publisher: AdOps (https://adops.id) — an independent product, not affiliated with Meta Platforms, Inc.

---

## Key facts

- **Metrics available:** 45 (Selectable in any rule condition)
- **Categories:** 6 (conversion 16, cost_efficiency 15, engagement 7, time_based 3, core_performance 2, custom 2)
- **Reporting periods:** 11 (From Today through Lifetime)
- **Period-capable metrics:** 39 of 45 (6 metrics are point in time and take no lookback window)
- **Dayparting metrics:** 2 (Time greater than and Time less than, both weekday aware)
- **Calculation strategies:** 7 (direct, nested_array, custom_calculation, direct_api_call, separate_api_call, time_condition, time_difference)

## Capabilities

### Six categories, one catalogue

Conversion holds 16 metrics, cost efficiency 15, engagement 7, time based 3, core performance 2 and custom 2. The same catalogue drives the rule builder and the AI rule builder.

### Eleven reporting periods

Any of the 39 period-capable metrics can be judged over today, yesterday, rolling 3 and 7 day windows, 3, 7, 14 and 30 day presets, this month, last month or lifetime.

### Metric against metric

Switch a condition's compare mode to metric and the threshold becomes another metric with its own period, so a rule can test today's spend against last week's revenue.

### Six units, honestly typed

Metrics carry a unit of count, currency, percentage, ratio, hours or hour of day, and a data type of number or hour, so the builder knows what kind of value to ask you for.

### A governed catalogue, not a hardcoded list

Each metric is a database document with a category, a unit, an API field, a calculation strategy and the exact operators it allows. Deactivating a metric removes it from the next request.

AdOps gives a rule condition 45 Meta Ads metrics to read, organised into 6 categories and evaluated over any of 11 reporting periods. Thirty-nine of those metrics accept a lookback window; the other six are point-in-time values such as Daily Budget and Hours since creation. A condition can also compare one metric against another metric rather than a fixed number.

## What are the six metric categories?

| Category | Metrics | What it covers |
| --- | --- | --- |
| conversion | 16 | Purchase, lead, cart, checkout, registration and subscription counts and values |
| cost_efficiency | 15 | Cost per action, CPC, CPM and the two ROAS ratios |
| engagement | 7 | Impressions, clicks, link clicks, CTR variants, landing page views, content views |
| time_based | 3 | Hours since creation and the two time-of-day conditions |
| core_performance | 2 | Spend and Daily Budget |
| custom | 2 | Remaining budget and Lifetime budget |

## What is the full metric list?

Each row is the label you pick in the builder and the metric key AdOps stores on the condition.

| Category | Metric | Key |
| --- | --- | --- |
| core_performance | Spend | `spend` |
| core_performance | Daily Budget | `daily_budget` |
| conversion | Purchases | `actions.omni_purchase` |
| conversion | Purchase Value | `action_values.omni_purchase` |
| conversion | Website Purchases | `actions.offsite_conversion.fb_pixel_purchase` |
| conversion | Website purchase value | `action_values.offsite_conversion.fb_pixel_purchase` |
| conversion | Adds to cart | `actions.omni_add_to_cart` |
| conversion | Adds to cart value | `action_values.omni_add_to_cart` |
| conversion | Checkout initiated | `actions.omni_initiated_checkout` |
| conversion | Checkout initiated value | `action_values.omni_initiated_checkout` |
| conversion | Adds of payment info | `actions.add_payment_info` |
| conversion | Add of payment info value | `action_values.add_payment_info` |
| conversion | Leads | `actions.lead` |
| conversion | Leads value | `action_values.lead` |
| conversion | Registration completed | `actions.omni_complete_registration` |
| conversion | Registration completed value | `action_values.omni_complete_registration` |
| conversion | Subscription | `conversions.subscribe_total` |
| conversion | Subscription value | `conversion_values.subscribe_total` |
| cost_efficiency | Purchase ROAS | `purchase_roas.omni_purchase` |
| cost_efficiency | Website Purchases ROAS | `website_purchase_roas.offsite_conversion.fb_pixel_purchase` |
| cost_efficiency | Cost per Purchase | `cost_per_action_type.omni_purchase` |
| cost_efficiency | Cost per Website Purchase | `offsite_conversion.fb_pixel_purchase` |
| cost_efficiency | Cost per add to cart | `cost_per_action_type.omni_add_to_cart` |
| cost_efficiency | Cost per checkout initiated | `cost_per_action_type.omni_initiated_checkout` |
| cost_efficiency | Cost per add payment info | `cost_per_action_type.add_payment_info` |
| cost_efficiency | Cost per lead | `cost_per_action_type.lead` |
| cost_efficiency | Cost per registration completed | `cost_per_action_type.omni_complete_registration` |
| cost_efficiency | Cost per content view | `cost_per_action_type.omni_view_content` |
| cost_efficiency | Cost per landing page view | `cost_per_action_type.landing_page_view` |
| cost_efficiency | Cost per subscribe | `cost_per_conversion.subscribe_total` |
| cost_efficiency | CPC | `cpc` |
| cost_efficiency | CPC (link) | `cost_per_action_type.inline_link_click` |
| cost_efficiency | CPM | `cpm` |
| engagement | Impressions | `impressions` |
| engagement | Clicks | `clicks` |
| engagement | Link clicks | `inline_link_clicks` |
| engagement | CTR | `ctr` |
| engagement | CTR (link clicks) | `inline_link_click_ctr` |
| engagement | Landing page views | `actions.landing_page_view` |
| engagement | Content views | `actions.omni_view_content` |
| time_based | Hours since creation | `created_time` |
| time_based | Time greater than | `time_greater_than` |
| time_based | Time less than | `time_less_than` |
| custom | Remaining budget | `custom.budget_remaining` |
| custom | Lifetime budget | `custom.lifetime_budget` |

## Which reporting period should a condition use?

Eleven windows are available per condition: `today`, `yesterday`, `custom_last_3_days` (last 3 days including today), `last_3d`, `custom_last_7_days` (last 7 days including today), `last_7d`, `last_14d`, `last_30d`, `this_month`, `last_month` and `maximum` (lifetime). The two `custom_` windows are rewritten locally into an explicit Meta date range; the rest are passed through as Meta date presets.

Because the period lives on the condition rather than the rule, one task can weigh a 30-day trend against today's spike. A pause rule that reads `Purchase ROAS` over `last_7d` and `Spend` over `today` in the same task is normal, and both windows are fetched in the same Meta Graph batch request.

## How does metric-versus-metric comparison work?

Each condition carries a compare mode of `value` or `metric`. In `value` mode the right-hand side is the number you typed. In `metric` mode it is a second metric key with its own period, defaulting to today, and your typed number becomes a multiplier on it.

That turns a currency threshold into a relationship. Instead of pausing at a hardcoded cost figure that goes stale after every price change, a rule can test spend against revenue for the same campaign. The effective threshold the engine computed is written back onto the saved result, so the log shows both the metric it read and the number it compared against.

The compared side has the full vocabulary, not a reduced one. It accepts a custom metric backed by Google Sheets, the live daily budget, remaining and lifetime budget, and any dotted Meta action-type breakdown, each with its own period.

## What sits behind a metric in the catalogue?

A metric is a stored document, not a hardcoded string. It carries an id, a display name, a category, a description, a data type of `number` or `hour`, one of 6 units, whether it supports a period, whether it supports weekdays, the Meta API field and nested key, one of 7 calculation strategies, and the exact list of comparison operators that metric allows.

The same catalogue is served to the rule builder and injected into the AI rule builder's prompt on every generation, so the two never drift apart.
