Skip to content

News Sentiment Dataset

Access AI-powered sentiment analysis derived from financial news and social media. FinBrain’s NLP models process thousands of articles daily to generate sentiment scores that help you gauge market mood and momentum.

The News Sentiment dataset provides:

  • Sentiment Score: Normalized numeric score from -1 (bearish) to +1 (bullish) for each date
  • Array-Based Data: Historical sentiment returned as an array of date/score objects
  • Daily Updates: Fresh sentiment scores every trading day
  • Historical Data: Years of sentiment history for backtesting
  • Flexible Filtering: Filter by date range or limit the number of results
MarketTickersUpdate Frequency
S&P 500500+Daily
NASDAQ3,000+Daily
NYSE2,500+Daily
Crypto100+Daily
RangeInterpretation
0.5 to 1.0Strong bullish sentiment
0.2 to 0.5Moderate bullish sentiment
-0.2 to 0.2Neutral sentiment
-0.5 to -0.2Moderate bearish sentiment
-1.0 to -0.5Strong bearish sentiment

Sentiment scores are returned as numbers in the v2 API.

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
df = fb.sentiments.ticker("AAPL", as_dataframe=True)
print(df)

You can also filter by date range or limit results:

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Get sentiment with date range
df = fb.sentiments.ticker("AAPL", date_from="2025-01-01", date_to="2025-06-30",
as_dataframe=True)
print(df.head(30))

For complete code examples in Python, JavaScript, C++, Rust, and cURL, see the API Reference.

Plot sentiment scores with the built-in SDK chart:

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# One-line interactive sentiment chart
fb.plot.sentiments("TSLA")
Sentiments Chart
TSLA news sentiment over time

Generate trading signals based on sentiment thresholds:

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
def get_sentiment_signal(symbol):
"""Generate trading signal from sentiment score"""
df = fb.sentiments.ticker(symbol, as_dataframe=True)
if df.empty:
return "no_data"
latest_score = df["score"].iloc[0]
if latest_score > 0.5:
return "strong_buy"
elif latest_score > 0.2:
return "buy"
elif latest_score < -0.5:
return "strong_sell"
elif latest_score < -0.2:
return "sell"
else:
return "hold"
signal = get_sentiment_signal("TSLA")
print(f"Signal: {signal}")

Screen a watchlist for tickers with extreme sentiment:

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
watchlist = ["AAPL", "GOOGL", "MSFT", "AMZN", "NVDA", "TSLA"]
bullish = []
bearish = []
for symbol in watchlist:
df = fb.sentiments.ticker(symbol, as_dataframe=True)
if not df.empty:
score = df["score"].iloc[0]
if score > 0.5:
bullish.append((symbol, score))
elif score < -0.5:
bearish.append((symbol, score))
print("Bullish tickers:", bullish)
print("Bearish tickers:", bearish)

Enhance prediction confidence when sentiment aligns with expected price movement:

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
def analyze_ticker(symbol):
"""High conviction signals when predictions and sentiment align"""
# Get predictions
pred_result = fb.predictions.ticker(symbol, prediction_type="daily")
expected_short = pred_result["metadata"]["expectedShortTerm"]
# Get sentiment
sent_df = fb.sentiments.ticker(symbol, as_dataframe=True)
sent_score = sent_df["score"].iloc[0]
# Stronger signal when expected move and sentiment align
if expected_short > 0.5 and sent_score > 0.3:
return "high_conviction_buy"
elif expected_short < -0.5 and sent_score < -0.3:
return "high_conviction_sell"
else:
return "mixed_signals"
result = analyze_ticker("AAPL")
print(result)