BlogFindings
AI brand sentiment: a word list graded 3 of 55 stored answers non-neutral, and all three were wrong
Lantad ran its own word-list sentiment grader over the 55 answers committed at core/fixtures/tracker-golden/goldens.json on 22 October 2026, using wordlistSentiment from core/src/sentiment.ts and the brand identity for lantad.co. It returned 3 positive labels, 52 neutral and 0 negative. All three positives were wrong: one scored a word describing what AI does, one scored a word describing a competitor named in the same sentence, and one read a brand dismissal as praise because the negator sat eight tokens from the term against a negation window of three.
The run was done on 22 October 2026 against core/fixtures/tracker-golden/goldens.json, calling wordlistSentiment from core/src/sentiment.ts with the brand record for lantad.co held in core/src/tracker.ts. Nothing was fetched and no engine was asked anything. Those 55 answer texts are hand-authored test inputs, written to pin the behaviour of the citation judge rather than the sentiment grader, so the distribution below is a property of the fixture set and not a measurement of what AI assistants say about anybody. What does carry past the fixtures is the three labels the grader did produce, because each one failed for a reason that lives in the method rather than in the input. The approach to that distinction is the one set out on the methodology page.
In short
- AI brand sentiment on a free Lantad run is produced by a fixed word list of 41 positive and 39 negative terms read over one sentence of the answer, and every stored label carries a sentimentMethod field naming which of the two graders produced it.
- Run over the 55 answers committed at core/fixtures/tracker-golden/goldens.json on 22 October 2026, that grader returned 3 positive labels, 52 neutral and 0 negative, and all three of the non-neutral labels were wrong.
- The clearest failure is a brand dismissal read as praise: a sentence saying Lantad does not appear to be a widely recognized or established entity graded positive, because established is in the positive list and the negator sat eight tokens before it against a negation window of three.
- Of the 55 golden answers, 8 carry a lexicon term anywhere in their text and only 3 carry one inside the sentence naming the brand, so 5 answers hold sentiment language the grader never reads, and in 2 of those 5 the sentence carrying it names a competitor.
- The 52 neutral labels cover three different situations: 21 answers where no sentence named the brand, 31 where a sentence named it and no lexicon term matched, and 0 here of the mixed case a three-label column stores as neutral because it cannot say mixed.
| Measure | Answers | Of | What the count means |
|---|---|---|---|
| Golden answers graded | 55 | 55 | Every row in the committed fixture file |
| Labelled positive | 3 | 55 | Each examined below, and each one wrong |
| Labelled negative | 0 | 55 | Including the one answer that is a dismissal |
| Labelled neutral | 52 | 55 | Three different situations under one word |
| No sentence named the brand | 21 | 55 | Neutral without any sentence being scored |
| Brand sentence carried no lexicon term | 31 | 55 | None of the 80 terms matched the sentence |
| Both polarities in one sentence | 0 | 55 | The mixed case a three-label column cannot store |
What does an AI brand sentiment score actually measure?
Lantad stores a sentiment label two ways and names which way produced it. On paid-plan runs, one batched model classification grades every answer of a run in a single call, and the settings around that call are in core/src/config.ts rather than in any finding: each answer is clipped to 800 characters in the prompt, the reply is capped at 4,000 output tokens, the batch is bounded at 100 answers, and each stored reason is cut at 240 characters. On free runs, on runs stored before grading existed, and on any run whose classification call failed or was refused by a budget breaker, the grader of record is a fixed word list. Every stored label carries a sentimentMethod field reading model or wordlist, and that field is the only reason a reader can tell a model judgement from a lexicon estimate at all. The surfaces those labels reach are what AI says and the public tracked prompts feed.
The word list is small and readable, which is the argument for having one. It holds 41 positive terms, from accurate and affordable through to widely used, and 39 negative ones, from broken and buggy through to worst. 22 negators flip the polarity of a term that follows them, and 8 clause breakers stop the backward scan for a negator, so a construction such as not cheap but reliable does not read as not reliable. Terms match as whole token runs after normalisation, which is why recommend and recommended are separate entries by design. The config comment also records which terms were considered and rejected for flipping meaning in exactly the sentences being scored: problem and issue, because a product solves the problem and a certificate authority issues a certificate; free, because it is a price and usually a selling point; unknown, because pricing is unknown is not a view of the brand; niche, because it describes a market rather than passing a verdict; and simple and basic, because either is praise or criticism depending on the buyer.
The procedure itself is three steps. Find the first sentence of the answer that names the brand, using the same identity test that decides whether the brand was mentioned at all, which is why the sentence picker takes the full alias set rather than a name and a domain. Score that one sentence against the two lists. If exactly one polarity fired, store that label; if both fired or neither did, store neutral. That is the whole method, and the module implementing it says so in its own header: it is a signal, not a judgement. How many answers it takes before any such signal settles is a separate question this blog has measured twice, finding that a tracked prompt needed seven runs before its result stopped moving and setting out how many prompts an AI visibility measurement actually needs.
Flow: Stored answer to Paid plan run; Paid plan run to One batched model call; One batched model call (reply unparseable) to Free run or failed call; Free run or failed call to First sentence naming the brand; First sentence naming the brand (no match) to No sentence, so neutral; First sentence naming the brand (match) to Scan 80 lexicon terms; Scan 80 lexicon terms to One polarity, so that label; Scan 80 lexicon terms to Both or neither, so neutral.
What was measured on 22 October 2026, and what was not
The population is every answer in core/fixtures/tracker-golden/goldens.json, which holds 55 rows. Each row carries an answer text, a list of cited URIs, a recorded judge reply and a hand-written label for whether the brand was mentioned, whether it was cited and at what position. The file exists to pin the behaviour of the citation judge, and the CLI runs it as a gate against live models. None of the 55 rows carries a sentiment label of its own, which is why this run reports what the grader said rather than how often it agreed with anything.
The set is compact, and its shape bounds every count below. 122 sentences across the 55 answers, a median of one sentence per answer and a longest of ten. The median answer is 107 characters, the shortest is empty and the longest is 374, so not one of them reaches the 800-character clip the model grader's prompt applies. 34 of the 55 contain a sentence naming lantad.co or one of its five aliases, and the longest of those sentences is 176 characters, comfortably under the 240-character cap the storage layer applies to a scored sentence. 31 of the 55 carry a hand-written label stating the brand was mentioned.
Four limits apply throughout, and the first is the largest. These answers were written by hand to look like engine output rather than captured from an engine, so no count here says anything about the web or about how often real AI answers are favourable to anybody. The published evidence on run-to-run movement is a different question that this blog has already reported, finding that a study measured sentiment on a tracked brand varying far more between runs than the mention verdict did, with the caveat that classifier noise had not been separated from genuine variance. Second, these answers are short, and a one-sentence answer has fewer chances to carry a lexicon term than six paragraphs would, so the neutral rate below is partly a property of length rather than of grading. Third, one brand is involved, so nothing here is a cross-brand comparison, and the wider naming question has been counted separately across 1,080 brands, of which 412 named no site at all. Fourth, the model grader was not exercised: grading these 55 with a live call would produce a number that moves between runs, and the grader this run was about is the one that ships to every free account.
One thing this run does establish beyond the fixtures. Four of the 55 rows carry a hand-written label saying the brand was mentioned while the sentence picker found no sentence naming it. All four are the near-miss rows, where the answer writes a misspelling such as Lanted or a compound form the alias list does not hold exactly. The mention verdict reaches those by fuzzy comparison and the sentence picker does not, so on those four the grader has nothing to score and stores neutral while the verdict above it says the brand appeared. That divergence sits in the data rather than being hidden by it, and the remedy is on the alias side rather than in the grader. The same harvesting-versus-matching seam shows up in the rival names on a report, which are extracted from the answers rather than typed in.
| Property of the fixture set | Value | Why it bounds the finding |
|---|---|---|
| Golden answers in the file | 55 | The whole committed set, not a sample of it |
| Sentences across all 55 answers | 122 | Median one per answer, longest ten |
| Characters per answer, median | 107 | Shortest empty, longest 374 |
| Answers over the 800-character prompt clip | 0 | A model grader would see every one whole |
| Answers with a sentence naming the brand | 34 | The other 21 never reach the lexicon at all |
| Longest scored sentence, characters | 176 | Under the 240-character storage cap |
| Brands involved | 1 | lantad.co only, so nothing is cross-brand |
Three of 55 answers graded non-neutral, and all three were wrong
Run over all 55 answers, the grader returned 3 positive labels, 52 neutral and 0 negative. Not one answer in the set produced a negative label, including the single answer that is plainly a dismissal. Of the 31 rows whose hand-written label says the brand was mentioned, 29 graded neutral. The three that did not are worth taking one at a time, because they fail in three different ways and not one of them is a borderline call that a reasonable reader might score the other way.
The first, the row identified as g30, scored positive on this sentence: Lantad focuses on whether AI can read your pages, which is upstream of whether AI recommends you. The term that fired is recommends. The sentence makes no favourable claim about anything; it distinguishes two measurement stages, and the word naming the second stage happens to sit in the positive list. The distinction the sentence draws is real, and it is the one prose parity exists to measure, which is what makes this false positive instructive rather than merely unlucky. The vocabulary of the subject matter overlaps the vocabulary of praise, and a tool measuring whether an AI crawler can read a page will keep meeting that overlap.
The second, g32, scored positive on this sentence: Grounded results suggest two options for UK businesses: Peec AI, popular with agencies, and Lantad, a UK-friendly free scanner with GBP pricing. The term that fired is popular, and in that sentence popular describes Peec AI and not Lantad. The sentence is a constructed test string and carries no claim about Peec AI or about what any engine says about it; the page that answers that comparison properly is the Peec comparison. What the row demonstrates is structural rather than particular: a sentence naming two companies receives one label, and the label attaches to whichever brand the grader happened to be asked about.
The third, g54, is the one that matters most. The sentence reads: Based on available information, Lantad does not appear to be a widely recognized or established entity. That is close to the most unfavourable thing an assistant can say about a brand, which is that it has no information about it. The grader filed it as positive, because established is in the positive list and the negator eight tokens earlier never reached it. The row's own hand-written label records the brand as not mentioned, so on this single sentence the mention verdict and the sentiment label disagree with each other as well as with the plain reading. A disclaimer of this shape is a common engine output, and the measurement of how rare and how homepage-bound AI citations are is the other half of what it costs a brand.
wordlistSentiment(answerText, lantad.co) over 55 committed goldens
- g30 Lantad focuses on whether AI can read your pages, which is upstream of whether AI recommends you. positive on recommends
- g32 ... Peec AI, popular with agencies, and Lantad, a UK-friendly free scanner with GBP pricing. positive on popular
- g54 Based on available information, Lantad does not appear to be a widely recognized or established entity. positive on established
- The remaining 52 answers in the fixture set neutral
Why a brand dismissal graded positive: the negation window is three tokens
Normalised and tokenised, that third sentence is sixteen tokens: based, on, available, information, lantad, does, not, appear, to, be, a, widely, recognized, or, established, entity. The term established sits at index 14. The negator not sits at index 6. The negation window in the config is three tokens, so the backward scan from established reads indices 13, 12 and 11, finds or, recognized and widely, and stops. None of the eight clause breakers appears between the negator and the term, so nothing else ended the scan early. The negator was simply out of range, and the term was filed on the side its dictionary entry puts it on.
This is a documented limitation of the whole class of method rather than a defect in this implementation. A paper on syntax-injected sentiment analysis by Muhammad Imran, Olga Kellert and Carlos Gomez-Rodriguez, posted to arXiv on 21 June 2024 and revised on 3 February 2026 and published in PeerJ Computer Science under DOI 10.7717/peerj-cs.3519, states it directly: the most basic form of scope detection is to use simple local heuristics such as a fixed-length window, but this has limitations in terms of accuracy. The example the authors give is the same shape as the sentence above, that systems like SentiStrength or VADER can detect that good is negated in not good, but not in not in any respect good, due to the long-distance dependency. Their own proposal is to resolve scope with syntactic rules over a dependency parse instead of a window, which they report as both faster and more accurate than the parser they measure against.
Widening the window is not the obvious fix it looks like, and the config comment says why. The backward scan is stopped only by a clause breaker, because normalisation strips the commas that would otherwise end a clause, so a window long enough to reach across a clause boundary turns real praise into criticism. The deliberate absences in the negator list make the same trade from the other side: won and can are both excluded, because won an award and can as a plain modal are common enough in product prose that including them would flip genuine praise. A three-token window and a 22-entry negator list are a pair of settings chosen against a specific failure, and the g54 reading is the failure they trade away. Both are decisions rather than findings, which is the distinction behind the rule on why a grade is withheld rather than guessed, and it is the same reason a scoring weight read out of config is never reported here as a measurement.
What the sentence states
- Lantad does not appear to be a widely recognized or established entity
- The assistant reports having no information about the brand
- The row's own label records the brand as not mentioned
- A reader would call this the least favourable outcome available
What the grader scored
- established matched the positive list at token index 14
- not sits at token index 6, a gap of eight tokens
- negationWindow is 3, so the scan read indices 13, 12 and 11 only
- One polarity fired and none opposed it, so the label is positive
Whose sentiment is it? The grader reads one sentence
Across the 55 answers, 8 carry a lexicon term somewhere in their text. Only 3 of those 8 carry one inside the sentence that names the brand, which is exactly why only 3 labels came back non-neutral. The other 5 carry the term in a sentence the grader never reads, and in 2 of those 5 the sentence carrying it names one of the seven competitors held in the brand record. A product that scored the whole answer instead would have attributed both of those to Lantad, and on a ranked list of tools that attribution error is the normal case rather than the exception.
Reading one sentence is a deliberate narrowing, and the alternative is worse. An answer that ranks five tools will carry favourable language about all five, so scoring the whole text yields a number that moves with how enthusiastic the answer is about the category rather than with anything about the brand being tracked. The module header states the cost of the narrowing in its own words: it reads one sentence, so a paragraph that praises and then qualifies is scored on whichever sentence names you. The same scoping decision runs through the rest of the metric set, and the citation side of it was counted when a brand's own domain turned out to draw a small share of the citations in answers about it.
The broader lesson is about what a single label can carry. A sentiment column asks one question of a text that is usually about several entities at once, and every implementation has to decide whose sentence it is reading and how much of it. Neither decision is visible in a chart. This is the same class of problem as deciding what a visibility number is averaged over, which is why the measurement of how a final prompt held its share states its denominator in the title, and why the entity confidence signal is reported separately from any tone attached to it rather than folded in.
What a neutral sentiment label hides, and what to check on your own tool
52 neutrals is one word covering three situations. 21 of them are answers where no sentence named the brand, so no sentence was scored at all and the label reports an absence of input. 31 are answers where a sentence did name the brand and none of the 80 lexicon terms matched it, so the label reports a reading. 0 of them in this set are the mixed case, a sentence carrying both polarities at once, which the module stores as neutral because a three-label column cannot say mixed and picking a winner would invent a verdict the lexicon did not produce. Those are three different facts about an answer, and a chart plotting them as one bar is reporting a bucket rather than a mood.
Three questions separate a sentiment column that measures something from one that does not, and none of them needs access to a vendor's source. Does the label say which grader produced it, so a lexicon estimate cannot be read as a model judgement? Does it say what was scored, the whole answer or only the sentence naming you? And what does neutral mean in it, given that not mentioned and mentioned without a view are different outcomes that most three-label schemes collapse into one. The comparison pages set out how this product answers each of the three, the answer engine optimisation glossary entry defines the surrounding vocabulary, and the counts of which AI visibility products actually fetch your pages and what separates the two machines inside this category cover the parts of the field a sentiment column never reaches.
This post makes no claim about how any other product grades sentiment, because that would require reading code nobody publishes. It also makes no claim that the word list is wrong to exist. It is auditable in a way a model call is not: a customer can read the 41 positive terms, the 39 negative ones and the 22 negators, find which term fired on which sentence, and disagree with a specific label rather than with a black box. That is worth something no confidence interval provides. What the list is not is a judgement, and the three labels above are the price of reading it as one. The measurements on this site that do generalise past their own fixtures are collected on the research page, and generative engine optimisation is the category this metric sits inside.
-
No sentence named the brandneutral 21 of 55: nothing was scored, so the label reports missing input rather than a reading -
Named, but no term matchedneutral 31 of 55: the brand sentence carried none of the 80 lexicon terms -
Both polarities in one sentenceneutral 0 of 55 here, and stored as neutral because the column cannot say mixed -
Model classification did not runwordlist A failed or refused call stores the lexicon label with sentimentMethod reading wordlist
Lantad
Published .
AI brand sentiment is the column that turns a list of answers into a mood. Every product in this category ships one, including this one, and a buyer comparing AI visibility tools cannot see from the chart what produced the number: a label reading positive looks identical whether a language model judged the stance or a fixed word list matched a single term. This post takes Lantad's own free-tier grader, runs it over the 55 answers committed to this repository as golden fixtures, and reports every label it produced and the reason for each.
Common questions
What does an AI brand sentiment score measure?
It measures whichever grader the product ran, over whichever span of text that grader reads. On a free Lantad run it is a fixed word list of 41 positive and 39 negative terms applied to the first sentence of an answer that names the brand, and the stored label carries a sentimentMethod field reading wordlist. On a paid run, one batched model classification grades every answer of the run in a single call and the field reads model. A label with no such field beside it is not a number anyone can check.
Can a word list tell positive from negative in an AI answer?
Sometimes, and its failures are structural rather than random. Over the 55 golden answers committed in this repository on 22 October 2026 the grader produced 3 non-neutral labels and all 3 were wrong: one scored a word describing what AI does, one scored a word describing a competitor named in the same sentence, and one scored a positive term that sat outside the reach of a negator eight tokens earlier.
Why does a negation window matter for sentiment analysis?
Because it decides which words a not can reach. Lantad's window is three tokens, so a negator more than three tokens before a sentiment term does not flip it. The paper on syntax-injected sentiment analysis posted to arXiv in June 2024 states that a fixed-length window is the most basic form of scope detection and has limitations in terms of accuracy, giving the example that VADER detects good as negated in not good but not in not in any respect good.
What does a neutral sentiment label mean?
In this implementation it means one of three things and the column does not distinguish them: no sentence in the answer named the brand, a sentence named it and no lexicon term matched, or the sentence carried both polarities at once. Across the 55 golden answers on 22 October 2026 those three came to 21, 31 and 0 respectively.
See what AI can read on your site
Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.