Stop chasing exclusions across platforms — keep one list synchronized, enforced and auditable
Pain point: Ad ops teams waste hours re-entering placement blocks across Google Ads, DV360 and internal CRMs — then discover mismatches during a campaign run. You need a single, trusted exclusion list that updates everywhere in real time.
What this recipe delivers (the short version)
This workflow recipe shows a practical, production-ready way to sync placement exclusions across Google Ads (now with account-level exclusions), Display & Video 360 (DV360), and your CRM suppression lists using a single source of truth, plus implementation options for both no-code teams (Zapier/Make) and engineering teams (serverless connectors + scripts).
"Google Ads now supports account-level placement exclusions (Jan 2026). Use that to simplify enforcement — and automate the rest."
Why this matters in 2026
In 2026 ad platforms are more automated and privacy-constrained than ever. Google’s Jan 2026 rollout of account-level placement exclusions lets advertisers apply one block list across Performance Max, Demand Gen, YouTube and Display. That reduces campaign-level drift, but it doesn’t solve cross-platform sync — DV360 and your internal suppression lists still need to match.
Modern programmatic ecosystems expect automation. Brands that keep exclusion lists human-managed will face wasted spend, brand-safety incidents, and audit gaps. This recipe converts a single list into platform actions with traceability, error handling and reconciliation.
Architecture overview — single source of truth + connectors
Best practice: build a simple architecture with three layers:
- Source of Truth (editable by ops/comms): Airtable, Google Sheet, or an internal DB table labeled
exclusions_master. - Sync Middleware (automated): Cloud Function/Cloud Run or a no-code automation platform (Zapier/Make) that normalizes, diffs and sends updates to endpoints.
- Target Connectors: Google Ads (account-level exclusions), DV360 (advertiser-level negative sites/apps list), CRM (suppression flags or suppression-list object).
Why this layout?
- Clear edit rights on the source (legal/brand teams).
- Business logic and error handling consolidated in one place.
- Traceable, auditable sync logs and reconciliation.
Choose your Source of Truth (pick one)
Pick based on team skillset and scale:
- Airtable — great UI, built-in API, good for mid-size teams.
- Google Sheets — easiest to adopt, Zapier/Make native triggers, manual-friendly.
- Postgres / BigQuery — best for enterprise scale and auditability.
Connector options — No-code to code
Two supported implementation tracks:
- No-code / Low-code: Zapier or Make for teams without dev resources.
- Serverless / Custom: Cloud Run or Lambda for teams that need scale, robust error handling and security.
No-code recipe: Zapier (fast, low-maintenance)
Use this when legal/brand owners will edit the list and ops want a fast deployment.
Zap steps (example using Airtable as source)
- Trigger: Airtable - New or Updated Record in exclusions_master.
- Action: Formatter - Normalize the domain/placement entry (strip http(s), lowercase, remove paths).
- Action: Webhooks - POST to Google Ads sync endpoint (cloud function or Zapier’s built-in Google Ads action if available).
- Action: Webhooks - POST to DV360 sync endpoint (Display & Video 360 API via webhook; include OAuth token stored in Zapier).
- Action: HubSpot/Salesforce - Update suppression_list or do_not_contact field.
- Action: Gmail/Slack - Send a digest to the ad-ops channel with operation result.
Notes:
- Zapier supports OAuth2 for many services. For DV360, you may need to use the Webhooks (Custom Request) action and a stored service account token.
- Use Zapier storage for rate-limit backoff counters if you need retries.
No-code recipe: Make (for visual flows & batching)
Make (Integromat) is better when you need batching and advanced transformations.
Make Scenario
- Google Sheets / Airtable Watch Records module triggers every 5 minutes.
- Iterator normalizes inputs; filters remove duplicates or already-synced entries.
- HTTP module: batch request to internal Cloud Function to upsert 50 exclusions at once to Google Ads (reduce API calls).
- HTTP module: call DV360 batch endpoint via service account OAuth.
- CRM module: Update suppression object in bulk.
- Logger module: write results back to a Google Sheet or DataDog for audit.
Serverless recipe: reliable, auditable, scalable
For scale and security build a small sync service. Use Cloud Run (GCP) or AWS Fargate + a cron/AWS EventBridge trigger.
High-level flow
- Webhook or scheduled job reads exclusions_master and computes a diff vs last-synced snapshot.
- Normalize and dedupe entries (domains, app IDs, placement IDs).
- Batch upserts to Google Ads API (account-level placements endpoint).
- Batch upserts to DV360 Inventory/Negative Sites shared list.
- Patch CRM suppression records via CRM API.
- Persist success/failure & create retry queue for failures.
Example Node.js pseudo-code (serverless)
// Pseudo-code: batch upsert to Google Ads and DV360
const rows = await fetchSourceRows();
const normalized = normalize(rows);
const diff = computeDiff(normalized, lastSnapshot);
await upsertGoogleAds(diff.adds, oauthTokenGA);
await upsertDV360(diff.adds, oauthTokenDV);
await updateCRM(diff.adds, crmToken);
saveSnapshot(normalized);
Tips:
- Use incremental snapshots (ETag or timestamp) to avoid reprocessing unchanged rows.
- Respect API rate limits. Batch into sizes recommended by each API — typically 50–200 items per request.
- Store operation IDs so you can match asynchronous job responses back to the source entry.
How to call each platform (practical specifics)
Google Ads (2026 update: account-level placement exclusions)
Use the Google Ads API to manage account-level placement exclusions — centralizing enforcement across Performance Max, Display, YouTube and Demand Gen. If you don't have engineering resources, the Google Ads UI now supports a shared account-level exclusion list you can update via CSV import.
Programmatic approach:
- Authenticate with OAuth2 or service account via OAuth2 service flow.
- Use the Customer-level negative placement resource (Customer Negative Placement endpoint) to upsert domains and placement IDs.
- Batch changes and verify with the API’s response. On 2026 platforms, Google returns per-item status in batch upsert calls.
DV360
DV360 still manages negative sites at the advertiser or company level. The Display & Video 360 API supports updating shared lists of negative sites and apps for an advertiser.
- Authenticate using a Google service account with DV360 access.
- PUT or PATCH the advertiser’s negative sites list with the normalized list. Use batch operations where possible.
- DV360 may accept both domains and app bundle IDs — normalize both types separately.
CRM (HubSpot or Salesforce)
For CRM suppression, either:
- Create/update a suppression_list custom object and attach domains or customer identifiers; or
- Set do_not_contact flags on contacts/accounts if the placement is tied to a known domain owner.
Normalization rules (always do this first)
Common cause of drift is inconsistent formatting. Normalize every entry before sending:
- Lowercase hostnames; strip protocol and path (keep domain and effective TLD+1).
- For YouTube channels/placement IDs, map channel IDs to canonical placement IDs.
- Split mobile app bundle IDs vs. web domains; treat separately.
- Remove wildcards or unsupported patterns that target systems don’t accept; map to closest valid form.
Conflict resolution & dedupe logic
Rule-based conflict handling keeps lists deterministic. Recommended precedence:
- Manual 'block' entries from Legal/Brand (highest priority).
- Automated signals (fraud detection tools).
- Historical campaign-level blocks (lowest priority).
If an entry is removed in the master list, the middleware should soft-delete in targets (mark as archived) rather than immediate hard delete. That preserves an audit trail and reduces risk.
Rate limits, batching and retry strategy
APIs throttle. Protect your sync:
- Batch writes: group by 50–200 items depending on API recommendations.
- Exponential backoff for 429s and 5xx responses.
- Use a retry queue so failed items are retried without reprocessing successful items.
Monitoring, reconciliation and auditing
Monitoring matters more than the initial sync. Implement:
- Sync logs with per-item status and timestamps stored in BigQuery or a log store.
- Daily reconciliation job that reads the target platform lists and compares them to the master source; report diffs to Slack/email.
- Alert on omissions and API errors above a threshold.
Sample reconciliation check (pseudo-SQL)
-- Items in master not in Google Ads
SELECT m.domain
FROM master_exclusions m
LEFT JOIN google_ads_exclusions g ON m.domain = g.domain
WHERE g.domain IS NULL;
Security & permissions
- Use least-privilege service accounts for APIs (scoped tokens for Google Ads & DV360).
- Rotate credentials and keep them in a secrets manager (GCP Secret Manager, AWS Secrets Manager).
- Enable audit logs for changes in the source of truth and for API operations.
Testing & rollout checklist
- Run in a staging advertiser/Google Ads test account first.
- Dry-run mode: generate diffs and send only to Slack without applying changes.
- Apply to a limited advertiser subset (canary) and monitor carefully for 24–72 hours.
- Gradually scale to all advertisers once stable.
Zapier & Make recipe examples (copy/paste friendly)
Zapier (Airtable & Google Ads)
- Airtable: New/Updated Record trigger.
- Formatter: Extract domain: use Regex to remove protocol (https?://) and paths.
- Webhooks: POST JSON to your Cloud Function endpoint /sync, body:
{ "action": "upsert", "domain": "{{Formatter_output}}", "source": "airtable:brand-team" } - Cloud Function returns per-target status; Zap logs and posts success/failure to Slack.
Make (Google Sheets & DV360 + Google Ads)
- Google Sheets: Watch rows module (poll every 5 minutes).
- Aggregator: collect up to 100 rows per run.
- Router: dedupe and separate by type (web domain, app bundle, youtube).
- HTTP: call DV360 batch update endpoint with OAuth2 token (service account).
- HTTP: call Google Ads account-level upsert endpoint.
- Logger: append results to an audit sheet and send a Slack summary.
Common pitfalls and how to avoid them
- Mixing formats — always normalize (domains vs. full URLs vs. placement IDs).
- Not honoring platform-specific constraints — run tests to confirm the platform accepts your format.
- Lack of soft-delete policy — prefer archiving in targets to allow rollback.
- Not reconciling — daily reconciliation uncovers drift before it costs ad spend.
Real-world example (case study)
One mid-market ecommerce client in late 2025 consolidated legal and ops blocks into an Airtable master list and ran a Make scenario to sync to Google Ads and DV360. Within two weeks:
- Blocked placements decreased mismatches by 92%.
- Manual time spent on synchronization dropped from 8 hours/week to 40 minutes/week (mostly monitoring).
- Brand-safety incidents tied to unwanted placements dropped to zero in the monitored period.
Future-proofing & 2026 trends
Expect these developments through 2026–2027:
- More ad platforms will expose account/advertiser-level exclusion APIs (Google led in Jan 2026).
- Standardization of negative lists across programmatic supply chains will improve (shared negative list standards).
- Privacy-first signals and contextual targeting will make brand-safe exclusion lists more important — you'll need to sync lists with contextual providers and consent-management platforms.
Quick checklist to ship this in 2 weeks
- Pick a source of truth (Airtable or Google Sheets). Add fields: domain, type, reason, owner, status.
- Create a Zapier or Make scenario that triggers on new/updated rows and normalizes entries.
- Wire Zapier/Make to call a small Cloud Function that upserts to Google Ads and DV360 (start with Google Ads only if you must lower scope).
- Add CRM update action in Zapier/Make and a Slack digest for failures.
- Run canary on a single advertiser/campaign for 72 hours and reconcile daily.
Wrapping up — what you can do this afternoon
If you have 60 minutes right now, do this:
- Create the master sheet with canonical columns.
- Set up a Zap that sends newly added rows to a Slack channel (quick visibility).
- Open a staging Google Ads account and try a manual account-level exclusion to understand the shape required.
Final takeaways
In 2026, centralized, automated exclusion syncs are low-hanging fruit for reducing wasted ad spend and brand-safety risk. Use a single source of truth, normalize entries, batch operations, and instrument reconciliation. Whether you choose Zapier/Make for speed or a serverless connector for scale, this workflow will save time and create auditability across Google Ads, DV360 and your CRM.
Ready to implement? If you want a starter repo, a tested Cloud Function template, or a Make scenario copy we use with mid-market teams, request the quicks.pro automation bundle and we’ll send the scripts and recipes that match your stack.
Related Reading
- Integrating CRM Customer Data into Quant Models: Use Cases and Pitfalls
- Retailer Tie-Ins & Unlock Codes: Best Practices from Nintendo Crossovers
- How to Spot Loan Applications Sourced From Deepfakes or AI-Generated Documents
- Workshop Plan: Teach a Small-Batch Syrup Making Class for Aspiring Bartenders
- Micro-Retreats in Mountain Towns: Planning a Relaxing Long Weekend in Whitefish or the Drakensberg