Google Ads MCC Scripts: Cross-Account Management Automation (2026 Guide)

If you manage one account, you check it daily. If you manage 50 accounts (as an Agency or Holding Company), checking them daily is physically impossible. You need MCC Scripts.
These scripts run at the Manager Level, iterate through every child account, and aggregate the data into a single Master Report (Google Sheet).
In this "Mega-Authority" guide, we cover:
- The Hierarchy: MCC vs Single Account logic.
- The "Master Dashboard" Script: Budget pacing for 100 clients.
- The "Safety Net" Script: Detecting zero-impression accounts.
- Implementation: The
executeInParallelfunction.
Part 1: Theory - The Iterator
Single Account Script:
AdsApp.keywords().get()
MCC Script:
AdsManagerApp.accounts().get()
while (accountIterator.hasNext()) { select(account); ... }
The MCC script opens Account 1, runs logic, saves data. Opens Account 2, runs logic, saves data.
Part 2: The "Master Budget Pacing" Dashboard
The #1 anxiety for agencies: Overspending a client's budget. You need a single Google Sheet that lists:
- Client Name
- Budget
- Spend So Far
- Pacing % (Heatmap)
The Logic:
- Script loops through all accounts with label "Active".
- Fetches
costforTHIS_MONTH. - Fetches budget amount.
- Calculates %.
- Pushes row to sheet.
Benefit: You look at ONE screen in the morning. If rows are Green, drink coffee. If Red, take action.
Part 3: The "Zero Impression" Alarm
Sometimes, credit cards fail. Or a client changes permissions. Or ads get disapproved. The account stops serving. If you don't notice for 3 days, you get fired.
The Script:
- Check
impressionsforYESTERDAY. - If
impressions == 0ANDAccountStatus == ENABLED. - Email Alert: "CRITICAL: Account X has 0 impressions."
Part 4: Implementation - Setting it Up
- Login to your MCC.
- Tools -> Bulk Actions -> Scripts. (Note: Must be at MCC level).
- New Script.
- Code: Use
AdsManagerApp.accounts()selector. - Authorize: Requires OAuth for all child accounts.
- Schedule: Hourly.
Part 5: Summary & Checklist
Your Action Plan:
- Install the "MCC Budget Pacing" script (Search GitHub for "Google Ads MCC Budget Script").
- Install the "Link Checker MCC" (Check all client links at once).
- Label your accounts. (Exclude "Cancelled" clients using script filters).
- Build your morning routing around the Master Sheet, not the Google Ads interface.
Scale your time, not your stress.
The "Anomaly Detector" — Your 9 AM Alert System
The most valuable MCC script checks every client account's yesterday spend and conversions against the 4-week rolling average and emails you a summary every morning at 9 AM.
Example alert output:
- Client B: Spent $0 (usually $500/day) → Possible credit card expiry or campaign pause
- Client F: Spent $2,000 (usually $200/day) → Possible runaway broad match or budget error
Without this, you'd need 3 hours to manually spot these problems. With it, you see both anomalies in 30 seconds at the top of your inbox.
"Click-Monkey" vs. Strategist
If you're manually logging into 50 accounts every morning to check performance, you're not a strategist — you're a Click-Monkey.
The math: 50 accounts × 10 minutes each = 8 hours. Repeat every day. That leaves zero time for actual strategy, creative testing, or client communication.
MCC automation reduces those 8 hours to 15 minutes of reviewing a single Google Sheet. The other 7 hours and 45 minutes are now available for work that actually grows the business.
The Budget Pacer Sheet
The second critical MCC script outputs a Google Sheet updated daily with:
| Client | Budget | Spend MTD | Projected Spend | % Pacing |
|---|---|---|---|---|
| Client A | $10,000 | $3,200 | $9,600 | 96% ✅ |
| Client B | $5,000 | $2,800 | $8,400 | 168% 🔴 |
Conditional formatting: Red (>110%), Yellow (<90%), Green (on track). You see at a glance which clients are overpacing and will blow their budgets by the 20th, and which are underpacing and will miss their targets.
Management by Exception: Ignore green rows. Act only on red and yellow.
Label Selectors — Safety First
Never write an MCC script that iterates over ALL accounts without a safety filter.
// SAFE — only touches labeled accounts
var accountSelector = AdsManagerApp.accounts()
.withCondition("LabelNames CONTAINS 'Script_Active'");
First, add the label "Script_Active" manually to the accounts you want the script to manage. Then run.
Without this, a script with a bug could accidentally pause campaigns across all 50 clients simultaneously. The label is your circuit breaker.
Note: MCC-level scripts use AdsManagerApp (not AdsApp). This is the single most common syntax error when adapting single-account scripts to MCC use.

About the Author
Performance marketing specialist with 6 years of experience in Google Ads, Meta Ads, and paid media strategy. Helps B2B and Ecommerce brands scale profitably through data-driven advertising.
Continue Reading
Need this implemented for you?
Read the guide, or let our specialist team handle it while you focus on the big picture.
Get Your Free Audit