Skip to content

Methodology

How Senti collects posts, labels them and turns the labels into the numbers on a report. Last updated October 29, 2026.

New to this? Read how to measure brand sentiment or how to choose brand sentiment analysis tools.

What we collect

Public posts from X, Instagram, Reddit and TikTok are collected through our data provider with the brand's keyword rules. Each platform is handled on its own: one that is slow or unavailable never holds back the others. Videos count by their caption and subtitles; images and video frames are not analyzed.

Each platform is searched in our data provider's database. X and Instagram are also searched live, straight from the platform, so recent posts the database has not caught up with are included. Live search covers the report's whole range when the database found fewer than 1,000 posts on that platform, and the last 7 days otherwise; a refresh searches live only the days since its last fetch. X live search reads the newest posts first; Instagram live search returns posts in its own order, and posts outside the range are left out. The first numbers come from the database search; the report then adds the live posts as they are labeled and updates itself, and its receipt is final once live search ends. Live search reads at most 500 X posts and 300 Instagram posts per report, and the receipt says when that limit stopped it. Posts both searches find are counted once. Reddit and TikTok have no live search. Text inside images is not read: only a post's own text, caption and subtitles count.

Before labeling, every post is checked against the keyword rules again: a keyword must appear as whole words, ignoring case (a quoted phrase as those words in order, a hashtag or handle exactly), and posts that do not match are dropped. The receipt counts them, and the count opens examples with the reason.

Language and country

Each brand chooses its languages, in any combination: English, Spanish, Portuguese, Chinese, German, Arabic, Dutch and Swedish. Only posts in those languages are labeled, all with the same questions; others are counted on the receipt and left out.

A post's country comes from the post itself (a place tagged on it) or, on X, from the profile location of an author we already have on record, and only when that names a country; new authors' profiles are not looked up for now. It is never guessed from the language. Most posts carry no location, so every country breakdown shows the share of posts whose country is known.

Small and large brands

A platform whose first page returns fewer than 100 posts is small for that brand: every post in the window is collected and labeled. A full first page makes it large: one page is collected per week and at most 50 posts per week and platform are labeled, chosen evenly across the week. The total found is always shown next to the number labeled. Because a large platform is sampled more thinly than a small one, every figure across platforms (the score, complaint and intent shares, the tracker and the charts) weights each platform by its share of the posts found, and its 95 percent interval accounts for that weighting. Each platform's own figures are unweighted. A note appears when a platform with at least 5 percent of the posts found has fewer than 30 posts analyzed.

Questions per post

Each post is labeled once by our labeling model, with all questions in one call; every label records the model version it came from. A post already labeled with the same questions is reused, never labeled again.

Relevance
Whether the post is about the brand.
Sentiment
Sentiment toward the brand, in five steps.
Topic
What the post is about, from the brand's own topic list.
Intent
Praise, complaint, question, purchase intent, churn intent, recommendation, news or neutral mention.
Spam
Whether the post is spam.
Campaigns
One question per active campaign.

Filters and low data

Relevance
Below 0.5: excluded from every number.
Spam
Above 0.7: excluded and counted on the receipt.
Too few posts
Fewer than 30 relevant posts in the window: the report says there are too few to read much into.
Mostly other things
Fewer than 40% of posts about the brand: the report says most matches were about something else.
Low data
Fewer than 200 relevant posts in a report: the results stay visible, marked low data, and the report is returned automatically.

The score

Sentiment is shown on a 0 to 10 scale: the mean of the five-step label (0 very negative to 4 very positive) times 2.5. Point changes use the same scale. Aggregates, trends and the headline sentence are computed in plain code from the labels, not by a model.

Platform mix: each platform has its own typical sentiment, so a change in where the posts came from can move the score while sentiment on every platform holds. On the same two blocks of weeks the significance test compares, the change splits exactly into the change within platforms and the shift in each platform's share of the posts we analyzed, each tested with its uncertainty. The headline treats a change as a change in sentiment only when the change within platforms is confirmed; when the shift explains most of it, it says so with each platform's shares; when the two cannot be told apart, or a platform has too few posts to measure, it says that instead.

Every number links to its posts

Every number on a report opens the posts behind it: a point on the chart, a lettered move, a topic cell, a country, a highlighted phrase of the headline and each cited post of an explanation open the posts it counts, with the answers given for each post.

Change explanations

Every report carries an explanation of what changed in the conversation, what the posts suggest about it, how strong that evidence is, and what to look into next. The facts are measured in code from the report's posts; our analysis model only writes the conclusions from those facts and the posts they cite.

Facts
With a change our significance test confirms, its two blocks of weeks compared: for each topic, platform and intent separately, how much of the change came from its share of posts moving and how much from its sentiment moving, adding up exactly to the change. With no confirmed change, the narratives across the whole range (persistent, emerging or declining), with no significance claimed. Counts, distinct authors and the groups that moved against the change.
Conclusions
Up to three, each marked as an observation, a supported interpretation or an unverified hypothesis, with the evidence and the posts it cites, why it matters for the brand and what to look into next. Contributions describe how the change splits, never what caused it.
Checks
Every number must match a measured figure and every cited post must be one of the posts sent; causal wording and claims of significance without a confirmed change are rejected. A failed check gets one retry; then only the measured facts are shown. Too little data is stated with what is missing.
Stored once
Written when the report finishes, and again for a refresh only when the conversation changed materially, never on a routine refresh. Each explanation shows its version and analysis date; without a newer one, the latest is shown with its date.

Human review

A human review of 300 stored posts from our live examples, in English and Spanish, is in progress: people answer the same questions as the labeling model without seeing its labels. The measured agreement for relevance, sentiment and intent is published here once all 300 posts are reviewed. Portuguese is not part of this review: before adding it we checked it on 30 stored Portuguese posts against careful English translations of the same posts, labeled with the same questions. Relevance agreed on 30 of 30, the topic on 29 of 30, and sentiment differed by 0.39 points on the 0 to 10 scale on average.

Coverage limits

We see only public posts that our data provider returns for the keywords; private accounts, deleted posts and other platforms are not included. Reddit and TikTok data can lag by hours. Results are what the sources returned at the time of the analysis. Posts deleted after we stored them are not re-checked for now: they stay in a report until a takedown request removes them.

The receipt

Every report shows posts found, collected, in its languages, selected and labeled, questions per post and time taken, all measured from that run.