> ## Documentation Index
> Fetch the complete documentation index at: https://docs.attensira.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sentiment

> How answers talk about your brand where they take a position at all. An answer that names you without judging you is left out of the score, never counted as neutral.

Sentiment answers one question: when an answer has an opinion about your brand, is it a good one? It does not answer "how do answers feel about us on average", because most answers that name a brand hold no opinion about it, and scoring those would bury every real opinion under a pile of price quotes and feature lists.

## The one rule: no stance is not neutral

Every successful answer is read for its **stance** on your brand. The stance is one of three things, or nothing:

| Stance | Means | In the score? |
| - | - | - |
| **Positive**, **Neutral** or **Negative** | The answer takes a position on your brand: praise, criticism, a recommendation, a reservation, a balanced verdict | Yes |
| **No clear stance** | The answer was read and judges nothing: a price, a feature, a bare entry in a list | No |
| **Not scored yet** | Nobody has read the answer for its stance yet | No |

**Neutral** and **No clear stance** look alike and mean opposite things. "Ledgerly is one of several reasonable options" is a neutral verdict and counts. "Ledgerly starts at \$12 per seat" names you and judges nothing; it is left out. Counting it as neutral would move your score whenever the mix of questions you track moved, which is not sentiment.

**Not scored yet** is different again: it is the absence of a reading, not a reading. A new answer is not scored yet until it has been read for its stance, which happens after it is stored, never while it is being sampled.

## How it is calculated

Every number on the Sentiment page divides by **scored answers**: the answers with a stance. Never by answers read.

```text theme={null}
positive share = answers with a positive stance
               ÷ answers with any stance (scored)
```

The neutral and negative shares are the same over the same denominator, so the three sum to 100% of the scored answers.

The **sentiment score** is the average stance of the scored answers on a scale from **-1 to +1**. Above +0.15 reads as mostly positive; below -0.15, mostly negative. A score of 0 is a real reading: the opinions cancelled out. A score of `null`, shown as —, means no answer in the window took a position, and there is nothing to average.

The page shows both numbers beside each other, with their counts: the scored answers, the answers read, and the answers not scored yet. When the scored count is small, read it before the score. Five scored answers out of three hundred read is five opinions, not a verdict on your brand.

## The Sentiment page

**Analytics → Sentiment** shows, for the window:

* the score and the positive, neutral and negative shares, with the scored count;
* the positive share's change against the previous window of the same length, only when it clears the [significance test](/measure/reading-the-numbers#why-does-a-change-say-real);
* the score by day and the positive share by day, as two separate charts. A day with no scored answer is a gap in the line, not a zero;
* one row per answer engine and per topic, each dividing by its **own** scored count;
* the scored answers themselves, each with the sentence that carries the stance, so you can check the score against the words.

Filtering by engine or topic recomputes every number for that cut. Filtering by stance only narrows the list of answers: the shares stay what they are, because a share filtered down to itself would always read 100%.

### Flagging a score

If a stance looks wrong, flag the answer. A flag is a note that somebody on the workspace disagrees with the score. It is an annotation, never an edit: it changes no number on the page.

## Per-brand stance in the brand order

Each answer's [brand order](/measure/share-of-voice#the-full-brand-order) lists every brand it names. Each brand in it carries its own stance under the same rule: a brand the answer names without judging has no stance, not a neutral one.

On the prompt page, your own entry in the brand order shows the answer's stance on you: Positive, Neutral, Negative, or **No clear stance**. A competitor's entry shows a dash with "not scored yet": the Sentiment page and the prompt page do not score competitors.

Over MCP and the REST API, `answer_history` and `answer_slice` rows carry the stance on you as `stance` (`positive`, `neutral`, `negative`, `none` or `unscored`), and the brand order as `brands`, where each brand has its own `stance_label` and `stance_score`. A brand with no stance has no `stance_label` and a `stance_score` of `null`. A `stance_score` of `0` is a balanced verdict.

## Filtering answers by sentiment

`answer_slice` takes a `sentiment` term over your brand's stance. It keeps the same distinction:

* `positive`, `neutral` or `negative`: answers with that stance;
* `none`: answers that were scored and took no stance;
* `unscored`: answers nobody has scored yet.

`none` and `unscored` are never folded into `neutral`, or into each other. See [MCP tools](/mcp/tools#answer_slice).

## What it covers

Stance is read for answers from the last 90 days. An answer older than that, read before stance scoring existed, stays not scored yet and is not in any score.

The stance is read from the answer's text by a model. It can be wrong, and that is why every scored answer is listed with its sentence and can be flagged. Like every other reading, the text is stored verbatim, so when the scoring improves it is re-run over the stored answers in that window rather than starting a new series.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.