The Ledger 01: Negative Keyword DisciplineThe click you didn't choose is still on the invoice.
One real, anonymized B2B SaaS account. The most expensive search term in the report wasn't a typo or a DIY query. It arrived through a matching mechanism nobody had audited, and it teaches the rule for where a negative keyword actually belongs.
"We reduced wasted spend" sounds like a mechanism. Usually it's a headline standing in for a finding nobody has actually walked through.
This is the first entry in The Ledger, a series where we walk one real, anonymized account through exactly that: the finding, dated, sourced, and explained.
Every entry in this series trades a named receipt for a working mechanism. No client name, no login, no dollar figure precise enough to trace back to a real business, ever. That's a contract requirement first. It's also the more useful trade: a number from someone else's account tells you what happened to them. A mechanism tells you what to check in yours: which report, which column, which cadence, which scope.
Ask any paid search operator whether they run negative keywords and the answer is always yes. Ask them to produce one real example, dated, sourced, and explained, and the room gets quiet. That gap is the whole reason this series exists.
The real seed is often a matching source you never audited, quietly harvesting an entire category of waste one plausible-sounding query at a time.
The Find
The account is B2B SaaS. The review that matters here started the way most good ones do: not an alert, not a dashboard flashing red, but a scheduled pass through the Search Terms report, sorted by cost, descending.
The single most expensive search term in the account was a competitor's brand name. One click. The cost ran several times higher than the account's average CPC. Zero conversions attached.
That alone is a familiar story. Competitor-name leakage happens. What made this one worth writing about is how the term got in. It hadn't come through a keyword at all. Pulling the Dynamic Search Ads search terms report, a separate report from the standard one, and adding the Page URL column showed which page-feed URL had actually matched the query. Google's own content-matching had read the site's pages and decided a competitor search was topically close enough to serve. Nobody had bid on that name. Nobody had typed it into a keyword list. The algorithm inferred the association on its own.
That detail turns a single bad click into a seed. Once the Page URL column flagged the mechanism, not just the term, the next move was to check that same column against every high-impression, low-click term in the account. It surfaced a small cluster of adjacent competitor names, plus a second, quieter pattern: aspirational and adjacent-category names that shared enough surface vocabulary with the account's own positioning that the same content-matching mechanism kept pulling them in too.
The fix ran in two parts, because either one alone leaves the leak open.
A Second, Quieter Seed: Right Category, Wrong Population
Not every seed is a term that's obviously off-topic. Some of the most expensive ones are hiding inside language that looks exactly like your own.
B2B categories routinely borrow words that also describe a completely unrelated consumer problem, searched by a population that outnumbers the real buyer by orders of magnitude.
This category doesn't announce itself the way a competitor's brand name does. It rarely tops a cost-sorted list, because an individual consumer who lands on a B2B ad by accident often doesn't click, and almost never converts. What it produces instead is impression volume that dwarfs everything else in the ad group, paired with a click-through rate that never quite makes sense for how "on-topic" the keyword looks on paper.
Deep impressions, weak engagement, a term that reads like the ICP's language but is actually being typed by several different populations who all happen to use the same word for entirely different problems.
The teaching point: don't only sort by cost. Sort by impression volume against click-through rate, and for the highest-volume terms that look obviously relevant, ask who else in the world searches that exact phrase, and what they're actually trying to do.
Where a Negative Actually Belongs
Every negative keyword decision runs through the same test: would this be bad everywhere the account will ever run, bad only inside one campaign's context, or is it genuinely ambiguous and needs the narrowest possible scope? Click a tier to see where it fits.
The Rhythm
The honest answer on cadence: it isn't a fixed calendar event, and treating it like one is itself a mistake.
The baseline for this account was a full search-term review roughly every two weeks. That's the backbone rhythm. Layered on top of it, when something specific got flagged mid-cycle, an interim check ran early rather than waiting for the next scheduled pass. Scheduled is the default posture. Ad hoc is the exception that fires when a signal is already visible, not the primary rhythm. An account run entirely on ad hoc reviews is an account that's always reacting, and reactive is a losing posture in an auction that updates in real time.
The account also ran on a second platform, and that platform got its own, slower cadence, not a mirror of the first. The reasoning was explicit at the time: lower edit velocity on that platform meant a weekly pass would have been overkill, so the review shifted to roughly every two to three weeks instead. Negatives found on one platform were never assumed to translate directly to the other. Different platform, different audience behavior, different close-variant logic, a separate look.
Session length varied more than the cadence did. A pass that's pure maintenance, checking what leaked through since the last cleanup, runs short, because most of the obvious waste categories are already blocked and the job is spotting what's new. A session that bundles structural work alongside the audit, a campaign rebuild, a new ad group, a landing page test, runs long, because the negative-keyword pass is one line item inside a bigger sitting, not the whole session.
Cadence should flex with spend velocity, not sit on a fixed day on the calendar. A slow account reviewed weekly generates noise faster than signal. A fast account reviewed only when someone remembers is an account bleeding budget between glances.
The Scope Decision, With Real Cases
This is the question most operators skip, and it's the one that separates discipline from a spreadsheet full of blocked terms nobody can explain.
| Level | Real case | Why this scope |
|---|---|---|
| Account | The competitor-brand cluster from Part One, added to a shared list | Bad in every campaign this account will ever run, including ones that don't exist yet. Zero false-negative risk. |
| Campaign | A term central to the account's own vocabulary, over-matched by one campaign's broad targeting configuration | The same term is a real product elsewhere in the account. Blocking it account-wide would cut real buyer traffic. |
| Ad Group | A term that named a real competitor's product and described a use case this account genuinely supports | Genuinely ambiguous until intent is confirmed. Narrowest scope keeps the call reversible without collateral damage. |
Account-level, in full. The competitor-brand cluster went onto a shared, account-wide negative list. Add a new product line's campaign next quarter and it inherits the same protection automatically, no re-work required. There's no legitimate scenario in which a customer searching a competitor's exact brand name is a buyer here. Maximum leverage, done once.
Campaign-level, in full. A Dynamic Search Ad configuration inside one specific campaign was crawling the whole site and matching on a bare term regardless of context, a term that's literally what the account sells elsewhere in the portfolio. The negative went in scoped to the one campaign where the matching mechanism was misbehaving, and nowhere else.
Ad-group-level, the hard case. A term surfaced that was simultaneously the name of a real competitor's product and a legitimate, actively-supported use case, customers migrating a specific function off that competitor's tool and onto this one. The first read was to block it as competitor noise. The correct read, once intent was confirmed, was closer to the opposite: on-target buyer traffic that happened to share a name with a competitor. Scoping to a single ad group meant the call could be reversed the moment real intent was confirmed, without cutting a legitimate segment everywhere else in the meantime.
Negative Keyword Starter Pack
Pick the vertical closest to your account. Every entry is tagged with the tier it belongs at and why, using the same logic from Part Three. Nothing here is a client's real list. It's a defensible starting point, not a finished audit.
| Term | Level | Match type | Reason |
|---|
What Actually Changed
No dollar figures here, on purpose. Directional framing, because the shape of the outcome is more honest than a number that can be reverse-engineered to an account.
The Finding Nobody Shows You.
"We reduced wasted spend" summarizes a finding without ever showing it. The actual finding is a mechanism: which term, sourced how, caught on what cadence, scoped at which level, and changed what, specifically, when you looked again. Pick your own account's Dynamic Search Ads search terms report, or the equivalent in Performance Max, and add the Page URL column before you look at cost. That's usually where the real seed is hiding.
One real account. Every entry.
We're opening the receipts on real, anonymized accounts, one mechanism at a time. Subscribe to get each entry as it drops.