Negative Keyword Conflicts
Finds enabled keywords that are blocked by your own negative keywords — at ad group level, campaign level, or in shared negative lists — so you stop managing keywords that can never serve.
by Google (original concept), chiliad (GAQL rewrite)·web.archive.org/web/20230302131102/https://developers.google.com/google-ads/scripts/docs/solutions/negative-keyword-conflicts
Overview
Negative Keyword Conflicts cross-checks every active keyword against every negative that applies to it — ad group negatives, campaign negatives, and shared negative keyword lists attached to the campaign. It applies the same blocking rules Google Ads uses (exact = identical text, phrase = same words in order, broad = all words present in any order) and reports each keyword your own negatives have silently killed.
Setup
- 1Open your Google Ads account and go to Tools → Bulk Actions → Scripts.
- 2Click the + button to create a new script and paste the code below.
- 3Set EMAIL_ADDRESS if you want the conflict report emailed to you; leave blank for logs only.
- 4Set INCLUDE_PAUSED_CAMPAIGNS = true if paused campaigns should be audited too.
- 5Preview once to verify, then schedule weekly.
Configuration Variables
| Variable | Default |
|---|---|
EMAIL_ADDRESS | (empty) |
INCLUDE_PAUSED_CAMPAIGNS | false |
MAX_CONFLICTS_IN_EMAIL | 200 |
Expected Output
Loaded 1842 active keywords. Loaded negatives: 312 ad group level, 458 campaign level, 1204 from shared lists. === Negative Keyword Conflicts === Keywords checked: 1842 Conflicts found: 3 Negative "running shoes" (PHRASE, CAMPAIGN) blocks keyword "womens running shoes" (EXACT) in Shoes — Generic > Running Negative "free" (BROAD, SHARED LIST "Universal negatives") blocks keyword "free shipping sneakers" (PHRASE) in Sneakers > Promotions Negative "[trail shoes]" (EXACT, AD GROUP) blocks keyword "trail shoes" (PHRASE) in Shoes — Generic > Trail Email sent to you@example.com
Notes
Negative broad match does not expand to synonyms or close variants, and this script mirrors that: it compares word tokens, not meanings. Word order matters for phrase negatives. Inspired by Google's retired 'Negative Keyword Conflicts' solution; fully rewritten for GAQL and current API versions.