Search Term Verdict — Google Ads
Classify Google Ads search queries into actionable verdicts and produce ready-to-paste negative keyword lists with UI paths for implementation.
Read-only by design. This skill does not modify your account. All negative keyword and promotion recommendations are delivered as copy-paste artifacts and Google Ads UI navigation paths.
Account Context
Read ${CLAUDE_PLUGIN_ROOT}/profile/account-profile.md at the start of every run.
If it exists:
- Use known account IDs -- skip
list_accountsdiscovery. - Apply KPI targets as anomaly detection thresholds (e.g., flag CPA > target CPA).
- Note active tests when interpreting performance shifts.
- Check watch list for follow-up items from prior sessions.
If it doesn't exist, fall back to
list_accountsand suggest runningplatform-setup.
Data Access
mcp__google-ads__query: Execute GAQL SELECT queries for term and keyword coverage.mcp__google-ads__list_accounts: Confirm account context before running analysis.
Agent Acceleration
When the search term report contains more than 1000 rows, spawn the search-term-classifier agent to classify terms in parallel batches. Pass search term rows with metrics in batches of ~500 and collect consolidated verdicts with n-gram analysis. For reports with 1000 or fewer rows, classify sequentially (no agent needed).
Workflow
Phase 1: Extract data
- Run
references/gaql-queries.mdQuery A for full search term coverage. - Run Query B for keyword-level mapping in Search campaigns.
- Keep date range default at
LAST_30_DAYSunless user requests a different window. - Skip rows where
search_term_view.status = EXCLUDEDfor actioning, but count them in coverage notes.
Phase 2: Classify each search term
Assign one verdict per row:
NEGATE: irrelevant or wasteful term.PROMOTE: high-intent term that should become a dedicated keyword.INVESTIGATE: ambiguous term requiring user judgment.KEEP: term is aligned and performing acceptably.
Use this weight order:
- Conversion and cost efficiency.
- Semantic relevance to campaign intent.
- Match type drift signals.
- Existing exclusion status.
- Volume significance.
Use references/verdict-heuristics.md for edge cases and conflict checks.
Phase 3: Build output package
Return three sections:
- Verdict summary table.
- Negative keyword package grouped by campaign or ad group level.
- Promotion candidates with suggested ad group placement.
Every recommendation must include rationale and spend/conversion context.
Negative match type guidance:
- Use
EXACTnegative when only a specific phrase should be blocked. - Use
PHRASEnegative when the core phrase is irrelevant regardless of surrounding words (most common choice). - Avoid
BROADnegatives unless the single word is unambiguously irrelevant.
Level guidance:
ad_grouplevel: mismatch is scoped to one ad group's theme.campaignlevel: mismatch applies across the entire campaign.- Account-level (shared negative list): if exclusions are universal, recommend adding terms to a shared negative keyword list.
N-gram analysis:
When search term volume is high:
- Build 2-gram and 3-gram frequency tables.
- Rank grams by total spend and zero-conversion spend.
- Use high-cost recurring grams to accelerate negative mining candidates.
- Present top n-grams as a separate section to inform bulk negative decisions.
N-gram output should inform suggestions, not replace row-level judgment.
Phase 4: Produce action artifacts
Instead of executing mutations, produce ready-to-use artifacts:
Copy-paste negative keyword lists
Group negatives by match type for easy pasting into Google Ads:
-- PHRASE match negatives (campaign: [Campaign Name]) --
"term one"
"term two"
"term three"
-- EXACT match negatives (campaign: [Campaign Name]) --
[specific query one]
[specific query two]
UI paths for adding negatives
At campaign level:
Google Ads > Campaigns > [Campaign Name] > Keywords > Negative keywords > + > paste keywords > select 'Campaign' level > Save
At ad group level:
Google Ads > Campaigns > [Campaign Name] > Ad Groups > [Ad Group Name] > Keywords > Negative keywords > + > paste keywords > select 'Ad group' level > Save
Via shared negative keyword list:
Google Ads > Tools & Settings > Shared Library > Negative keyword lists > [list name] > + Keywords > paste list > Save
Then apply to campaigns:
Google Ads > Campaigns > [Campaign Name] > Settings > Negative keyword lists > + > select list > Save
Promotion candidate actions
For PROMOTE verdicts, provide:
- Recommended keyword text and match type.
- Target ad group name.
- UI path:
Google Ads > Campaigns > [Campaign Name] > Ad Groups > [Ad Group Name] > Keywords > + > enter keyword > select match type > Save
Output format
## Search Term Verdict - [Date]
### Google Ads: [Name] ([Customer ID])
**Coverage note:** [hidden search-term caveat, data volume, date range]
#### Summary
| Verdict | Count | Spend | Notes |
|---|---:|---:|---|
#### Top N-Grams (by wasted spend)
| N-Gram | Occurrences | Total Spend | Conversions | Suggested Action |
|---|---:|---:|---:|---|
#### Negative Keyword Recommendations
| Keyword | Level | Parent | Match Type | 30d Spend | Reason |
|---|---|---|---|---:|---|
#### Copy-Paste Negative Lists
**Campaign: [Campaign Name]**
-- PHRASE match -- "term"
**Shared List: [Suggested List Name]**
-- PHRASE match -- "universal negative"
#### Promotion Candidates
| Search Term | Campaign | Suggested Ad Group | Conv | CPA | Why promote |
|---|---|---|---:|---:|---|
#### Investigate
| Term | Campaign | 30d Spend | Conv | Why review needed |
|---|---|---:|---:|---|
Guardrails
- Flag potential positive-keyword collisions before recommending negatives.
- Mention search-term privacy threshold and estimated data coverage gap.
- When data volume exceeds 10,000 rows, recommend narrower date/campaign scope.
- Read-only: This skill produces copy-paste artifacts and UI paths only. No account modifications are made.
References
references/gaql-queries.mdreferences/verdict-heuristics.md