Campaign Scheduler
Runs campaigns only inside their date windows — Black Friday starts at 00:00 without anyone staying up, sales end exactly on time, weekend campaigns run only on weekends.
by Dmytro Tonkikh·chiliad.io
Runs campaigns only inside their date windows — Black Friday starts at 00:00 without anyone staying up, sales end exactly on time, weekend campaigns run only on weekends.
by Dmytro Tonkikh·chiliad.io
One table of every campaign's bidding strategy with the two flags that matter: Manual CPC campaigns with enough volume for Smart Bidding, and target-based campaigns too data-starved to learn.
Finds the reallocation hiding in plain sight: efficient campaigns losing volume to budget caps, idle budgets that could fund them, and full budgets funding poor CPAs.
Compares yesterday's average CPC per campaign against its 30-day baseline and alerts on spikes — the earliest visible symptom of a new competitor, broad-match drift, or a bid change gone wrong.
Compares actual spend against your daily budget settings over 1, 7 and 28 days and alerts by email + Google Sheet when Google overdelivers beyond your thresholds.
Compares actual daily spend against the expected pace based on time of day. Logs over- and under-pacing campaigns and can auto-pause overspenders to protect your budget.
Analyses 30 days of hourly performance data across campaigns and calculates recommended ad schedule bid adjustments. Shows the full breakdown per hour before you choose to apply.
Campaign Scheduler enforces date windows per rule: campaigns whose name matches the rule's filter are ENABLED inside the start–end window and PAUSED outside it, with an optional weekday restriction for weekend-only (or weekday-only) campaigns. The script fully owns the on/off state of matching campaigns — configure the sale window once and launch night takes care of itself. Google's native start/end dates can do part of this, but they're one-shot and buried per campaign; rules here are visible, repeatable and weekday-aware.
| Variable | Default |
|---|---|
RULES | [] (examples in the code comments) |
PREVIEW_MODE | true |
EMAIL_ADDRESS | (empty) |
=== Campaign Scheduler (2026-11-27 FRIDAY, LIVE) === [ENABLED] Black Friday — Doorbusters (rule "Black Friday", window 2026-11-27 to 2026-11-30) [ENABLED] Black Friday — Shopping (rule "Black Friday", window 2026-11-27 to 2026-11-30) Email sent to you@example.com
The script owns the enabled/paused state of every campaign matching a rule — don't hand-toggle those campaigns or the next run will toggle them back; remove the rule instead. Windows are day-granular in the account time zone; with an hourly schedule, switches happen within the hour after midnight.