← All skills
Monitoring

meta-anomaly-check

Meta anomaly check

Daily Meta anomaly check against a trailing 14-day baseline. Silent on quiet days; one funded recommendation when something breaks.

What it does

A daily check that alerts every day is ignored by day four. This skill is built around two disciplines: post nothing on quiet days, and when a day is genuinely anomalous, report it with the numbers and at most one funded recommendation.

Every threshold in the method exists to protect those two disciplines. They are tuned from production use on real accounts, not guesses. It is cron-friendly: run it each morning against yesterday, on your own Meta token and ad account.

Quick start

Terminal
git clone https://github.com/PierreNicolasMarquez/pierce-skills.git
cp -r pierce-skills/skills/meta-anomaly-check ~/.claude/skills/

Then in Claude Code: "run the meta-anomaly-check skill on my account".

The full SKILL.md, with the exact API calls, lives in the pierce-skills repo. MIT-licensed, runs on your token, never phones home.

Example output

From a real run on a production account, verbatim.

claude code
> run the meta-anomaly-check skill on my account
yesterday: spend 46.21 clicks 50 leads 10
baseline (14d): 72.51/day, CPC 0.66, CPL 4.57
CPC 1.39x baseline (threshold 1.8x). No anomaly.
verdict: quiet day -> post nothing
# silence is the all-clear

How it works

Yesterday is compared against a 14-day baseline that ends the day before yesterday, so a bad day never contaminates its own baseline.

  1. 1

    Pull yesterday and the baseline

    Two Graph API insights calls at campaign level: yesterday as a single day, and the 14 days ending the day before yesterday. Two practical traps: time_range is JSON and must be URL-encoded, and any error key in a response is a hard stop. A script that reads an error response as no rows will report a quiet day on a broken pipe.

  2. 2

    Apply the volume guards before any judgment

    Judge the account at all only if baseline daily spend is at least 15 euros. Judge CPC only if the baseline averages at least 20 clicks a day. Judge CPL only if yesterday's spend is at least 20 euros. Call a zero-lead day anomalous only if the baseline predicts at least 3 leads a day: with an expected 3, a zero day has under 5% probability; below that, zero is a plausible quiet day, not a signal.

  3. 3

    Check the anomaly thresholds

    After the guards, yesterday is anomalous when any of these hold: CPC at 1.8x baseline or more, CPL at 1.8x baseline or more, spend at 1.5x baseline daily spend or more with the excess at least 15 euros (a 1.5x jump on 4 euros is noise), delivery at 0.35x baseline daily spend or less, or zero leads with a baseline expecting 3 or more.

  4. 4

    Freshness first

    If the insights call returns no rows for yesterday, that is a data problem, not a performance one. Report no data received and stop. A dead pipeline reads exactly like a dead account; never report 0 spend without proving the pipe is live.

  5. 5

    Report with discipline

    No anomalies means say nothing: no all-good message, silence is the all-clear. An anomalous day gets one report: findings ranked zero leads, then CPL spike, CPC spike, overspend, delivery drop; at most 3 findings, each with yesterday's number, the baseline, and the multiple. At most one recommended action, funded by the numbers: the culprit campaign must have spent at least 10 euros yesterday, and the default safe move is a 20% budget cut on its ad set. Recommend, never execute.

Caveats

  • The skill's contract with its reader is that a message means something broke. Resist every temptation to add summaries, streaks, or good news to quiet days.

  • Leads means your conversion action type. The skill asks which one rather than guessing; commonly lead or a pixel or custom conversion.

  • It recommends; it never moves budget. You do.

Related skills

The managed version

Pierce runs this every week on your accounts, and every action it takes is approved by you in Slack.