Analyze a Google Ads search terms report for waste, buyer-intent signals, negative candidates, isolation opportunities, and messaging clues. Pulls live data via MCP or works with manual exports.
Library skill — the default version is maintained in GitHub; edits you make live in your own clone.
Read first:
- google-ads/references/operator-thesis.md
- google-ads/references/query-patterns.md
- google-ads/references/intent-map.md
- google-ads/references/negatives-playbook.md
- google-ads/references/deliverable-templates.md
Read workspace if available:
- workspace/ads/account.md
- workspace/ads/goals.md
- workspace/ads/intent-map.md
- workspace/ads/queries.md
- workspace/ads/negatives.md
- workspace/ads/learnings.md
Pull via the search tool on google-ads-mcp:
Primary: Search terms report — last 30 days, by spend:
SELECT
search_term_view.search_term,
search_term_view.status,
campaign.name,
ad_group.name,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value,
metrics.cost_per_conversion
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
LIMIT 500
Retrieval ladder — if the primary query returns no rows, follow the shared retrieval ladder in data/search-term-retrieval.md. The ladder walks through account-wide → search-only → campaign enumeration → campaign-scoped classic → PMax campaign_search_term_view → limited visibility. Each step labels its retrieval_mode and the diagnostics shape is defined in that doc. Report the retrieval mode in the output header. In pmax-fallback mode, present query rows but do not fabricate cost/CPA analysis. In limited mode, shift to campaign/asset-group/tracking analysis and request a UI export.
Supplementary: High-spend zero-conversion terms (waste hunt):
SELECT
search_term_view.search_term,
campaign.name,
ad_group.name,
metrics.cost_micros,
metrics.clicks,
metrics.impressions
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
AND metrics.conversions = 0
AND metrics.cost_micros > 10000000
ORDER BY metrics.cost_micros DESC
Supplementary: Keyword view (cross-reference with targeted keywords):
SELECT
campaign.name,
ad_group.name,
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
ad_group_criterion.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.cost_per_conversion
FROM keyword_view
WHERE campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
LIMIT 200
Why keyword_view matters for search-terms analysis: - Shows which targeted keywords triggered the search terms you're reviewing - Reveals match type expansion: a broad match keyword "recycling" triggering "beer can recycling near me" - Identifies keywords that are generating disproportionate waste (the keyword is the problem, not just the search term) - Informs whether the fix is a negative keyword or a keyword match type change - Cross-reference: if a wasteful search term comes from a single broad-match keyword, narrowing or pausing that keyword may be better than adding negatives
Supplementary: Existing negatives (to avoid duplicates):
SELECT
campaign.name,
campaign_criterion.keyword.text,
campaign_criterion.keyword.match_type,
campaign_criterion.negative
FROM campaign_criterion
WHERE campaign_criterion.negative = TRUE
AND campaign_criterion.type = 'KEYWORD'
See data/gaql-recipes.md for additional queries.
If LAST_30_DAYS returns 0 rows or <$5 total spend, fall back to LAST_90_DAYS, then all-time (no date filter). Always state the date range used in the output. See the main skill's Date Range Fallback Protocol for details.
Ask the user for: - Search Terms report: last 30 days - Columns needed: Search term, Campaign, Ad group, Impressions, Clicks, Cost, Conversions, Conv. value - Sort by Cost descending - Include at least top 200-500 terms
Also request existing negative keyword list if available.
See data/export-formats.md for recommended format.
data/search-term-retrieval.md). Report the resulting retrieval_mode in the output header.pmax-fallback, present query rows but do not fabricate cost/CPA analysis. If limited, shift to campaign/asset-group/tracking analysis and request a UI export.Trigger: 3+ clear waste terms identified with combined spend > $50 (or any single term > $25 waste).
Create a draft using drafts/templates/negative-draft.md:
- Write to workspace/ads/drafts/YYYY-MM-DD-[account-slug]-negatives.md
- Include every recommended negative with: keyword, match type, scope, reason, spend wasted, collateral risk
- Update workspace/ads/drafts/_index.md
Trigger: Clear buyer language patterns identified that differ from current ad copy.
Create a draft using drafts/templates/rsa-draft.md:
- Write to workspace/ads/drafts/YYYY-MM-DD-[account-slug]-rsa-refresh.md
- Include specific headlines/descriptions derived from converting query language
- Update workspace/ads/drafts/_index.md
workspace/ads/queries.md — notable patterns and clustersworkspace/ads/intent-map.md — if new intent classes emergeworkspace/ads/negatives.md — recommended negatives (even before draft approval)workspace/ads/findings.md — strategic observations