Every performance marketer has woken up to a campaign that spent all night at triple the target cost per lead. The dashboard was right there. Nobody was looking at it at 3am. Here is what we built after the third time that happened, and the two design decisions that made it trustworthy enough to actually leave switched on.
The failure mode nobody budgets for
Cost per lead does not drift gradually most of the time. It steps — a competitor enters the auction, an audience saturates, a creative fatigues — and the step can happen in an hour. A human checking dashboards once a day catches it a day late, which in ad spend terms is not a delay, it is a bill.
The obvious fix is an alert. The better fix is an action, because an alert at 3am gets read at 9am, and the six hours in between are exactly the six hours that mattered.
What "pause the campaign" actually requires
The mechanism: on an hourly sweep, check every active campaign that spent today, compare its cost per lead against a target, and pause the ones that broke it. Two details decide whether marketers actually leave it running.
A minimum-leads gate. One unlucky expensive lead in the first hour of a new campaign should not kill it. The rule only arms once enough leads exist for the cost-per-lead number to mean something. Without this gate, the feature pauses good campaigns on noise, and the first false pause is usually the last time anyone trusts it.
A separate zero-lead spend cap. A campaign that spends money and produces zero leads has an undefined cost per lead — you cannot compare "undefined" against a target, so the rule above can never fire on it. That is precisely the campaign most worth stopping. So a second, independent check exists purely for spend with no leads at all, because the CPL rule structurally cannot catch it.
Miss either of these and the feature is either too trigger-happy to trust or blind to the worst case it exists for.
Scope it per Business Manager, not globally
A target CPL that makes sense for one product line is nonsense for another running in the same ad account. Scoping the rule per Business Manager (or per campaign group) lets the target mean something specific instead of something average.
Tell the human what happened and why
A pause with no explanation reads as a bug. Ours sends a message naming the campaign and the number that triggered it — "CPL hit $X against a target of $Y" or "spent $X with zero leads." That single line is the difference between a marketer trusting the automation and disabling it the first time it surprises them.
What this is not
It is not bid optimisation, and it does not try to fix the campaign — only to stop it from bleeding further while a human decides what changed. Auto-resume is deliberately not part of it: a human should look at why before spend resumes.
The part that made us trust it enough to ship
We run it same-day only — it evaluates today's spend against today's leads, not a rolling average. That is a real limitation, and stating it plainly turned out to matter more than hiding it. A guard rail that oversells its own reliability gets disabled the first time it is wrong in a way nobody warned you about.
This runs in production at Targenix, free lead automation for Facebook and Instagram advertisers, as part of the free plan.
Top comments (0)