Meerkats AI

Rules

Watch a metric, set a threshold and choose what happens when it's crossed.

A rule watches one metric and decides what happens when it crosses a line. It is the simplest automation in Meerkats, and the one most people start with: “Email me Flipkart campaigns with ROAS below 0.5 every morning”, “Pause any Google Search campaign whose corrected ROAS stays under 2 for four days”, “Alert me on Slack when total ad spend goes over $500 in a day”.

You write it in plain words. Meerkats turns it into a rule with a metric, a condition, a window, a schedule and an action, shows you what it understood, and runs it. When the condition is met, the rule either sends you something (a report or an alert) or proposes a change for approval. Rules live under Automation Agents in the sidebar.

Create a rule#

  1. Open New automation

    In the sidebar, select Automation Agents, then + New Agent. The page is titled New automation.

  2. Describe it

    Type what you want in the box, or click one of the example prompts under it. Say the metric, the line, how long it must hold, how often to check, and what to do. Meerkats supports scheduled reports, alerts by email or Slack, conditional alerts, and conditional campaign changes (pause, enable, budget).

  3. Create it

    Select Create automation or press ⌘/Ctrl + Enter.

  4. Check what Meerkats understood

    The rule is shown back as fields: metric, comparator, threshold, window, platform and target, schedule, cooldown, action and mode. Fix anything that isn’t what you meant. A rule that changes something starts in suggest mode, which means it proposes and you approve.

Say the window

“Below 2” and “below 2 for four days” are different rules. Without a window, Meerkats uses four days, so one bad afternoon doesn’t fire the rule. Say “for one day” if you want it faster.

The fields#

Metric#

Any metric a rule can watch comes from the semantic layer, so it means the same thing everywhere.

MetricWhat it measures
real_roasCorrected ROAS: revenue from your own orders matched to clicks, ÷ spend
campaign_reported_roasROAS as the platform reports it, on its own attribution basis
roas_gapPlatform ROAS ÷ corrected ROAS: how much the platform over-claims
roasROAS on the workspace's default basis
campaign_spendSpend in the window, in the workspace currency
campaign_attributed_revenueRevenue the platform attributes to the campaign
campaign_attributed_ordersOrders the platform attributes to the campaign
campaign_impressionsImpressions in the window
campaign_cpmCost per thousand impressions
cacCost to acquire a new customer

Metrics are measured over the window, per campaign (or across the platform if no campaign is targeted), in the workspace currency.

Condition#

A comparator and a threshold: below (lt), at or below (lte), above (gt), at or above (gte), or equal (eq). Thresholds are plain numbers: 2.0 for a ROAS, 500 for spend in your currency.

Window#

How many days the condition must hold before the rule fires: 1 to 90, default 4. The window makes the rule stateful: it fires on a sustained condition, not a blip. Spend with zero conversions younger than three days is treated as attribution lag, not failure, so a short window on a ROAS rule won’t pause a campaign for conversions that haven’t arrived yet.

Platform and target#

One platform, or any. One campaign by name, or all campaigns on that platform. A rule across all campaigns evaluates each campaign separately and can fire on several at once; each becomes its own line in the proposal.

Schedule#

How often the rule is evaluated. The default is every 30 minutes. In the app you pick a cadence; over the API it is a five-field cron.

CadenceWhen to use it
Event-basedRuns when something happens: a sync completes, an order lands, a watch diverges
Every 5 minutesFor spend caps and outages. Uses the most credits
Every hourThe default for daily-triage rules on paid plans
Every hour (working hours), Every hour (8am–11pm)Hourly, but only inside the hours you'd act anyway
Every day at 10amMorning reports and daily checks
Every weekday at 10amThe same, skipping weekends
Every Monday at 10amWeekly optimisation and reports
Monthly (1st at 10am)Monthly reviews and structural decisions
OnceRun now, then stop

A rule can only check as often as its data refreshes, which follows your plan: daily on Free, hourly on $49, every 30 minutes on $149, every 15 minutes on $399. A five-minute rule on an hourly plan sees the same numbers twelve times.

Cooldown#

