Exclusion List Checker
Ensures all Search, Shopping, Display, Video, and PMax campaigns have required placement exclusion lists and negative keyword lists associated, automatically adding missing ones.
by Dmytro Tonkikh·chiliad.io
Ensures all Search, Shopping, Display, Video, and PMax campaigns have required placement exclusion lists and negative keyword lists associated, automatically adding missing ones.
by Dmytro Tonkikh·chiliad.io
Finds Display and YouTube placements with low CTR or high CPA and excludes them from campaigns. Runs in dry-run mode so you can review the list before applying.
Collects placement data from Performance Max, Display and YouTube campaigns into a Google Sheet with checkboxes, then excludes the placements you tick — with optional ChatGPT content analysis.
Audits every Performance Max asset group for weak Ad Strength, missing uploaded video (before Google auto-generates one), and thin headline/description/image counts.
Automatically identifies and excludes undesirable placements from Performance Max campaigns. Fetches placement URLs, checks page titles against keyword and domain blocklists, and adds negative placements in bulk.
Automatically identifies and excludes YouTube channels that contain kids content, blacklisted keywords in titles, or blacklisted tags from your video campaign placements.
The video metrics that matter per campaign: view rate, CPV, quartile retention (25/50/75/100%) and conversions — showing exactly where each creative loses its audience.
Exclusion List Checker checks every active campaign of the configured types for required shared exclusion lists. Any missing associations are added automatically via the Google Ads API mutateAll method — useful for agencies enforcing brand safety standards across all campaigns. The sharedSets arrays are empty by default, so the script does nothing until you list at least one of your shared-set names in CONFIG.
| Variable | Default |
|---|---|
CONFIG.NEGATIVE_PLACEMENTS.campaignTypes | ["DISPLAY", "VIDEO"] |
CONFIG.NEGATIVE_PLACEMENTS.sharedSets | [] |
CONFIG.NEGATIVE_KEYWORDS.campaignTypes | ["DISPLAY", "VIDEO", "PERFORMANCE_MAX"] |
CONFIG.NEGATIVE_KEYWORDS.sharedSets | [] |
Campaign "Display - Remarketing" missing "chiliad | common negative", adding... Campaign "YouTube - Brand" missing "chiliad | common negative", adding... Applying 2 association(s)... Added 2 of 2 association(s). All campaigns have required NEGATIVE_KEYWORDS lists.
List names must match exactly (case-sensitive) with existing shared lists in your account. With empty sharedSets arrays the script is a no-op, so add at least one list name to activate it. Uses mutateAll for instant, synchronous updates. Only active, serving campaigns of the configured types are checked.