Ad Narrator.
← Blog

Guide · 2026

Google Ads budget pacing scripts: a practical guide

Google Ads scripts let you automate budget pacing in plain JavaScript, so you can catch overspend before it happens instead of after the invoice lands. This guide walks through a working pacing script and how to customize it for your accounts.

What is budget pacing?

Pacing compares how fast an account is spending against where it should be for the month. If you have a $35,000 monthly target and you are 14 days in having spent $18,240, a simple run-rate projection puts you around $39,000 by month end, roughly 12% over. Pacing scripts calculate that projection automatically and alert you the moment an account drifts off target.

A working pacing script

Paste this into Tools & Settings, Bulk actions, Scripts in Google Ads, then authorize and schedule it to run daily. It sums month-to-date cost, projects a month-end total, and emails you when the account is pacing over threshold.

function main() {
  const TARGET = 35000;        // monthly budget target
  const ALERT_THRESHOLD = 0.1; // alert at 10% over pace

  const now = new Date();
  const dayOfMonth = now.getDate();
  const daysInMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0).getDate();

  // Month-to-date cost across the account
  const report = AdsApp.report(
    "SELECT metrics.cost_micros " +
    "FROM customer " +
    "WHERE segments.date DURING THIS_MONTH"
  );
  let costMicros = 0;
  const rows = report.rows();
  while (rows.hasNext()) {
    costMicros += Number(rows.next()["metrics.cost_micros"]);
  }
  const mtdSpend = costMicros / 1e6;

  // Simple run-rate projection
  const projected = (mtdSpend / dayOfMonth) * daysInMonth;
  const pace = projected / TARGET - 1;

  Logger.log("MTD: $" + mtdSpend.toFixed(0));
  Logger.log("Projected: $" + projected.toFixed(0));

  if (pace > ALERT_THRESHOLD) {
    MailApp.sendEmail(
      "you@example.com",
      "Budget pacing alert",
      "Projected $" + projected.toFixed(0) +
      " vs target $" + TARGET +
      " (" + (pace * 100).toFixed(0) + "% over pace)."
    );
  }
}

Customizing the script

  • Change the target. Set TARGET to each account's monthly budget, or read it from a Google Sheet so non-technical teammates can update it.
  • Tune the alert threshold. Lower ALERT_THRESHOLD to catch drift earlier, or raise it to cut noise on volatile accounts.
  • Smarter projections. Weight recent days more heavily, or exclude weekends, if your spend curve is not linear across the month.
  • Multiple recipients. Swap MailApp.sendEmail for a comma separated list, or post to Slack via a webhook.

Where scripts fall short

Scripts are powerful but they live inside a single Google Ads account, run on Google's schedule, and break quietly when the API changes. They also do not cover Meta Ads, so cross-channel budgets still need stitching together by hand. If you manage many accounts or want one view across Google and Meta, a dedicated tool saves the maintenance overhead.

Skip the scripting

Ad Narrator Budget Monitor does the same pacing math across Google Ads and Meta Ads, with month-to-date spend, projected month-end totals, and email alerts before you overspend, without a line of code to maintain.

Explore Budget Monitor