Ad Negative Keywords
Build and maintain negative keyword lists from search term reports to cut wasted ad spend in paid search - n-gram query mining to surface irrelevant search terms, the right negative match types and exclusion levels (account, shared list, campaign, ad group), and a review cadence that avoids overblocking queries that convert. Use whenever the user mentions a search term or search query report, irrelevant clicks, junk traffic, wasted ad spend, or wants to exclude or block keywords - even if they never say 'negative keywords'. Covers B2B lead gen and B2C/e-commerce; needs the account's query data. Do NOT use for account-wide underperformance with no query-level evidence - use mbfinotti/advertising-skills@ad-account-diagnostic instead.
- Skill ID
- mbfinotti/advertising-skills/ad-negative-keywords
- Publisher
- mbfinotti
- Repository
- advertising-skills
- Installs
- 878
- Files
- 4
- License
- MIT
- Synced
- Oct 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
mbfinotti/advertising-skills/ad-negative-keywordsInstalls these files- SKILL.md
- evals/evals.json
- references/platform-notes.md
- references/worked-example.md
What this skill tells the agent
Negative Keywords
Build and maintain a negative keyword list from search term reports, so paid-search budget stops leaking to irrelevant queries - without blocking the queries that convert.
The mechanics - match types, exclusion levels, thresholds, cadence - are identical for B2B lead gen and B2C/e-commerce. Two things differ by segment:
- Which junk categories dominate (see taxonomy).
- The decision data: B2B's sparse conversions force click/cost gates, B2C volume allows conversion-based gates.
Evidence gate
- Never propose specific negative keywords for a live account without its search term report (also called search query report).
- Missing report → request an export, explain the overblocking review below, and name zero candidate negatives in the meantime.
- Exception: a brand-new campaign with no history may get a starter exclusion list - label it "pre-launch starter, review against real queries after 7-14 days".
A list invented from imagination has no evidence of what actually matches, and its cost, blocked converting queries, stays invisible.
Clarifying questions
Ask once, briefly, before analyzing. Skip anything already answered. This is a tactical pass, not an interview.
- What counts as a conversion, and what is the target CPA or ROAS?
- What date range does the report cover, and roughly what did the account spend over it?
- What CPC range does the account run? (Sets the click threshold.)
- Which queries or themes must never be blocked - brand terms, converting themes, deliberate competitor bidding?
- Which levels can you edit: account/shared list, campaign, ad group?
- By what date must the saving show up in the account's numbers?
- Is this a one-off cleanup, or a standing maintenance job you want to keep compounding?
- What is the effort ceiling per pass - minutes available, who else has to approve a change, and can you reverse an account-level exclusion yourself?
Re-rank this skill's two option menus (exclusion level, cadence) against those answers:
- A hard date promotes the fast local rungs - ad group or campaign negatives applied in this pass.
- A standing-maintenance mandate promotes the compounding rungs - shared exclusion lists plus the quarterly conflict sweep.
- A tight effort ceiling or a slow approval path demotes account-level exclusions, which cost the most to audit and the most to reverse.
Every ordering below is a default, not a law: it shifts with the account and with who executes it. Re-rank against what you already know about this user - an in-house scripting ability makes the n-gram pass and the conflict sweep far cheaper than the default order assumes, and a shared list already built and attached makes that rung near-free. Where an answer rules a rung out entirely rather than moving it, delete it by name (see step 7).
Core mechanics
Read before adding anything - most negative-keyword damage traces to these rules.
- Positive keywords expand automatically to close variants.
- Negative keywords do NOT expand to close variants. Add plurals, synonyms, and word stems as separate negatives yourself.
- Casing and misspellings are matched automatically.
- Negative match types, ranked by waste blocked per unit of overblocking risk:
phrase > exact > broad. - Phrase (default) - blocks the words in that order; extra words around them still block. Best ratio: one entry kills a whole junk theme, and a wrong call costs that theme, not the account.
- Exact - blocks only that literal query. Safest and narrowest: use it for a surgical block next to converting siblings. It needs one entry per variant, so a list built mostly of exacts becomes a standing job.
- Broad - blocks any search containing ALL the words, in any order. Widest reach and widest blast radius: one bad broad negative silently zeroes a converting theme. Reserve for terms that are wrong in every recombination.
- Axes disagree:
- reach:
broad > phrase > exact - overblocking risk:
broad > phrase > exact - upkeep effort:
exact > phrase > broad - Move up to broad only when the term is wrong in every recombination AND the conflict check against active keywords comes back clean. Move down to exact when the term sits one word away from a converting query.
- Check the platform's default match type when adding from a report - some default to exact, which blocks the fewest searches. Switch to phrase deliberately.
- Negatives always beat positives: a blocked active keyword still displays as active but never enters the auction.
Workflow
- Pull the search term report for the lookback window.
- 7-14 days for a recurring weekly pass.
- 30-90 days for a first cleanup or a low-volume account.
- Sort by cost descending. Filter to zero conversions. This surfaces the spend producing nothing.
- Mark a term as a candidate when it crosses either gate:
- 15-20 clicks with zero conversions (tighten to 10-12 when CPC is high, roughly $3+).
- Spend of 1.5-2x target CPA with zero conversions, regardless of click count.
- Low-volume B2B: conversion data is too sparse to gate on - rely on the click/cost gates plus clear irrelevance from the taxonomy.
- Classify each candidate with the taxonomy below. A merely uncertain term is not a candidate - leave it to collect more data.
- Run the overblocking review on every candidate:
- Ever converted in account history (the term or a close sibling)? Do not negate.
- Would the chosen match type also block a plausible converting query? Narrow the match type or wording.
- Conflicts with an active keyword anywhere in the account? The negative silently zeroes that keyword.
- Set the match type per the ranking in Core mechanics, then expand variants manually: plural/singular, synonym, and stem forms.
- Pick the level, ranked by waste blocked per unit of blast radius:
shared exclusion list > ad group or campaign > account.
- Shared exclusion list (default) - for a recurring theme across campaigns. Costs about an hour once: name it by taxonomy category, attach it, document it. After that every new campaign inherits it by attachment, so the payoff compounds. Reversible by detaching, and the blast radius stops at what you attached.
- Ad group or campaign - for a query genuinely local to one container. Near-zero effort, near-zero blast radius, and near-zero durability: the same term resurfaces in the next campaign and gets negated again from scratch.
- Account level - for universal disqualifiers and brand-safety terms only. Widest reach, and the worst reversibility of the three: it suppresses everywhere, including campaigns built later by someone who never saw the list, and nothing in those campaigns points back at it.
- Axes disagree:
- reach:
account > shared list > ad group - setup effort:
shared list > account == ad group - effort to audit later:
account > shared list > ad group - reversibility:
ad group > shared list > account - Account and ad group tie on setup effort because both are the same act - paste the term into one container's negative list, near-zero either way. Everything that separates them lands after setup, on reach, audit and reversal.
- What the efficiency order starves: the account-level exclusion. It buys the widest reach of the three and it is the one rung nobody can audit or reverse cheaply, so a ratio always picks something smaller. Promote it anyway for a universal disqualifier or a brand-safety term - the terms whose cost of leaking once is higher than the cost of an over-wide block - and the third time the same term needs negating in a new container.
- Move down when the term is only wrong for one product line, geography, or campaign intent.
More from mbfinotti
Use this skill in a project
Open any RiverX project, search the Skills panel for mbfinotti/advertising-skills/ad-negative-keywords, and install it in one click.
