StockTwits Scraper
Pricing
from $1.00 / 1,000 results
StockTwits Scraper
Scrape StockTwits messages with likes and replies, 0-100 sentiment scores per symbol, daily sentiment history back to 2018, news per symbol, messages by topic or user, and 7 trending lists incl. crypto. Only-new mode for monitoring. No login or API key.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Sheshinmcfly
Maintained by CommunityActor stats
1
Bookmarked
4
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
💬 StockTwits Scraper
Trader sentiment from StockTwits as structured data: messages with likes, replies and charts, 0-100 sentiment scores per symbol, a daily sentiment history back to 2018, news per symbol, messages by topic or user, and every trending list, including crypto. No login, no account, no API key.
StockTwits is where retail traders say what they think about a stock or coin. This actor turns it into clean JSON or CSV. You can pull the latest posts for your tickers or follow specific traders. You can also get one row per symbol with the same sentiment, message-volume and participation scores StockTwits shows on its symbol pages, for now, the last 24 hours and every timeframe from 1 day to all-time. Or you can take the trending, most-bullish, most-active or top-gainer lists, with market data attached.
| ⚡ Fast | About 5 seconds for 30 posts and about 7-10 seconds for 300. Sentiment for 5 symbols takes about 5 seconds; a full history since 2018 about 15 seconds. |
| 💬 9 data types | Messages by symbol, user, topic or liked by a user, popular messages, sentiment scores, sentiment history, news and trending lists. |
| 📉 Sentiment history | One row per day (or every 15 minutes for the last day) with sentiment, message volume and participation — back to 2018. |
| 📰 News | Latest news articles per symbol with source, link and the symbols they mention. |
| 🔔 Only new messages | For monitoring: each run returns only what was posted since your previous run. |
| ❤️ Engagement | Likes, replies, reshares, reply/reshare links, attached chart images and shared links on every post. |
| 📈 Sentiment scores | 0-100 sentiment, message volume and participation, for now / 24h / 1D / 1W / 1M / 3M / 6M / 1Y / ALL, plus watcher growth (1d / 7d / 30d) and related symbols. |
| 🔥 7 trending lists | Trending, most bullish, most bearish, most active, most watched, top gainers and top losers, for all assets, crypto only or equities only. |
| 📅 Date filter | Only posts since a date, or since "24 hours" or "7 days" ago. |
| 🔓 No credentials | Nothing to sign up for. |
What data does it extract?
Messages (recordType: "message", from symbol, user, topic and liked-by-user streams and popular messages):
- Post:
id,body,createdAt,sentiment(Bullish / Bearish / null),priceAtPost,symbolsMentioned,url - Engagement:
likesCount,repliesCount,resharesCount,isReply,parentMessageId,inReplyToMessageId,isReshare,resharedMessageId - Media and links:
chartImageUrl,mediaUrls,links(title + URL),mentionedUsers,postedFrom - Author:
authorUsername,authorName,authorFollowers,authorFollowing,authorIdeasCount,authorLikeCount,authorJoinDate,authorOfficial,authorAvatarUrl - Context:
source(symbol / user / topic / liked / popular),querySymbol,queryUsername,queryTopic,scrapedAt
Sentiment scores (recordType: "sentiment", one row per symbol):
- Now and 24h:
sentimentScore(0-100),sentimentLabel,sentimentScore24h,sentimentLabel24h,sentimentChange24h,messageVolumeScore,messageVolumeLabel,messageVolume24h,messageVolumeChange24h - Timeframes:
timeframesholds an entry for each of1D,1W,1M,3M,6M,1YandALL. Each entry hassentimentScore/sentimentLabel/sentimentChange,messageVolumeScore/messageVolume/messageVolumeLabel/messageVolumeChangeandparticipationScore/participationLabel/participationChange. - Quote:
price,priceChange,priceChangePercent,previousClose,open,high,low,volume,extendedHoursPrice,extendedHoursChangePercent,extendedHoursType,priceTime - Watchers:
watchersCount,watchersChange1d/watchersChange1dPercent,watchersChange7d/watchersChange7dPercent,watchersChange30d/watchersChange30dPercent - Related symbols:
relatedSymbols(same-industry symbols with name and watcher count) - Topics and identity:
trendingTopics(label, description, message count),title,exchange,sector,industry,instrumentClass,isin,cusip,watchlistCount
The scores are the ones StockTwits shows on its symbol pages. Each one compares today's reading with that symbol's own history, from 0 (extremely bearish / extremely low) to 100 (extremely bullish / extremely high).
Sentiment history (recordType: "sentimentHistory", one row per point):
symbol,range,datesentimentScore(0-100) andsentimentLabel, plussentimentRaw(share of bullish messages) andsentimentRawLabelmessageVolume,messageVolumeScore(0-100),messageVolumeLabelparticipationRatio,participationScore(0-100),participationLabel
Ranges: 1D (15-minute points), 1W, 1M, 3M, 6M, 1Y, 5Y and ALL (daily since 2018-01-01).
News (recordType: "news"): symbol, id, headline, summary, publishedAt, source, url, imageUrl, author, primarySymbol, symbolsMentioned.
Trending lists (recordType: "trending"):
list,trendingRank,symbol,title,instrumentClass,trendingScore,watchlistCount,trends(rank breakdown plus StockTwits' summary of why the symbol is trending)- Market data:
marketCap(USD),peRatio,eps,beta,high52Week,low52Week,movingAverage50Day,avgDailyVolume1M,dividendRate,isin,cusip,sector,industry,exchange
Who uses this, and for what
- Sentiment signals: track the 0-100 sentiment and message-volume score of a watchlist every hour, and flag sudden spikes in chatter before a move.
- Earnings and news reactions: pull every post since the announcement with the date filter, the news that moved it, and the bullish/bearish split.
- Backtesting sentiment: daily sentiment and message volume since 2018 for any symbol, ready to join with prices.
- Monitoring: run every hour with Only new messages and receive just the new posts for your watchlist, topics or traders.
- Crypto research: get the most-bullish, most-active or top-gainer crypto lists, or the posts for
BTC.X,ETH.Xand other coins. - Influencer tracking: follow specific traders' posts and see which of them get the most likes and replies.
- Screening ideas: start from top gainers, most watched or most active, then dig into the sentiment of each name.
- NLP and research datasets: get labelled (Bullish/Bearish) financial text with the price at the time of posting.
Quick start: copy an input and run
Latest posts for your tickers
{ "dataType": "messages", "symbols": ["AAPL", "TSLA", "BTC.X"], "maxResultsPerSymbol": 100 }
Only bullish posts from the last 24 hours
{ "dataType": "messages", "symbols": ["NVDA"], "maxResultsPerSymbol": 500, "sinceDate": "24 hours", "sentimentFilter": "Bullish" }
Sentiment scores for a watchlist
{ "dataType": "sentiment", "symbols": ["AAPL", "SPY", "BTC.X", "ETH.X"] }
Daily sentiment history for the last year
{ "dataType": "sentimentHistory", "symbols": ["TSLA", "BTC.X"], "historyRange": "1Y" }
Latest news for your tickers
{ "dataType": "news", "symbols": ["AAPL", "NVDA"], "maxResultsPerSymbol": 50 }
Only new posts since the previous run (for scheduled runs)
{ "dataType": "messages", "symbols": ["AAPL", "TSLA"], "maxResultsPerSymbol": 200, "onlyNew": true }
Posts about a topic
{ "dataType": "topicMessages", "topics": ["earnings", "options"], "maxResultsPerSymbol": 100 }
Posts from specific traders
{ "dataType": "userMessages", "usernames": ["howardlindzon"], "maxResultsPerSymbol": 60 }
Most-engaged posts for a symbol (or leave symbols empty for the whole platform)
{ "dataType": "popularMessages", "symbols": ["AAPL"], "maxResultsPerSymbol": 40 }
Most bullish crypto right now
{ "dataType": "trending", "trendingList": "most_bullish", "assetClass": "crypto", "maxTrendingResults": 50 }
How to use
- Pick a Data type.
- Add Symbols for messages, sentiment, sentiment history, news or per-symbol popular messages. Add Usernames for user messages or messages a user liked, and Topics for topic messages. Tickers,
$TICKER,@user,#topicand StockTwits URLs all work. Crypto uses the.Xsuffix (BTC.X). - Optionally limit results with Only messages since, Sentiment filter and Only new messages since the previous run, and cap them with Max results per symbol / user / topic. For sentiment history, choose the Sentiment history range.
- For trending, choose the Trending list, the Asset class and Max trending results.
- Run, then export as JSON, CSV, Excel or via API. The dataset has a ready-made table view for each data type.
Input parameters
| Field | Title | Description |
|---|---|---|
dataType | Data type | messages, userMessages, popularMessages, sentiment, sentimentHistory, news, topicMessages, likedMessages or trending. |
symbols | Symbols | Stock or crypto tickers (AAPL, BTC.X). Required for messages, sentiment, sentiment history and news; optional for popular messages. |
usernames | Usernames | StockTwits usernames for userMessages and likedMessages. |
topics | Topics | Topics or hashtags for topicMessages (earnings, options). |
maxResultsPerSymbol | Max results per symbol / user / topic | Messages (or news, up to 100) per symbol, user or topic (default 30). |
sinceDate | Only messages since | YYYY-MM-DD, an ISO date-time, or 24 hours / 7 days / 2 weeks. Also applies to news and sentiment history. |
historyRange | Sentiment history range | 1D, 1W, 1M (default), 3M, 6M, 1Y, 5Y or ALL. |
onlyNew | Only new messages since the previous run | Returns only messages newer than what your account received before for the same symbol, user or topic. |
sentimentFilter | Sentiment filter | Bullish or Bearish only. Leave it empty for all posts. |
trendingList | Trending list | trending, most_bullish, most_bearish, most_active, top_watched, top_gainers or top_losers. |
assetClass | Asset class | all, crypto or equities, for trending lists. |
maxTrendingResults | Max trending results | Symbols to return from the list (default 30). |
Output example
Message
{"recordType": "message","source": "symbol","id": 667505060,"querySymbol": "SPY","body": "$SPY $QQQ $SLV.X $USO 27$ Brett tank loading.. as long as Bibi not in power.. wohoo! $APP","createdAt": "2026-10-28T02:36:06Z","sentiment": "Bullish","priceAtPost": 769.99,"symbolsMentioned": ["SPY", "QQQ", "SLV.X", "USO", "APP"],"likesCount": 2,"repliesCount": 0,"resharesCount": 0,"isReply": false,"isReshare": false,"chartImageUrl": "https://media.stocktwits-cdn.com/api/3/media/15291186/original.png","links": [],"postedFrom": "StockTwits Web","url": "https://stocktwits.com/MomentumWins/message/667505060","authorUsername": "MomentumWins","authorFollowers": 965,"authorIdeasCount": 40484,"authorJoinDate": "2015-01-26"}
Sentiment scores (timeframes shortened)
{"recordType": "sentiment","symbol": "AAPL","title": "Apple Inc","isin": "US0378331005","watchlistCount": 998778,"sentimentScore": 25,"sentimentLabel": "BEARISH","sentimentScore24h": 22,"sentimentLabel24h": "EXTREMELY_BEARISH","sentimentChange24h": -12,"messageVolumeLabel": "NORMAL","messageVolume24h": 49131,"messageVolumeChange24h": 1.8868,"timeframes": {"1W": {"sentimentScore": 21, "sentimentLabel": "EXTREMELY_BEARISH", "sentimentChange": -16,"messageVolumeScore": 53, "messageVolume": 49080, "messageVolumeLabel": "NORMAL","participationScore": 19, "participationLabel": "EXTREMELY_LOW", "participationChange": 18.75}},"price": 347.1,"priceChangePercent": 0.928,"previousClose": 343.91,"extendedHoursType": "PostMarket","priceTime": "2026-10-27T20:00:00Z","trendingTopics": [{ "label": "📱 CrackGate", "description": "Users are reporting widespread hardware failures and hinge-line cracking on the new foldable smartphone launch, sparking debates over durability.", "messageCount": 82 }]}
Sentiment history point
{"recordType": "sentimentHistory","symbol": "AAPL","range": "1M","date": "2026-11-11T20:00:00Z","sentimentScore": 45,"sentimentLabel": "NEUTRAL","sentimentRaw": 0.63,"messageVolume": 40825,"messageVolumeScore": 43,"messageVolumeLabel": "LOW","participationRatio": 0.43,"participationScore": 49,"participationLabel": "NORMAL"}
Trending list
{"recordType": "trending","list": "trending","trendingRank": 2,"symbol": "HOOD","title": "Robinhood Markets Inc","instrumentClass": "Stock","trendingScore": 12.3978,"watchlistCount": 101836,"marketCap": 85017216797,"peRatio": 41.87,"beta": 2.7306,"high52Week": 150.47,"low52Week": 63.515,"sector": "Finance","url": "https://stocktwits.com/symbol/HOOD"}
Performance & cost
| Job | Typical time |
|---|---|
| 30 posts for 1 symbol | ~5 s |
| 60 posts each for 3 symbols | ~7 s |
| 300 posts for 1 symbol | ~7-10 s |
| Sentiment scores for 5 symbols | ~5 s |
| Sentiment history, 1 month for 2 symbols | ~6 s |
| Sentiment history since 2018 (3,200+ days) | ~15 s |
| News, 50 articles each for 3 symbols | ~5 s |
| A trending list (30 to 100 symbols) | ~5-7 s |
Large watchlists stay fast. With a date filter or Only new messages you only wait for, and pay for, the posts you need.
Pricing
Pay per result: $0.001 per result. A result is one message, one symbol's sentiment row, one day (or 15-minute point) of sentiment history, one news article, or one symbol from a trending list. One year of daily sentiment history for a symbol is about 365 results ($0.37).
| Results | Estimated cost |
|---|---|
| 100 | $0.10 |
| 1,000 | $1.00 |
| 10,000 | $10.00 |
Symbols and users that don't exist on StockTwits are skipped and not charged. The run's status message names them. The Apify Free plan includes $5 of free usage to get started.
FAQ
Do I need a StockTwits account or API key? No. Nothing to sign up for.
Does it work for crypto?
Yes. Use the .X suffix (BTC.X, ETH.X, SOL.X) for messages and sentiment, and set Asset class to crypto for trending lists.
Why do most posts have sentiment: null?
Tagging a post Bullish or Bearish is optional on StockTwits, and most people don't. Use Sentiment filter to keep only tagged posts, or the Sentiment scores data type for the aggregate reading.
What does a sentiment score of 25 mean?
The score runs from 0 to 100 and compares the current reading with that symbol's own history. 25 means more bearish than usual for that symbol. The label (EXTREMELY_BEARISH … EXTREMELY_BULLISH) is the same reading in words.
How far back can I go? Symbol and user streams go back as far as you ask, page by page. Busy tickers produce thousands of posts a day, so pair a large limit with Only messages since. The sentiment history goes back to January 2018.
How does "Only new messages" work? Your account remembers the newest message it received for each symbol, user or topic. The next run with the option on returns only messages posted after it (and the status says when there was nothing new). The first run returns the latest messages as usual.
Why is a field null?
Because StockTwits has no value for it: a coin has no P/E, an ETF has no ISIN on some lists, a new symbol may have no timeframe history yet. Nothing is invented to fill the gap.
Keywords
stocktwits scraper, stocktwits api, stock sentiment data, stock sentiment history, historical sentiment data, stocktwits news, trader sentiment api, social sentiment score, stocktwits sentiment, trending stocks scraper, most bullish stocks, top gainers list, crypto sentiment, retail trader chatter, social trading data, stock market sentiment, financial nlp dataset.
More actors
Browse all my scrapers on my Apify profile.
Disclaimer
This actor collects only publicly visible StockTwits data. It does not access private or authenticated content. Use the data responsibly, in line with StockTwits' terms and applicable law. You are responsible for how you use it. Nothing here is investment advice.
Changelog
| Version | Date | Changes |
|---|---|---|
| 1.3 | 2026-11-11 | New data types: sentiment history (daily since 2018, or every 15 minutes for the last day), news per symbol, messages by topic and messages liked by a user. New "Only new messages since the previous run" option for monitoring. Sentiment rows now include watcher growth (1d / 7d / 30d) and related symbols. Faster runs (300 posts: ~17 s → ~7-10 s). |
| 1.2 | 2026-11-05 | Clearer run summary: if StockTwits stops answering partway, the status message names every symbol or user that came back incomplete, and what was collected is still delivered. Same input, same fields. |
| 1.1 | 2026-10-28 | New data types: messages by user, popular messages, sentiment scores (0-100, now/24h/1D-ALL, plus quote and trending topics) and 7 trending lists with crypto/equities filter and market data. Messages now include likes, replies, reshares, chart images and links. New "only messages since" filter. Message links now open the post correctly. Faster runs. |
| 1.0 | 2026-07-14 | Initial release: messages with sentiment and trending symbols. |