The guide
An exclusion list is a set of promises about words, and words are slippery
A negative keyword list only helps if you know exactly what each entry will block. Counting single words shows the problems faster than reading queries, and it shows the collateral damage too.
- 18 of 45 terms blocked by seven entries in the worked example
- 5 terms hold the word repair in the example; the shop wanted one of them
- 80 characters and 10 words: one platform's published keyword limit, read 2026-10-11
- 3 kinds of entry all words, phrase and exact, each with one stated rule
Read the full guide Fold the guide
What the list is for
An exclusion list is a short document with a long reach. Each line says: when this appears in a search, leave me out.
Advertising platforms give that document a formal home. The developer documentation for one large platform, Google Ads, describes a negative keyword list as a set of keywords to exclude from targeting. Such a list can be shared, so one list serves many campaigns, and a list attached to a campaign applies to every ad group inside it. The same documentation puts numbers on the container: a keyword’s text is at most 80 characters and 10 words, and the guide gives, as examples of account limits, up to 20 shared negative keyword lists and up to 5,000 negative keywords in one shared set. Those figures are published guidance as read on 11 October 2026, not a guarantee.
So the list is small and its consequences are not. That asymmetry is the whole subject. A line you add in ten seconds will act on searches you have never seen, for as long as it stays in the list. The usual way to build one is to read a report of past searches and strike out the ones that were never going to become customers. It works. It is also slow, and it hides the pattern you most need to see.
Reading words instead of queries
A search term is a sentence fragment. Read forty of them and you remember four. The fragments differ from each other in ways that do not matter and agree in ways that do, and the eye is poor at telling which is which.
The older idea from text analysis is to stop reading the fragments and count their parts. A run of adjacent items taken from a text is called an n-gram: one word, two words in a row, three words in a row. Cut every term into those runs, count how many terms hold each run, and the list of terms turns into a much shorter list of ingredients.
Take the worked example the tool opens with, a shop that sells leather walking boots. Its table has 46 rows. Two rows differ only in capital letters, so they fold into one, leaving 45 unique terms. Those 45 terms hold 51 different single words, 71 different pairs and 67 different triples. Nobody wants to read 189 groups either, but they sort themselves: boots sits in 35 terms, walking in 34, leather in 22, and then the interesting part of the list begins.
The word repair is in 5 terms. Read as queries they are scattered: a repair kit, a repair shop, a repair near me, a how to, a do it yourself. Read as one word they are a single decision. That is why word counts find problems faster than reading. One judgement about a word settles every term that holds it, including the ones you had not reached yet.
It also settles the ones you would have kept. That is the price, and the rest of this essay is about paying it knowingly.
What a word is
Before anything can be counted, something has to decide where a word starts and stops. This sounds trivial and is not. The Unicode Consortium publishes default rules for it in its annex on text segmentation. Letters and digits run together. An apostrophe or a full stop stays inside a word only when letters stand on both sides, or digits on both sides, which keeps men’s and 3.5 whole. A hyphen is not on that list, so t-shirt is two words. The characters allowed in the middle of a word are published as data, one line each, and the tool takes them from that file, not from memory.
Case has to be ignored, and that too has a published answer: a case folding table maps each letter to a common form, so Boots and BOOTS meet. Composed and decomposed accents have to meet as well, which is what the normalization forms are for. Accents themselves are kept. Folding them away would merge words that differ in meaning in many languages, and nobody has asked for that.
Then the rules run out. The annex itself says that finding word boundaries in Thai, Lao, Chinese or Japanese takes dictionary lookup or some other mechanism, and browser documentation for the built-in segmenter shows a Japanese sentence being split into dictionary words that no simple rule would find. The tool makes a plain choice and states it: a Chinese character or a hiragana letter counts as one word, a katakana run is one word, and no dictionary is used. Its counts for those scripts are counts of characters, and should be read that way.
One more choice deserves daylight. Shoe and shoes are different words here. An optional rule strips common English plural endings, and the page lists what it gets wrong, because a rule that turns movies into movy should not be trusted silently.
Three kinds of entry and one honest gap
The platform’s scripting reference documents a notation with 3 kinds of entry. Text added bare is a broad match negative keyword. Text inside double quotation marks is phrase match. Text inside square brackets is exact match. The reference for the programming interface names the same three types.
What those pages do not say is how the platform decides that a given search matches a negative keyword of each type. None of the openly licensed pages read for this tool describes that behaviour. A tool that claimed to reproduce it would be guessing in a confident voice.
So the tool states a model of its own and labels it as its own. An entry written plain blocks a term when every word of the entry is somewhere in the term. An entry in quotation marks blocks a term when its words stand together, in order, inside the term. An entry in brackets blocks a term only when the term is exactly those words. Whole words only: art never matches start. Nothing else matches, not a plural, not a misspelling, not a synonym. That is narrower than what a platform may do, and the difference is the visitor’s to check in their own account.
A stated model has one great virtue. Its consequences can be computed exactly. In the example, six word groups are marked excluded and three entries are typed by hand. Two of the nine turn out to be unnecessary: one is a duplicate, and the phrase used once blocks nothing that the single word used does not already block. Seven entries remain, and under the model they block 18 of 45 terms.
Now the collateral damage. The shop keeps a short list of terms it wants. One of them is walking boots free delivery, and the entry free blocks it. Another is leather boot repair kit, and the entry repair blocks it. A third problem is quieter: the shop marked waterproof as a word it wants, and the phrase how to blocks a term that holds it. Three conflicts, each traceable to one entry and one word.
None of the three is a mistake in the arithmetic. They are the ordinary cost of single words. The fix is to narrow the entry, trading the bare word free for a phrase or an exact entry that names the unwanted search, and the count shows what the narrower entry gives up.
What the numbers can carry
A search term report usually comes with a column of numbers. The tool will add one such column up, per word, and that needs care of a dull kind. Ordinary computer arithmetic stores decimal fractions as binary fractions, and most decimal fractions have no exact binary form, so sums drift. Add 0.1, 0.2 and 0.3 in the double precision arithmetic a browser uses and the answer is 0.6000000000000001. Small, and still wrong. The tool holds every value as a whole number of tiny units and adds whole numbers, so the total for a word is exact to the last digit typed.
The same strictness applies to the file. The comma separated format has a specification, and it is short: fields may be quoted, a quote inside a quoted field is doubled, a quoted field may hold a line break. A file that breaks those rules is refused with the number of the line, not repaired by guesswork, because a silently shifted column would put the wrong number against the wrong word. Reports are sometimes saved as UTF-16 text; a byte order mark at the start of the file tells a decoder which encoding it is, and the tool reads that mark before anything else.
Going out, a cell that starts with an equals sign, a plus, a minus or an at sign can be run as a formula by a spreadsheet. Search terms do start that way sometimes. The security guidance is to put a single quote in front, and the tool does. The decisions themselves are saved as a small JSON file, a format with its own short specification, so a review can be put down and picked up again.
What a list built from the past cannot do
It cannot see next month. Every entry comes from a search that already happened, so the list is always one unwanted search behind. A new product, a news story or a change in how people phrase things will bring words the list has never met.
It cannot read meaning. A word counted in five terms may be unwanted in four and essential in the fifth, and only a person who knows the business can tell. Blanket lists copied from elsewhere are the worst case of this: they block words for a shop they were never written for.
And it cannot speak for the platform. The counts describe a list of words under a stated rule. They say nothing about cost, clicks or results, and they are no substitute for looking at what the account actually does after the list goes in. What the method can do is narrower and worth having. It turns a long, tiring read into a short series of decisions, shows each decision’s full reach before it is made, and names every wanted term that a careless word would have taken with it.
Sources
Every source consulted for this guide. Links checked October 11, 2026.
- UAX #29: Unicode Text Segmentation Unicode Consortium
- WordBreakProperty-18.0.0.txt, Unicode Character Database Unicode Consortium
- UAX #15: Unicode Normalization Forms Unicode Consortium
- CaseFolding-18.0.0.txt, Unicode Character Database Unicode Consortium
- Intl.Segmenter MDN Web Docs
- n-gram Wikipedia
- AdsApp.NegativeKeywordList Google for Developers, Google Ads Scripts reference
- KeywordMatchType Google for Developers, Google Ads API reference
- KeywordInfo Google for Developers, Google Ads API reference
- Shared sets Google for Developers, Google Ads API guide
- System limits Google for Developers, Google Ads API guide
- Site Policies Google for Developers
- RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files IETF, RFC Editor
- RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format IETF, RFC Editor
- CSV Injection OWASP Foundation
- 15. Floating-Point Arithmetic: Issues and Limitations Python Software Foundation, Python documentation
- Encoding Standard WHATWG