The check depends on somebody remembering
Ad spend is one of the few figures in marketing that a company can overshoot in a week and not notice until the invoice arrives. The team agrees the budget at the start of the month and sets the campaigns up against it. After that, the comparison depends on a person opening the platform and doing the arithmetic. We have sat with teams where that person has a name, and the check happens on a quiet morning. Some months the quiet morning doesn't come.
The platforms don't do the check for anyone. A daily cap on a campaign is not a monthly budget, because the platform is allowed to overrun the daily figure on a busy day and make it up on a quiet one. We usually find several campaigns with their own caps, and nobody has added them up. We have watched a new one get launched in the middle of the month by someone who did not know the total. Somebody raises the cap on an old one for a promotion and never lowers it again.
Underspend is the quieter failure and we see it just as often. Somebody pauses a campaign for a creative change and nobody restarts it, or a card expires and the platform stops serving until somebody reads the email. The month ends with approved money still sitting in the account, and nobody has built the report that would show it. We trace both back to a comparison done from memory.
What the alert compares
We need two numbers for the alert, and the first is the harder one to get. The monthly budget has to exist as a figure somebody signed, and we hold it outside the ad platform, because the budget field inside the platform belongs to whoever last edited a campaign. We put it in a sheet the client owns, one line per platform per month, with the name of the person who approved it next to the figure. The second number is easier. It is the spend so far this month, and we have the system pull it each morning so that nobody types it in.
Each morning we compare the spend so far with where the month should be. That is the budget divided by the days in the month and multiplied by the days that have passed, and it gives a line the spend is expected to sit on. We start with a straight line even where spend doesn't run evenly, because the platform's own scheduling handles the weekday and weekend difference inside the week. Where a launch month is going to spend more in its first week, we put weekly figures in the sheet and the line follows them.
We watch both directions. The finance director asks about overspend. Underspend is the one we have to argue for, because a budget that was not spent bought nothing that month, and the enquiries it was meant to produce will not arrive next month at a discount. We have the alert give the gap in money and as a share of the budget, with the direction written out in words, so the person reading it can act without opening anything.
The threshold decides whether it gets read
An alert that fires every morning is a newsletter, and the team reads it like one. We spend most of the judgment in this build on the threshold. A line set too tight fires on ordinary daily variance, since a platform spends a little more on a Monday than on a Saturday. Messages about nothing get the channel muted. A line set too loose fires after the money has gone.
We work on a band around the expected line. We take the width from what the account did over the previous three months, and the people who will receive the alert are in the room when we set it. Somebody has to say out loud how far off pace they would want to hear about. That figure is the threshold. We put it in the same sheet as the budget, next to the number it applies to.
The band is not the same width all month. In the first few days a single slow morning is a large share of what should have been spent, and a fixed percentage fires before there is anything worth reading. We set it wide at the start and narrow it as the month goes on. The first days of the month get no alert at all, and we agree with the client how many. There's nothing useful anyone can do with a pacing figure built on a day's data.
A breach also has to persist before we send anything. We log a single day outside the band and send nothing, since the platform will often correct it on its own the following day. We agree the run of days that counts as a pattern in the same session, and it is short. Past it, the person reading the message knows the platform is not going to fix this without them.
Where the message goes and how often
Every morning, before the working day starts, we run the comparison. We only send the message when the spend has sat outside the band for the agreed run of days. Running it daily and sending it rarely is what keeps it read. A weekly check finds an overspend after most of the week's money has gone, and an hourly one produces figures that mean nothing until the day is over.
We send it to a named person, in a place that person already reads, usually a Slack channel or an inbox. It carries the figures in the body: the account, the budget, the spend so far, the expected spend to date and the gap. Nobody should need to open the platform. The platform is the thing the person wasn't opening in the first place, and an alert that sends them back there has kept the problem and added a message to it. We put a second name on the alert for the days the first one is away.
Silence has to mean something. On its own, a quiet alert is either an account on pace or a connector that broke when somebody changed a password, and from the outside those look the same. So once a week we send a short summary regardless, with the same figures for every account, and we copy the finance director on it, because that summary is how the team knows the check is still running. A week is the longest a broken connector goes unnoticed.




