Hook: One centralized switch to stop brand-safety fires — for all clients, at scale
Agencies waste hours toggling exclusions campaign-by-campaign, juggling client approvals and hunting for rogue placements in Performance Max, YouTube, Display and Demand Gen. In 2026, with Google Ads offering account-level placement exclusions, that manual grind is no longer defensible. This guide gives an agency-ready workflow, governance templates, and ready-to-run bulk scripts so you can roll out, audit and automate account-level exclusions across multiple client accounts without breaking automation or reporting.
The opportunity in 2026: Why account-level exclusions matter now
Late 2025 and early 2026 accelerated two trends that make this workflow essential:
- Google’s account-level exclusions (announced Jan 15, 2026) let advertisers block placements once and apply them across Display, YouTube, Demand Gen and Performance Max — a direct response to advertiser demand for stronger guardrails around automated buying.
- Automation-first campaign types (Performance Max, automated bidding and audience optimization) increase efficiency but reduce per-campaign controls; account-level governance preserves automation benefits while protecting brand safety.
For agencies, the combination means: fewer configuration errors, faster client approvals and simpler audits — but only if you implement a repeatable, auditable workflow and the right automation.
Quick overview: The account-level exclusion workflow
At a glance, your agency should formalize this 6-step flow across the manager account (MCC) and client accounts:
- Discovery — detect risky placements and build candidate lists.
- Triage & policy — classify risk level, assign owner, gather evidence (screenshots, timestamped metrics).
- Approval — client sign-off using a standardized template or auto-approval SLA.
- Implementation — apply account-level exclusions with bulk scripts and track changes.
- Validation — confirm spend stops and update dashboards and logs.
- Monitoring & review — scheduled audits, metrics-based triggers to add/remove exclusions.
Step 1 — Discovery: Find candidate placements fast
Start with data-driven discovery, combining placement performance with signals that flag brand risk (e.g., sudden spikes in impressions on low-conversion placements, high bounce rates or third-party brand-safety feeds).
GAQL query to surface top placements (last 30 days)
SELECT
placement_view.resource_name,
placement_view.url,
metrics.impressions,
metrics.clicks,
metrics.conversions,
metrics.cost_micros
FROM placement_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.impressions DESC
LIMIT 1000Run that via the Google Ads API for each client to get the highest-impression placements. Then join that with:
- Third-party brand-safety feeds (e.g., IAB categories, brand-safety vendors).
- In-house heuristics (CTR drops >50% month-over-month, sudden viewability drops, suspicious app placements).
- User reports and client escalations.
Step 2 — Triage & classification
Create a simple triage matrix and tag candidates:
- High risk — obvious safety violations, immediate account-level exclusion recommended.
- Medium risk — context-dependent; review with creative teams or client.
- Low risk / monitor — keep under watch, auto-remove if metrics improve.
Capture evidence: URLs, screenshots, impression and spend snapshots, relevance notes. Store everything in a central audit bucket (we recommend BigQuery or an S3 bucket indexed by client ID and date). For discovery at scale, pair GAQL outputs with a diagnostic pipeline like the SEO/diagnostic toolkits you already use so audits are reproducible.
Step 3 — Approval & governance
Establish an Account-Level Exclusion Policy that clients sign once per account and that defines:
- Decision ownership (agency lead, client brand safety owner)
- Approval SLA (e.g., auto-apply after 48 hours unless client objects)
- Rollback policy (how and when exclusions can be removed)
- Audit & reporting cadence (weekly automated reports, monthly reviews)
Tip: Use an opt-in workflow where clients can request a stricter “Block-First” posture for high-risk verticals (healthcare, finance, kids).
Step 4 — Implementation: Bulk scripts and templates
This is the heart of the guide. Below are tested templates and a recommended Python script using the Google Ads API. The script reads a CSV of placements and applies account-level exclusions for each client under your Manager account.
CSV template: account_exclusions.csv
manager_customer_id,client_customer_id,placement_url,reason,source,requested_by,requested_atColumns explained:
- manager_customer_id: your agency MCC ID
- client_customer_id: the Google Ads customer ID for the client account
- placement_url: the exact URL or app package to exclude
- reason: short reason e.g., "brand_safety:inaccurate_content"
- source: discovery method e.g., "GAQL:top_placements", "client_report"
- requested_by: owner email
- requested_at: ISO timestamp
Python: Bulk apply account-level exclusions (outline)
This script assumes you have a configured google-ads client library and manager credentials that can impersonate client accounts. It uses batch mutate operations so you can safely run large CSVs.
#!/usr/bin/env python3
# bulk_account_exclusions.py
# Requirements: google-ads (Python library), credentials with manager access
from google.ads.googleads.client import GoogleAdsClient
import csv
import time
CLIENT_CONFIG_PATH = 'google-ads.yaml'
CSV_FILE = 'account_exclusions.csv'
def apply_exclusions():
client = GoogleAdsClient.load_from_storage(CLIENT_CONFIG_PATH)
with open(CSV_FILE, newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
customer_id = row['client_customer_id']
placement = row['placement_url']
reason = row['reason']
# NOTE: Replace `CustomerNegativeCriterionService` below with the
# exact service name for account-level placement exclusions in your
# API version. This is a conceptual example — test on a sandbox.
service = client.get_service('CustomerNegativeCriterionService')
operation = client.get_type('CustomerNegativeCriterionOperation')
# Build the negative placement (this pseudo-structure will vary with API)
negative_criterion = operation.create
negative_criterion.placement.url = placement
negative_criterion.type_ = client.get_type('CriterionTypeEnum').CriterionType.PLACEMENT
try:
response = service.mutate_customer_negative_criteria(
customer_id=customer_id,
operations=[operation]
)
print(f"Applied exclusion for {customer_id} -> {placement}")
except Exception as e:
print(f"ERROR applying {placement} to {customer_id}: {e}")
time.sleep(0.2) # rate-limit friendly
if __name__ == '__main__':
apply_exclusions()Important notes:
- Test in a sandbox or single client before running across your book of business.
- Use batch operations / BatchJobService for very large lists to minimize RPC overhead and get observability into failures.
- Always persist the response resource names and mutation timestamps to an audit table (BigQuery recommended).
Google Ads Scripts (Manager-level) quick example
If you need a lightweight alternative and prefer Google Ads Scripts, run a manager script that iterates client accounts and calls an account-level exclusion API. Below is a conceptual skeleton — adapt to the exact Ads Scripts API methods available in your environment.
// manager_exclusions.gs
function main() {
var csv = UrlFetchApp.fetch('https://your-storage/account_exclusions.csv').getContentText();
var rows = Utilities.parseCsv(csv);
rows.shift(); // remove header
var accountIds = {}; // group rows by client ID
rows.forEach(function(r){
var client = r[1];
accountIds[client] = accountIds[client] || [];
accountIds[client].push({placement: r[2], reason: r[3]});
});
for (var clientId in accountIds) {
MccApp.select(MccApp.accounts().withIds([clientId]).get().next());
var exclusions = accountIds[clientId];
exclusions.forEach(function(ex) {
// Conceptual: call the account-level exclusion function available
// in Ads Scripts. Replace with the actual API call/method.
AdsApp.currentAccount().createAccountLevelPlacementExclusion(ex.placement);
});
}
}
Because Ads Scripts capabilities evolve, treat this as a conceptual shortcut. The Python Google Ads API approach gives you more control and auditability. For live moderation or evidence capture in approval flows, consider on-device AI integrations that reduce latency and preserve privacy.
Step 5 — Validation: Confirm the exclusion took effect
After applying exclusions, validate programmatically and visually:
- Run a GAQL query for the placement to confirm impressions go to zero for new time slices.
- Check the mutate response and record the resource name and timestamp in your audit table.
- Use small-sample ad groups to attempt a test impression (if safe) to ensure blocking is working.
Step 6 — Monitoring, audits & rollback
Automate ongoing monitoring so exclusions remain effective and are regularly reviewed:
- Weekly dashboard: Exclusions applied per account, spend prevented, number of hits prevented. Use observability playbooks that cover visual audio dashboards and traces for ad serving (observability playbook).
- Trigger-based additions: if a placement shows >X impressions and <Y conversions across 7 days, consider auto-blocking as "medium risk" — design thresholds with rate-limit and cost-aware tiering in mind.
- Quarterly review: re-evaluate low-risk blocks for removal to minimize overblocking.
Always support a rollback mechanism: store previous state before mutation. Your mutation pipeline should write a JSON snapshot of existing account-level exclusion lists before each update so you can revert with a single job. If you use edge sync patterns for offline operators, see guidance on edge-sync and low-latency workflows.
Governance templates: SLA, audit log, and client-facing language
Client approval snippet
We recommend applying account-level placement exclusions to protect brand safety across Display, YouTube, Demand Gen and Performance Max. By approving, you authorize [Agency] to implement exclusions based on performance and risk indicators. Auto-apply SLA: 48 hours.Audit log fields (recommended)
- mutation_id
- manager_customer_id
- client_customer_id
- placement_url
- operation (ADD / REMOVE)
- requested_by
- approved_by
- timestamp
- evidence_link
- rollback_snapshot_id
Real-world example: How one mid-size agency saved 120 hours a month
Case summary (anonymized): a 35-client agency historically spent 8–12 hours per client per month managing campaign-level placement blocks. After moving to an account-level exclusion policy and automating with the scripts above, they:
- Reduced manual configuration time from ~350 to ~10 hours monthly
- Cut misconfiguration incidents by 92%
- Improved client satisfaction due to faster response times and a clear audit trail
Key enablers: manager-level automation, approval SLA, and a BigQuery audit table that reconciled every applied exclusion with the original evidence. For governance and AI-safety layers that stop noisy automation from creating extra work, see governance tactics.
Advanced strategies and 2026 trends to adopt
- Signal-driven auto-blocking: Use a scoring model that weighs third-party brand-safety feeds, placement performance, and client sensitivity to auto-suggest or auto-apply exclusions.
- Privacy-aware logging: With global privacy controls (post-2024 cookieless shifts), store identifiers hashed and keep accessible evidence rather than raw PII.
- Human-in-the-loop for media buys: Use an approval microservice where high-risk flags create a Slack/Teams alert complete with evidence and one-click approve/deny actions that trigger your API job. For low-latency decisioning and evidence capture, pair this with on-device moderation guidance (on-device AI).
- Looker Studio dashboards: Expose exclusion state, prevented spend and top blocked placements by client — an essential part of monthly governance reports. See observability practices here: edge visual & audio observability.
Common pitfalls and how to avoid them
- Overblocking — don’t blanket block entire domains without business rationale; measure impact and have rollback windows.
- Missing audit trails — always record who requested, who approved and the evidence. Without it client trust erodes fast.
- Ignoring automation limits — Google Ads API rate limits and account quotas matter. Use batch jobs and latency budgeting and exponential backoff.
- Not testing — always validate in a staging client or a single low-spend account before global rollout.
Checklist to launch in 30 days
- Week 1: Build CSV template, set up Google Ads API access, and create BigQuery audit dataset.
- Week 2: Run discovery GAQL queries for top 10 clients and assemble candidate lists.
- Week 3: Implement Python bulk script and run one pilot client; confirm validation steps.
- Week 4: Roll out across remaining clients, enable dashboards and weekly monitoring alerts.
Final takeaways
Account-level placement exclusions are a watershed capability in 2026 — but the technical feature alone won’t protect your clients. Agencies win by pairing the Google Ads capability with a repeatable workflow: data-driven discovery, clear governance, fast approvals, auditable automation and ongoing monitoring. Use the CSV and script templates above as a starting point, and invest in logging and rollback mechanisms. For more on cost-aware tiering and scraping-friendly patterns (useful when you’re ingesting third-party brand-safety feeds), see this guide: cost-aware tiering & indexing.
Call to action
Ready to implement account-level exclusions across your book of business? Download our agency toolkit (CSV templates, Python script, GAQL queries and governance checklist) or book a 30-minute implementation review with our team to adapt this workflow to your stack. If you need quick observability and incident runbooks for your rollout, pair this with a hosted diagnostic toolkit to validate behaviour across accounts: SEO diagnostic & hosted tunnels.
Related Reading
- Next‑Gen Programmatic Partnerships: Deal Structures, Attribution & Seller‑Led Growth (2026)
- Stop Cleaning Up After AI: Governance tactics marketplaces need to preserve productivity gains
- How to Audit Your Tool Stack in One Day: A Practical Checklist for Ops Leaders
- Edge Visual Authoring, Spatial Audio & Observability Playbooks for Hybrid Live Production (2026)
- From Onesies to Big Butts: The Role of Absurd Visual Choices in Indie Game Viral Success
- Smart Plug Safety Certifications: What Homeowners Must Look For
- How Retail Changes Affect Baby Product Availability: What New Store Openings and Leadership Moves Mean for Parents
- DIY Cocktail Kit for Two: Building a Romantic Bar Cart with Liber & Co.
- Best Portable and 3‑in‑1 Wireless Chargers for Multi-Day Hikes and Hotel Stays