Hours to wait after the rule fires before it can fire again on the same target. Default 24. It stops one dip from producing a proposal every 30 minutes.

Action#

ActionWhat happensMode
Send a reportA scheduled summary by email or Slack, whether or not a condition is metRuns on its own
Send an alertA message by email or Slack when the condition is met, with the numbers and a link to the evidenceRuns on its own
Pause a campaignPauses the campaign on the platformProposed for approval
Enable a campaignTurns a paused campaign back onProposed for approval
Set budget by multiplierMultiplies the current budget, for example 0.8 to cut by 20%Proposed for approval; capped
Set budget to an amountSets the budget to a fixed amountProposed for approval; capped

Budget changes respect the caps on Actions and limits: down by at most 20% per change, up by at most 50% per week per campaign. A rule asking for more is clamped to the cap and says so in the proposal.

Mode#

Suggest stages the change in your Inbox for approval. Auto makes the change when the rule fires, within the caps, and still records everything. Rules that change something start in suggest. Switch to auto only for low-risk actions, and only once the rule’s record in Agents run history shows its proposals were right. See Autonomy.

Manage rules#

On the Agents tab you can search, and filter by platform, cadence and plan. Each rule shows its status.

  • Enable or disable a rule with its switch. A disabled rule keeps its history but doesn’t run.
  • Run now evaluates it immediately, outside its schedule. It uses credits like a scheduled run.
  • Test evaluates it against recent data without sending anything or staging a change, so you can see what it would have done.
  • Edit any field. Edits take effect from the next evaluation.
  • Delete removes the rule. Its past runs stay in Agents run history.

Agents run history shows every evaluation: when it ran, what it read, whether the condition was met, what it proposed or sent, and what happened after. The counters at the top (healthy, needs review, critical, paused, scheduled) summarise the rules in the workspace.

Rules over the API#

The same rule as JSON. The key needs write scope to create or change rules, read to list them.

POST /automations
{
  "name": "Pause low-ROAS search campaigns",
  "description": "Corrected ROAS under 2 for four days",
  "platform": "google",
  "target_campaign": null,
  "metric": "real_roas",
  "comparator": "lt",
  "threshold": 2.0,
  "window_days": 4,
  "action": "pause_campaign",
  "action_value": null,
  "mode": "suggest",
  "schedule_cron": "*/30 * * * *",
  "cooldown_hours": 24,
  "enabled": true
}

action_value is required for the two budget actions: the multiplier, or the amount. GET /automations lists rules, enabled first, newest first. See the API overview for authentication and errors.

Rules people set up first#

GoalSay this
Stop wasted spendPause any campaign with 50 clicks and no orders in the last 7 days
Protect efficiencyAlert me when corrected ROAS on any Meta campaign is under 2 for three days
Cap spendAlert me on Slack when total ad spend goes over $500 in a day
Catch a tracking breakAlert me if the ROAS gap on Google doubles week over week
Morning readEmail me every weekday at 9 with yesterday's spend, revenue and corrected ROAS by platform
Weekly reviewEvery Monday, send a report of the top 10 campaigns by spend with their ROAS and ROAS gap
Stock safetyPause ads for any product under 5 days of cover, and tell me
Budget disciplineLower the budget by 15% on campaigns whose corrected ROAS has been under 1.5 for a week

Troubleshooting#

The rule never fires

Check the window: the condition must hold for the whole window, not just today. Check the platform’s sync in Data Hub › Bronze Layer; a rule on stale data waits for a refresh. And check the cooldown: it may have fired recently.

It fired, but nothing changed

Rules that change something start in suggest mode. The change is in your Inbox waiting for approval.

It fires too often

Lengthen the window or the cooldown. A 24-hour cooldown with a four-day window is a calm default.

The budget change was smaller than I asked

The caps apply to every change: down 20% per change, up 50% per week. The proposal says it was clamped. Approve it, and the rule can take the next step after the cooldown.

Alerts aren't arriving

For Slack, Meerkats must be a member of the channel (/invite @Meerkats). For email, check spam and that the address on the rule is right.

Last updated October 2, 2026