negative-keyword-miner
Skill4 starsChanged 6 months agoMITView on GitHub
Mine, categorize, and manage negative keywords from search term reports. Use when analyzing search queries, building negative keyword lists, detecting match type bleeding, or resolving cross-campaign keyword conflicts.
In this repository59 other files it gives its agents.
- ad-copy-generationSkill
- ad-creative-fatigue-detectorSkill
- ad-policy-complianceSkill
- amazon-ads-optimizerSkill
- anomaly-detectorSkill
- attribution-modelingSkill
- audience-expansion-strategySkill
- bid-optimizationSkill
- budget-optimizerSkill
- campaign-ide-handoffSkill
- campaign-preflightSkill
- campaign-structure-auditorSkill
- chatgpt-ads-conversion-trackingSkill
- chatgpt-ads-launchSkill
- competitor-analysisSkill
- creative-testingSkill
- cross-platform-attributionSkill
- cross-platform-launcherSkill
- dayparting-schedulerSkill
- executive-reportingSkill
- first-party-data-strategySkill
- google-ads-operatorSkill
- google-ads-quality-scoreSkill
- google-shopping-optimizerSkill
- gtm-metricsSkill
- incrementality-testingSkill
- keyword-researchSkill
- kill-scale-rulesSkill
- klaviyo-campaignsSkill
- landing-page-optimizerSkill
- launch-gatesSkill
- linkedin-ads-operatorSkill
- linkedin-ads-targetingSkill
- media-plan-builderSkill
- meta-ads-diagnosticsSkill
- meta-ads-operatorSkill
- mmm-budget-plannerSkill
- multi-channel-reportingSkill
- multi-platform-ads-operatorSkill
- multi-platform-launchSkill
- openai-ads-operatorSkill
- performance-max-optimizerSkill
- pixel-capi-auditorSkill
- pixel-capi-setupSkill
- platform-cost-benchmarksSkill
- public-ad-library-intelligenceSkill
- retargeting-sequence-designerSkill
- roas-calculatorSkill
- seasonal-budget-plannerSkill
- spearSkill
- spec-driven-devSkill
- synter-mcp-setupSkill
- tiktok-ads-operatorSkill
- tracking-leak-detectorSkill
- ugc-creative-briefSkill
- ui-contrast-reviewSkill
- utm-builderSkill
- video-ad-scriptwriterSkill
- x-ads-operatorSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 217
Remove the conflicting negative
- Distinctive: line 218
Add the negative as campaign-level instead of shared
- Distinctive: line 219
Use exact match negatives to be more precise
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Negative Keyword Miner
Systematic approach to extracting, categorizing, and managing negative keywords across Google Ads and Microsoft Ads campaigns. Covers search term report analysis, AI-assisted categorization, match type strategy, shared lists, cross-campaign conflict detection, and industry-specific templates.
Capabilities
- Search Term Report Analysis - Pull and analyze search queries that triggered ads
- AI Categorization - Automatically classify irrelevant queries by category
- Match Type Analysis - Detect broad match bleeding and close variant issues
- Negative List Management - Build campaign-level and shared negative keyword lists
- Cross-Campaign Conflict Detection - Find negatives that block desired traffic
- Industry Templates - Pre-built negative keyword lists by industry vertical
Workflows
Workflow 1: Search Term Report Mining
Step 1: Pull search term report via GAQL
SELECT
search_term_view.search_term,
campaign.name,
ad_group.name,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value,
search_term_view.status
FROM search_term_view
WHERE
segments.date DURING LAST_30_DAYS
AND metrics.impressions > 0
ORDER BY metrics.cost_micros DESCStep 2: Calculate efficiency metrics
For each search term:
CPA = Cost / Conversions
ROAS = Conversion Value / Cost
Waste Score = Cost × (1 - Conversion Rate / Campaign Avg Conversion Rate)Step 3: Flag candidates for negatives
| Criteria | Threshold | Priority |
| High spend, zero conversions | Cost > 2× CPA target, 0 conversions | Critical |
| Very low CTR | CTR < 0.5% with 100+ impressions | High |
| High CPA | CPA > 3× target | High |
| Irrelevant intent | Contains job/free/DIY terms | Medium |
| Competitor terms (unintentional) | Contains competitor brand names | Medium |
| Informational queries | Contains "what is", "how to" | Low-Medium |
Step 4: Categorize flagged terms
Group into categories for systematic addition:
| Category | Examples | Negative Match Type |
| Job seekers | "marketing manager jobs", "hiring ads" | Phrase: "jobs", "careers", "hiring", "salary" |
| Free seekers | "free ad maker", "free templates" | Phrase: "free" |
| DIY/Education | "how to make ads", "ad tutorial" | Phrase: "how to", "tutorial", "course" |
| Wrong product | "TV ads" when selling digital ads | Exact: [TV ads], [television advertising] |
| Wrong location | "ads agency london" for US business | Phrase: "london", "uk" |
| Competitor | "hubspot ads tool" | Exact: [hubspot], [competitor name] |
Workflow 2: Broad Match Bleeding Analysis
What is broad match bleeding? Broad match keywords trigger on loosely related searches that waste budget. This has intensified with Google's expanded close variants and broad match modifier deprecation.
Step 1: Identify broad match keywords
SELECT
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
campaign.name,
ad_group.name,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM keyword_view
WHERE
ad_group_criterion.keyword.match_type = 'BROAD'
AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESCStep 2: Cross-reference with search terms
For each broad match keyword, compare triggered search terms:
Broad Keyword: "running shoes"
Search Terms Triggered:
✅ "buy running shoes online" — relevant
✅ "best running shoes 2026" — relevant
⚠️ "running shoe repair near me" — tangential
❌ "running shoes drawing" — irrelevant
❌ "free running shoes giveaway" — irrelevant
❌ "running shoe factory jobs" — irrelevantStep 3: Calculate bleed rate
Bleed Rate = Irrelevant Search Term Impressions / Total Search Term Impressions × 100
Interpretation:
< 10%: Healthy — normal broad match behavior
10-25%: Moderate — add negatives for top offenders
25-50%: Severe — consider switching to phrase match
> 50%: Critical — switch to exact match or pause keywordStep 4: Remediation decision matrix
| Bleed Rate | Conversion Rate | Action |
| < 10% | Above avg | Keep broad, monitor |
| < 10% | Below avg | Add negatives, monitor |
| 10-25% | Above avg | Add negatives, keep broad |
| 10-25% | Below avg | Switch to phrase match |
| 25-50% | Any | Switch to phrase match + negatives |
| > 50% | Any | Switch to exact match |
Workflow 3: Negative Keyword List Management
Campaign-level vs Shared lists:
| Type | Use When | Pros | Cons |
| Campaign-level | Specific to one campaign's theme | Precise control | Hard to maintain at scale |
| Shared list | Applies across multiple campaigns | Centralized management | May over-block niche campaigns |
| Account-level | Universal exclusions | One place for all | No exceptions per campaign |
Recommended list structure:
Shared List: "Universal Negatives"
→ Apply to ALL campaigns
→ Contains: jobs, careers, salary, free, cheap, DIY, tutorial, wiki
Shared List: "Competitor Brands"
→ Apply to non-competitor campaigns
→ Contains: exact match competitor brand names
Shared List: "Geographic Exclusions"
→ Apply to geo-targeted campaigns
→ Contains: irrelevant cities, countries, regions
Campaign-Level:
→ Campaign "Running Shoes" excludes: "basketball", "hiking", "dress shoes"
→ Campaign "Running Apparel" excludes: "shoes", "sneakers"Managing list size:
- Google Ads limit: 5,000 negative keywords per list
- Google Ads limit: 20 shared lists per account
- Campaign-level limit: 10,000 negative keywords per campaign
- Practical recommendation: Keep each list under 1,000 terms
Workflow 4: Cross-Campaign Conflict Detection
What is a negative keyword conflict? A negative keyword in Campaign A blocks a search query that Campaign B is actively bidding on. This causes lost traffic.
Step 1: Export all keywords and negatives
-- Active keywords
SELECT
campaign.name AS campaign,
ad_group.name AS ad_group,
ad_group_criterion.keyword.text AS keyword,
ad_group_criterion.keyword.match_type AS match_type,
'POSITIVE' AS polarity
FROM keyword_view
WHERE ad_group_criterion.status = 'ENABLED'
-- Negative keywords
SELECT
campaign.name AS campaign,
'' AS ad_group,
campaign_criterion.keyword.text AS keyword,
campaign_criterion.keyword.match_type AS match_type,
'NEGATIVE' AS polarity
FROM campaign_criterion
WHERE campaign_criterion.type = 'KEYWORD'
AND campaign_criterion.negative = TRUEStep 2: Cross-reference for conflicts
For each negative keyword, check if it would block a positive keyword:
| Conflict Type | Example | Severity |
| Exact vs Exact | Neg: [blue shoes] blocks Positive: [blue shoes] | Critical |
| Phrase vs Exact | Neg: "blue shoes" blocks Positive: [buy blue shoes] | High |
| Broad neg vs Phrase pos | Neg: blue shoes blocks Positive: "blue running shoes" | Medium |
| Shared list vs campaign | List neg blocks campaign positive | Variable |
Step 3: Resolution
- Remove the conflicting negative
- Add the negative as campaign-level instead of shared
- Use exact match negatives to be more precise
- Move the positive keyword to the campaign with the negative to consolidate
Workflow 5: Automated Negative Mining Cadence
Weekly routine:
| Day | Task | Time |
| Monday | Pull 7-day search term report | 15 min |
| Monday | Flag high-spend zero-conversion terms | 10 min |
| Monday | Add critical negatives immediately | 10 min |
| Thursday | Review moderate-priority candidates | 15 min |
| Thursday | Check for cross-campaign conflicts | 10 min |
| Friday | Update shared negative lists | 10 min |
Monthly routine:
- Full 30-day search term analysis
- Broad match bleed rate calculation
- Shared list audit (remove overly aggressive negatives)
- Cross-campaign conflict resolution
Negative Keyword Match Types
How Negative Match Types Work (Different from Positive)
| Negative Type | Blocks | Does NOT Block |
| Broad (default) | Queries containing ALL negative words (any order) | Queries with only some of the words |
| Phrase | Queries containing negative words in exact order | Queries with words between or rearranged |
| Exact | Only the exact query | All other variations |
Critical difference from positive match types:
- Negative broad match does NOT include close variants, synonyms, or related searches
- Negative keywords don't match plurals, misspellings, or similar terms
- You must add each variation explicitly
Example:
Negative broad match: running shoes
- ❌ Blocks: "running shoes", "shoes running", "red running shoes"
- ✅ Still shows: "running", "shoes", "run shoe", "running sneakers"
Negative phrase match: "running shoes"
- ❌ Blocks: "buy running shoes", "running shoes sale"
- ✅ Still shows: "shoes for running", "running shoe"
Negative exact match: [running shoes]
- ❌ Blocks: "running shoes" only
- ✅ Still shows: "buy running shoes", "running shoes sale"
Industry Negative Keyword Templates
E-Commerce (General)
Broad negatives: free, cheap, used, refurbished, wholesale, bulk, diy,
repair, fix, manual, instructions, jobs, careers, salary, hiring,
review, reviews, reddit, forum, comparison, vs, alternative
Phrase negatives: "how to make", "how to build", "how to fix",
"near me" (if online only), "open box", "second hand"
Exact negatives: [ebay], [amazon], [walmart], [alibaba], [craigslist]SaaS / B2B Software
Broad negatives: free, open source, template, tutorial, course,
certification, training, salary, jobs, intern, internship,
download, crack, pirated, github, stackoverflow
Phrase negatives: "what is", "how to use", "definition of",
"vs", "alternative to", "open source", "free trial expired"
Exact negatives: [competitor names as exact match]Local Services (Plumbing, HVAC, Legal)
Broad negatives: diy, tutorial, youtube, jobs, careers, salary,
hiring, school, certification, course, training, license,
requirements, exam, practice test
Phrase negatives: "how to fix", "how to install", "how to repair",
"near me" (for excluded cities), "DIY guide"
Exact negatives: [cities you don't serve], [states you don't serve]Healthcare / Medical
Broad negatives: jobs, careers, salary, nursing, school, degree,
certification, free, symptoms, wiki, wikipedia, webmd, mayo clinic,
home remedy, natural cure, reddit
Phrase negatives: "how to become", "medical school", "nursing program",
"is it normal", "home treatment"
Exact negatives: [competitor names], [irrelevant specialties]Financial Services
Broad negatives: free, jobs, careers, salary, scam, fraud, complaint,
reddit, review, lawsuit, class action, calculator, formula, excel,
template, worksheet
Phrase negatives: "how to calculate", "what is the formula",
"free calculator", "excel template", "is it a scam"
Exact negatives: [competitor names], [irrelevant product types]Real Estate
Broad negatives: jobs, careers, salary, license, exam, course,
school, training, zillow, trulia, realtor.com, free, craigslist,
for rent (if selling), for sale (if renting)
Phrase negatives: "how to become", "real estate school",
"real estate license", "average salary"
Exact negatives: [cities not served], [competitor agent names]Reference Data
Negative Keyword Impact on Performance
Typical improvements after systematic negative keyword mining:
| Metric | Before | After (30 days) | Improvement |
| CTR | 3.2% | 4.8% | +50% |
| CPC | $2.40 | $1.95 | -19% |
| Conversion Rate | 2.1% | 3.4% | +62% |
| CPA | $114 | $57 | -50% |
| Wasted Spend | 25% | 8% | -68% |
| Quality Score (avg) | 5.2 | 6.8 | +31% |
Budget Waste Benchmarks
| Account Maturity | Typical Waste % | Target Waste % |
| New (0-3 months) | 25-40% | < 20% |
| Established (3-12 months) | 15-25% | < 10% |
| Mature (12+ months) | 8-15% | < 5% |
| Well-optimized | 3-8% | < 3% |
Examples
Example 1: SaaS Company Search Term Audit
Scenario: B2B SaaS spending $30K/month on Google Ads. CPA target: $80. Actual CPA: $135.
Analysis of 30-day search term report (2,400 unique terms):
| Category | Terms | Cost | Conversions | CPA | Action |
| High intent | 480 | $12,000 | 210 | $57 | Keep |
| Mid intent | 620 | $8,000 | 48 | $167 | Optimize |
| Informational | 540 | $5,500 | 8 | $688 | Add negatives |
| Job seekers | 180 | $2,000 | 0 | ∞ | Add negatives |
| Competitor | 320 | $1,800 | 5 | $360 | Move to competitor campaign |
| Irrelevant | 260 | $700 | 0 | ∞ | Add negatives |
Negatives added: 145 terms across 6 categories Projected savings: $8,200/month (27% of spend) Projected new CPA: $80 (hitting target)
Example 2: E-commerce Broad Match Bleeding Fix
Scenario: Online shoe store, keyword "running shoes" on broad match.
Bleed analysis:
- Total search term impressions: 45,000
- Relevant impressions: 28,000 (62%)
- Irrelevant impressions: 17,000 (38%) ← Severe bleed
Top bleed categories:
- "running shoes drawing" (art related) — 4,200 impressions, 0 conversions
- "running shoes for flat feet" (medical) — 3,100 impressions, 2 conversions (acceptable)
- "free running shoes" — 2,800 impressions, 0 conversions
- "running shoes factory outlet near me" — 2,400 impressions, 0 conversions (online only)
- "running shoes repair" — 1,900 impressions, 0 conversions
Actions:
- Added negatives: drawing, free, repair, factory outlet, near me
- Kept "flat feet" (relevant variation)
- Moved keyword from broad to phrase match
- Bleed rate dropped from 38% to 11% in 2 weeks
Example 3: Cross-Campaign Conflict Resolution
Scenario: 3 campaigns competing with conflicting negatives.
Conflict found:
- Campaign "Brand" has negative phrase: "reviews"
- Campaign "Non-Brand" bids on keyword: "product name reviews"
- Result: "product name reviews" blocked everywhere (Brand neg + Non-Brand doesn't target it)
Resolution:
- Changed Brand campaign negative from phrase to exact: [reviews]
- Now "product name reviews" routes to Non-Brand campaign correctly
- Impressions for review-related queries increased 340%
- Added 12 high-intent review queries to Non-Brand campaign
About this skill
Part of the Synter free skills collection — open-source agent skills for advertising, PPC, and marketing automation.
Want this skill (and 40+ more) running on autopilot against your live ad accounts? Try Synter — AI Agent Media Buyers that connect to Google, Meta, LinkedIn, TikTok, Reddit, Amazon, and 7+ more platforms.
- 🌐 syntermedia.ai
- 📚 All free skills
- 💬 Built by @syntermedia — questions? Open an issue.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

