Daily Google Ads budget pacing alerts in Slack
Get a Slack ping when any active Google Ads campaign is pacing more than 20 percent above or below its monthly budget. Silent on healthy days.
Build me a daily Google Ads budget pacing watchdog that posts to Slack. It should run once per day on a cron (default 9am in my local time zone) and only send a Slack message when at least one active campaign is off pace. Healthy days should be silent.
Step 1. Pull the data from Google Ads. Use the Search Stream (Streamed GAQL Query) operation on the google-ads integration with a single GAQL query against the campaign resource that returns, for every ENABLED campaign: campaign.id, campaign.name, campaign.status, campaign_budget.amount_micros, campaign_budget.period, and month to date metrics.cost_micros. Use segments.date DURING THIS_MONTH (or an equivalent BETWEEN filter from the first of the current month through today) so cost_micros aggregates month to date. Filter WHERE campaign.status = 'ENABLED'. Divide every _micros field by 1,000,000 to get the display value in the account currency.
Step 2. Compute expected spend for each campaign. Let day_of_month = today's day number and days_in_month = the total days in the current month. Expected spend = (day_of_month / days_in_month) * monthly_budget. Actual spend = month to date cost. Variance percent = (actual - expected) / expected * 100. Also compute projected month end spend = actual * (days_in_month / day_of_month). Skip any campaign that has no monthly budget attached.
Step 3. Bucket the results. Flag any campaign whose variance is greater than the threshold (default 20 percent). Split flagged campaigns into two groups: 'At risk of overspend' (variance > +20 percent) and 'Underpacing' (variance < -20 percent). If neither group has any campaigns, exit without sending anything.
Step 4. Post one Slack alert using the slackbot integration's Send a Message operation. Target channel should be configurable, default to #paid-media-alerts. Format with Slack mrkdwn. Include a header like '⚠️ Google Ads pacing alert for <Month> <Year>' and, for each bucket, a bulleted list of campaigns with: campaign name, monthly budget, month to date spend, expected spend, variance as a signed percent, and projected month end spend. Bold the campaign name. Keep the message scannable, one line per campaign where possible.
Configurable inputs I should be able to edit on the workflow: the pacing threshold (default 20 percent), the Slack channel (default #paid-media-alerts), and the daily run time. Everything else can be inferred from my connected Google Ads and Slack accounts.
Additional information
What does this prompt do?
- Once a day, checks every active Google Ads campaign and compares month to date spend against what it should have spent by today.
- Sorts off pace campaigns into two buckets so you can act fast: at risk of overspend, and underpacing.
- Shows a projected month end total for each flagged campaign, so you know how big the miss will be if nothing changes.
- Stays quiet on healthy days. You only get a Slack message when at least one campaign is off pace by more than the threshold you set.
What do I need to use this?
- A Google Ads account (or manager account) with active campaigns that have monthly budgets set.
- A Slack workspace and the channel you want budget alerts posted to.
How can I customize it?
- Change the pacing threshold. 20 percent is the default, tighten to 10 percent for a stricter watchdog or loosen to 30 percent for less noise.
- Pick a different Slack channel, DM one person, or fan out to multiple channels.
- Adjust the run time. Default is once a day in the morning, but you can move it later, run twice a day, or skip weekends.
Frequently asked questions
How do you decide if a campaign is off pace?
What about campaigns that do not have a monthly budget?
Will Slack get spammy?
Does this work with a Google Ads manager (MCC) account?
Can I add extra detail like conversions or CPC to the alert?
Related templates
Stop finding out about budget blowouts on the 30th.
Connect Google Ads and Slack once, and this pacing watchdog checks every morning and only pings when a campaign is genuinely off track.