---
name: google-ads-negative-keywords
description: Reviews live Google Ads search terms through the Caybl.ai connector, groups bad queries into patterns, and builds a paste-ready negative keyword plan with the right match type and level - then adds the negatives after a dry-run preview if the user approves. Use for "find negative keywords", "clean up search terms", "broad match is drifting", "irrelevant clicks", or a monthly search-term review. For spend leaks beyond search terms, see google-ads-wasted-spend.
license: MIT
compatibility: Requires the Caybl.ai MCP connector (https://api.caybl.ai/mcp) with Google Ads connected. Write access is needed only to apply negatives.
metadata:
  author: Caybl.ai
  version: "1.0"
  adapted-from: mardab96/google-ads-skills (search-terms-hygiene-google-ads) and eliasmalmsandberg/google-ads-skills (google-ads-negative-keywords), MIT
---

# Google Ads negative keywords

## Requires

The Caybl.ai MCP connector with Google Ads connected (setup: https://caybl.ai/google-ads-mcp). Adding negatives needs write access switched on for the account in Caybl. If the tools aren't available, say so instead of asking for a CSV.

## Before analysis

1. Confirm the goal (leads, sales, pipeline, brand protection) and the policy on **competitor terms** and **informational queries** ("how to", "what is"). Never negate competitor terms without the user's say-so.
2. List the brand terms, product names and high-value categories that must never be blocked.
3. Read what's already excluded: `run_gaql_report` on `campaign_criterion` and `ad_group_criterion` where `negative = TRUE`, so you don't propose duplicates or conflicts.

## Workflow

1. `get_search_terms` for the last 60-90 days (skip the last 7 days for conversion lag).
2. Normalise queries (lowercase, trim), keep the original for the output.
3. **Group by 1-3 word n-grams** before judging term by term - patterns like "free", "jobs", "login", "pdf", "template", "course", "near me", "definition" usually matter more than single queries.
4. Find:
   - zero-conversion spend (single terms and pattern groups),
   - **broad match drift** - queries far from the keyword's intent, wrong vertical, B2B vs B2C mismatch, support/login/jobs/DIY intent,
   - **false positives** to protect - brand, competitor strategy, low-volume high-value, long sales cycle terms.
5. For drifting keywords, check the keyword itself (`run_gaql_report` on `keyword_view`) - sometimes the fix is tightening the match type, not adding negatives.

## Decision rules

- **Evidence floors:** a single term needs 10+ clicks or spend of 1x target CPA (or 1x the account CPA) with zero conversions. A pattern group needs 20+ combined clicks or 2x target CPA. A term that is unambiguously not the business ("free", "jobs" for a paid SaaS) needs no floor.
- **Match type:** exact for a one-off bad query; phrase for a repeated bad phrase; broad only for a concept that is irrelevant in every form.
- **Level:** campaign level when the intent is bad for that campaign only; ad group level for routing queries between ad groups; account-wide (or every campaign) only when no campaign should ever show for it.
- Check each negative against the account's positive keywords - a negative that would block a converting keyword is a conflict; flag it, don't add it.

## Output

### Summary
Search-term spend analysed, estimated reducible spend, number of negative candidates, the main drift patterns, caveats.

### Negative keyword plan (paste-ready)
| Negative | Match type | Level | Campaign / ad group | Source queries | Spend | Clicks | Conv. | Reason | Confidence | Risk |

### Pattern groups
Informational, competitor, wrong vertical, jobs, free/template/DIY, support/login, irrelevant product, outdated product.

### Broad match drift
| Keyword | Match type | Campaign / ad group | Example bad queries | Spend | Conv. | Fix |

### Apply
Offer to add the negatives. Call `add_negative_keywords` (campaign level) or `add_ad_group_negative_keywords` **with `validateOnly: true` first**, show exactly what will be added, and only re-run with `validateOnly: false` after an explicit yes. Report what was added.

## Guardrails
- Don't block profitable variants or anything with assisted or offline conversions.
- Don't assume every zero-conversion query is waste.
- The search terms report doesn't show every query (Google hides low-volume ones) - say so.
- If you adjust a threshold for a small account, say which and why.
