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#
- Open New automation
In the sidebar, select Automation Agents, then + New Agent. The page is titled New automation.
- 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).
- Create it
Select Create automation or press ⌘/Ctrl + Enter.
- 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.
| Metric | What it measures |
|---|---|
real_roas | Corrected ROAS: revenue from your own orders matched to clicks, ÷ spend |
campaign_reported_roas | ROAS as the platform reports it, on its own attribution basis |
roas_gap | Platform ROAS ÷ corrected ROAS: how much the platform over-claims |
roas | ROAS on the workspace's default basis |
campaign_spend | Spend in the window, in the workspace currency |
campaign_attributed_revenue | Revenue the platform attributes to the campaign |
campaign_attributed_orders | Orders the platform attributes to the campaign |
campaign_impressions | Impressions in the window |
campaign_cpm | Cost per thousand impressions |
cac | Cost 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.
| Cadence | When to use it |
|---|---|
| Event-based | Runs when something happens: a sync completes, an order lands, a watch diverges |
| Every 5 minutes | For spend caps and outages. Uses the most credits |
| Every hour | The 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 10am | Morning reports and daily checks |
| Every weekday at 10am | The same, skipping weekends |
| Every Monday at 10am | Weekly optimisation and reports |
| Monthly (1st at 10am) | Monthly reviews and structural decisions |
| Once | Run 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#
| Action | What happens | Mode |
|---|---|---|
| Send a report | A scheduled summary by email or Slack, whether or not a condition is met | Runs on its own |
| Send an alert | A message by email or Slack when the condition is met, with the numbers and a link to the evidence | Runs on its own |
| Pause a campaign | Pauses the campaign on the platform | Proposed for approval |
| Enable a campaign | Turns a paused campaign back on | Proposed for approval |
| Set budget by multiplier | Multiplies the current budget, for example 0.8 to cut by 20% | Proposed for approval; capped |
| Set budget to an amount | Sets the budget to a fixed amount | Proposed 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#
| Goal | Say this |
|---|---|
| Stop wasted spend | Pause any campaign with 50 clicks and no orders in the last 7 days |
| Protect efficiency | Alert me when corrected ROAS on any Meta campaign is under 2 for three days |
| Cap spend | Alert me on Slack when total ad spend goes over $500 in a day |
| Catch a tracking break | Alert me if the ROAS gap on Google doubles week over week |
| Morning read | Email me every weekday at 9 with yesterday's spend, revenue and corrected ROAS by platform |
| Weekly review | Every Monday, send a report of the top 10 campaigns by spend with their ROAS and ROAS gap |
| Stock safety | Pause ads for any product under 5 days of cover, and tell me |
| Budget discipline | Lower 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.