Skip to content
John Williams edited this page Jul 16, 2026 · 1 revision

FAQ — Negative Keywords, Blocked Search Terms & Google Ads Scripts

Do negative keywords use close variants in Google Ads?

No. Negative keywords match literally. A negative phrase mens facial does not block men's facial (apostrophe), facial for men (reordered/different words), or mens facials (plural). Your positive keywords, however, DO match close variants — which is exactly how a negative ends up blocking a converting query without conflicting with any keyword text.

How do negative keyword match types work?

  • Negative exact [mens facial] — blocks only the query mens facial, nothing else
  • Negative phrase "mens facial" — blocks any query containing mens facial as an ordered sequence: best mens facial nyc ✔, facial mens
  • Negative broad mens facial — blocks any query containing both words in any order: facial for mens skin

Why did my converting search terms stop showing?

Most commonly: they were excluded — added as negatives by an auto-applied recommendation, a previous account manager, or a bulk exclusion session. Check the search terms report's Added/Excluded column, and run the Blocked Search Term Recovery script to find which negatives are responsible and how much conversion value they're suppressing.

Can Google Ads Scripts see Performance Max negative keywords?

Entity iterators (AdsApp.campaigns()) cannot — PMax campaigns are invisible to them. GAQL via AdsApp.search() on campaign_criterion can. These scripts use the GAQL route for full PMax coverage.

How do I get account-level negative keywords with a script?

Not via AdsApp.negativeKeywords() (doesn't exist) and not via customer_negative_criterion.keyword (no such fields). Account-level negatives are stored in a shared set of type ACCOUNT_LEVEL_NEGATIVE_KEYWORDS; query shared_criterion filtered to that shared set type. Full queries in Troubleshooting.

Is it safe to auto-remove negative keywords?

With guardrails, yes — and negatives are the most reversible object in Google Ads: re-adding one takes seconds and every removal these scripts make is logged with level, scope, text, and match type. The real risk isn't irreversibility, it's silence — which is why nothing here removes without writing a report row. Start with DRY_RUN: true, review, then run live. Be most thoughtful with shared lists (they affect every attached campaign) and with negatives blocking 25+ keywords (usually intentional brand blockers — skipped by default).

How is this different from Google's official negative keyword conflicts script?

Google's script reports conflicts between negatives and keyword text; it doesn't remove anything, doesn't see PMax campaign negatives, doesn't check account-level negatives, and can't detect negatives blocking queries (vs keywords). This toolkit does all four, with removal automation and a conversion-history-based recovery mode.

What's the difference between the Conflict Cleaner and the Recovery script?

  • Conflict Cleaner: "Which negatives block my keywords?" — structural hygiene
  • Recovery script: "Which negatives block search terms that convert?" — revenue recovery

Most accounts should run the Recovery script; it catches everything that actually costs money, including cases invisible to keyword-text comparison.

Who built these?

John Williams — founder of AHMEEGO™ and It All Started With A Idea LLC, 15+ years of enterprise paid media across major agencies, $350M+ in managed spend, creator of Buddy the Google Ads AI Agent, speaker at Hero Conf, published in Search Engine Land, and moderator of r/ppc_.


Tags: negative keyword close variants, blocked search terms google ads, account level negative keywords script, performance max negative keywords, google ads scripts GAQL, unblock converted keywords, AHMEEGO, It All Started With A Idea