Retail Investor Sentiment
Retail investor posts since 2009, labeled bullish or bearish and linked to the stocks they discuss.
- 426M+messages since 2009
Sample
3 recordsRaw message, author-labeled (firehose)
Representative shape, not real data. sentiment is the author own label at post time - the ground truth, not inferred.
{
"id": 582914037,
"body": "$NVDA incredible earnings beat. Blackwell demand is insane.",
"created_at": "2026-02-27T14:23:11Z",
"sentiment": "Bullish",
"user": {
"id": 1847293,
"username": "<handle>",
"followers": 12840,
"ideas": 8741,
"join_date": "2015-03-12"
},
"symbols": ["NVDA"],
"likes_total": 312,
"replies": 47
}Curated message, relinked symbol
Representative. Shows the curation and symbol-mapping provenance that makes every downstream signal row auditable.
{
"record_id": "post:1lpgxpa",
"source_platform": "<social-finance platform>",
"created_at_utc": "2025-07-01T23:34:45Z",
"body_or_title": "QQQ calls printing today",
"symbols_detected": ["QQQ"],
"requested_symbol": null,
"mapping_method": "alias_relinked",
"mapping_confidence": 0.65,
"finance_intent_score": 0.68,
"curation_band": "strict",
"curation_bucket": "signal_keep"
}Signal panel row, one symbol-day (the quant product)
Representative. One row per symbol-day; trade_date makes it look-ahead-free for backtesting.
{
"date": "2023-01-02",
"symbol": "AAPL",
"mention_count": 13,
"weighted_mention_count": 6.96,
"unique_author_count": 5,
"sentiment_score": 0.123,
"conviction_score": 0.236,
"composite_signal": 0.324,
"confidence_score": 0.617,
"avg_spam_probability": 0.005,
"trade_date": "2023-01-03",
"trade_lag_days": 1,
"company_name": "Apple Inc."
}Specifications
| Formats | JSON, CSV, Parquet |
|---|---|
| Delivery | S3 push, REST API, WebSocket firehose, Restricted data room |
| Cadence | Real-time (WebSocket) or daily batch |
| Raw source volume | 250-270 TB |
| Messages | 426M+ |
| Symbols | Thousands (US equities, ETFs, crypto, intl) |
| Data since | 2009 |
| Current throughput | 6-7M posts/mo |
| Latency | 200ms (firehose) |
| Access | For internal research, model development, and portfolio management; redistribution prohibited without a separate agreement. PII-free and MNPI-free public commentary. |
What ships
Firehose
Full message stream with user metadata, tickers, sentiment flags, and activity (likes, reshares, follows).
Symbol Event
Ticker-level engagement - message volume, likes, pageviews, watchlist changes. Real-time.
Sentiment
Per-ticker sentiment scores refreshed every 5 minutes. Backtested: 18.1% CAGR on Nasdaq 100 L/S.
Fields
13 fields
| Field | Description |
|---|---|
| datedate | Trading date for the symbol-day observation.Example 2023-01-02 |
| symbolstring | Ticker the row aggregates.Example AAPL |
| mention_countint | Raw message mentions that day.Example 13 |
| weighted_mention_countfloat | Mentions weighted by message and author quality.Example 6.96 |
| unique_author_countint | Distinct authors mentioning the symbol.Example 5 |
| sentiment_scorefloat · 0..1 | Quality-weighted continuous sentiment.Example 0.123 |
| conviction_scorefloat · nullable | Conviction from engagement and author authority.Example 0.236 |
| composite_signalfloat · nullable | Composite multi-feature daily signal.Example 0.324 |
| confidence_scorefloat | Coverage and quality confidence for the row.Example 0.617 |
| avg_spam_probabilityfloat · 0..1 | Mean spam-model probability across the day messages.Example 0.005 |
| trade_datedate | First date the signal is tradeable - makes the panel look-ahead-free.Example 2023-01-03 |
| trade_lag_daysint · days | Lag from signal date to tradeable date.Example 1 |
| company_namestring · nullable | Security-master join for the ticker.Example Apple Inc. |
Load it
The first commands after an approved delivery.
# Quant entry point: the symbol-day signal panel signal/normalized/security_day_signal.parquet signal/normalized/security_day_research.parquet # Engineering entry: raw feed + manifest broad/messages.parquet delivery_manifest.json # Recommended first tests: 1-day, 5-day, 20-day horizons. # Audit any signal row back to its source messages by record_id.
Quality checks
3 checksNASDAQ-100 long/short
Whether the daily sentiment score separates winners from losers in a tradeable portfolio.
Long the most-bullish names, short the most-bearish, rebalanced on the score across the NASDAQ-100 universe.
Published backtest: 18.1% CAGR, 1.20 Sharpe. See the research paper for construction and caveats.
Ground truth vs NLP baseline
Whether the author-stated sentiment label beats an inferred NLP-sentiment feed.
Hold the strategy construction fixed and swap only the sentiment source - human labels vs an NLP feed - over the same period.
Author labels win: 122% vs 95% cumulative long/short return. The label is observed, not modeled.
Spam-filter catch rate
How much coordinated pump-and-promo content the filter removes.
Evaluated against known 2024 stock-promotion campaigns.
Roughly 95% of coordinated promotions removed.
Ground truth
| What is correct | For sentiment, the author own bullish or bearish label at post time - observed, not inferred, so there is zero sentiment-model risk. For signal validation, realized forward returns from the price panel. |
|---|---|
| How it is established | Every signal row is auditable end to end: security_day_signal back to message_security_view, join on record_id into curated messages, and optionally into the broad feed. Two delivered notebooks walk the full provenance trace. Baseline factors are scored against the price panel. |
| Agreement | No inter-rater figure applies - by design the sentiment label is the author stated stance, so there is no separate human-rater pass to agree with. |
How it is built
- 01
Licensed collection
Bulk export under license from private social-finance apps with 10 to 18 years of history, plus real-time ingestion from public-platform APIs. No web scraping.
- 02
PII removal
All personally identifiable information is stripped before delivery: user IDs pseudonymized, real names removed, in-text PII redacted. The corpus is PII-free and MNPI-free.
- 03
Three-layer construction
broad (the cleaned underlying feed with source attribution) becomes curated (strict and balanced bands, the audit bridge) becomes signal (the post-processed symbol-day panel). The wide band is excluded from delivery.
- 04
Spam and promo filtering
Multi-layer filtering: platform moderation, bot detection on posting frequency, content patterns and account age, and known-spam exclusion. The filter removes roughly 95% of coordinated 2024 promotions.
- 05
Symbol mapping with provenance
Each message links to securities through a mapping view, and every signal row is traceable back to the exact contributing messages by record_id.
- 06
Point-in-time aggregation
Only message-time information enters feature construction - no future-return data. The signal panel carries trade_date and trade_lag_days so backtests are look-ahead-free.
Request a sample
We send real records in the format you would receive, with the field list and where each record came from. Access for evaluation is limited and covered by a mutual NDA.
ProductRetail Investor Sentiment