with one click
google-ads-negatives
// Recommend negative keywords for Google Ads with the right match type, scope, and caution. Pulls live data via MCP or works with manual exports. Always produces a negative keyword draft for human review.
// Recommend negative keywords for Google Ads with the right match type, scope, and caution. Pulls live data via MCP or works with manual exports. Always produces a negative keyword draft for human review.
Build or update a Google Ads Intent Map from search terms, campaign data, and account context. Pulls live data via MCP or works with manual exports. Produces structure drafts when intent classes need separation.
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. Produces negative keyword drafts and RSA drafts when findings warrant.
Full Google Ads review that synthesizes tracking, search terms, intent mapping, negatives, structure, RSAs, budget decisions, and PMax context into a single operator read. Pulls live data via MCP or works with manual exports. Produces a prioritized batch of action drafts.
Analyze Performance Max through the lens of intent contamination, cannibalization, weak control surfaces, and what can still be learned despite PMax opacity. Pulls live data via MCP or works with manual exports.
Generate or refine Google Ads RSA recommendations using real buyer language from search terms, intent clusters, and winning modifiers. Pulls live data via MCP or works with manual exports. Produces RSA refresh drafts.
Execute approved draft actions in Google Ads accounts. Supports four safe mutation types plus bounded budget writes: add campaign-level negatives, add ad-group-level negatives, pause keywords, pause ad groups, and set campaign daily budgets through an Apply Manifest. Requires human confirmation via dry-run → approve → execute → verify → audit flow. All actions are logged in the audit trail and fully reversible.
| name | google-ads-negatives |
| description | Recommend negative keywords for Google Ads with the right match type, scope, and caution. Pulls live data via MCP or works with manual exports. Always produces a negative keyword draft for human review. |
Read first:
google-ads/references/operator-thesis.mdgoogle-ads/references/query-patterns.mdgoogle-ads/references/negatives-playbook.mdgoogle-ads/references/intent-map.mdgoogle-ads/references/deliverable-templates.mddata/negative-inventory.mdRead workspace if available:
workspace/ads/account.mdworkspace/ads/goals.mdworkspace/ads/intent-map.mdworkspace/ads/queries.mdworkspace/ads/negatives.mdworkspace/ads/learnings.mdPull via the search tool on google-ads-mcp:
Primary: Search terms with waste signals — last 30 days:
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. In pmax-fallback mode, only recommend negatives for extremely obvious junk terms — do not recommend exact negatives without per-term metrics. In limited mode, do not recommend negatives at all — ask for a UI export.
Required: Existing campaign-level negatives:
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'
Required: Negative inventory verification (all locations):
Use the shared verification path in data/negative-inventory.md / scripts/negative-inventory.sh to check:
Required: Keyword view (understand what's triggering waste):
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
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 negatives:
Required: Existing shared negative keyword lists:
SELECT
shared_set.name,
shared_set.type,
shared_set.member_count,
shared_set.status
FROM shared_set
WHERE shared_set.type = 'NEGATIVE_KEYWORDS'
AND shared_set.status = 'ENABLED'
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). Negative keyword analysis is LESS time-sensitive than budget analysis — historical waste patterns are still actionable even if the data is older. Always state the date range used.
Ask the user for:
See data/export-formats.md for recommended format.
workspace/ads/negatives.md.data/search-term-retrieval.md). Report retrieval_mode in the output header.data/negative-inventory.md / scripts/negative-inventory.sh) so you know whether negatives already exist at campaign, ad-group, or shared-list level.pmax-fallback, only recommend negatives for extremely obvious junk terms. If limited, do not recommend negatives — ask for a UI export.deliverable-templates.md.This skill's primary deliverable is a negative keyword draft. Every run that identifies exclusion-worthy terms produces one.
Create using drafts/templates/negative-draft.md:
workspace/ads/drafts/YYYY-MM-DD-[account-slug]-negatives.mdworkspace/ads/drafts/_index.mdworkspace/ads/drafts/YYYY-MM-DD-[account-slug]-negatives.md — N negatives for [scope description]"The draft template now includes three sections: Add, Remove, and Narrow/Move.
When to recommend removal:
When to recommend narrowing:
Always cross-reference existing negatives against:
workspace/ads/account.md)workspace/ads/intent-map.md)When the analysis reveals that traffic doesn't need exclusion but rather better routing:
drafts/templates/structure-draft.mdworkspace/ads/negatives.md — updated negative list (proposed + existing)workspace/ads/queries.md — waste patterns identifiedworkspace/ads/findings.md — strategic notes