What does a daily sentiment score of 0.73 actually mean?
The /sentiments endpoint answers a different question from /news. Instead of items, it returns one row per symbol per day: the day's tone, and how many items produced it.
The call and the answer
/sentiments takes s — a comma-separated list of tickers — plus optional from, to and fmt=json. Requesting s=AAPL.US,BTC-USD.CC from 2026-01-05 to 2026-01-09 returned an object keyed by ticker, each value an array of {date, count, normalized}:
AAPL.US BTC-USD.CC
2026-01-05 count 68 0.8309 2026-01-05 count 5 0.1962
2026-01-06 count 68 0.8240 2026-01-06 count 8 0.1605
2026-01-07 count 88 0.8564 2026-01-07 count 4 0.1825
2026-01-08 count 115 0.6525 2026-01-08 count 3 -0.0407
2026-01-09 count 83 0.7348 (no row)
normalized runs from −1 (very negative) through 0 (neutral) to +1 (very positive). count is the number of articles or mentions that went into it.
Three things this table says
count is not decoration. Apple's five-day average of 0.780 rests on 68 + 68 + 88 + 115 + 83 = 422 articles. Bitcoin's four-day average of 0.125 rests on 20. Same field, same type, wildly different standing. Bitcoin's move from 0.1825 to −0.0407 between the 7th and the 8th looks like a sentiment reversal; on three to four articles it is one writer changing tone. Any rule you write on normalized should carry a minimum-count condition, and you should choose that minimum deliberately.
A missing day is not a zero. BTC-USD.CC has no row at all for 2026-01-09. Reindex that series onto a calendar and you must decide what absence means. Forward-filling invents a reading that was never taken; filling with 0 invents a neutral day, which is an actual claim about tone. Leaving it null is the only option that does not fabricate, and it forces every downstream calculation to handle it — which is the point.
Levels are not comparable across symbols. Apple sits between 0.65 and 0.86 for five consecutive days. That is not evidence of euphoria; it is what this model's aggregate output looks like for a symbol with a large, largely promotional English-language news flow. Compare a symbol against its own history — a z-score over a trailing window, say — rather than against another symbol's absolute level.
Scope, as documented
EODHD documents this series as covering up to 100 symbols per request, with history from 2018, aggregated over an English-language news base, and accepting instrument codes across asset classes — the crypto code BTC-USD.CC above, and FX-style codes such as BRLUSD.FOREX. Those are documented figures rather than ones verified here; check the earliest date your own query returns before treating a quiet period as quiet.
The link back to Unit 1
An aggregate is a mean, and a mean counts every input once. So the syndication problem is inside this number: a wire release republished twelve times contributes its tone twelve times to the day's normalized and twelve to the day's count. You cannot deduplicate a pre-aggregated series. If that matters for what you are building, you have to rebuild the daily aggregate yourself from /news items you deduplicated — which is more work, and is sometimes the honest answer.
Try it now
- Here are nine days of
/sentimentsforAAPL.US, 17 to 25 August 2026, a weekend in the middle. Putnormalizedbesidecountand find the highest and the lowest reading. Over the 60 days to 25 September 2026 the lowest reading of all, 0.524, came on the day with the lowest count, 4. If the extremes cluster at low counts, you have found where the noise lives.
- Over those 60 days, measured on 28 September 2026, the 9 days with
countunder 20 had a standard deviation ofnormalizedof 0.167, and the 20 days withcountover 50 had 0.119. Compute the ratio. It is the price of a thin sample, in the units of the score itself. - Here is
PFE.USfrom 3 to 14 September 2026: twelve calendar days, fewer rows. Reindex it onto every calendar day three ways, nulls, forward-fill and zero-fill, and compute the twelve-day mean under each. Three answers from one dataset is the whole argument for writing your missing-data policy down.