Stocktwits Scraper - Messages, Sentiment & New Posts Monitor
Pricing
from $1.46 / 1,000 message returneds
Stocktwits Scraper - Messages, Sentiment & New Posts Monitor
For traders, quant researchers and sentiment analysts: Stocktwits messages for tickers, users and trending, with text, author, Bullish/Bearish label, likes and time. On 2026-09-21, 14 of 30 $AAPL posts had a label. Monitoring mode returns only new posts. Unofficial. Public data only.
Pricing
from $1.46 / 1,000 message returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
For traders, quant researchers and sentiment analysts: Stocktwits messages for any list of tickers ($AAPL, BTC.X), users or the trending stream, with the message text, the author's username and display name, the Bullish or Bearish label, likes, replies, reshares, the time posted and the symbols mentioned. On 2026-09-21, 14 of the latest 30 $AAPL messages and 18 of the latest 30 BTC.X messages carried a Bullish or Bearish label. Monitoring mode returns only the messages posted since your last run, so a schedule pays for each new message once.
Export as JSON, CSV or Excel.
Unofficial. Public data only. This Actor is not affiliated with, endorsed by or sponsored by Stocktwits. It collects what people posted; it does not give investment advice, and nothing in its output is a recommendation to buy or sell anything.
What you get
- Many streams in one run - list as many symbols (
symbols) and users (usernames) as you like (up to 100 per run), and add the trending stream withincludeTrending. - Sentiment label per message -
sentimentisBullish,Bearishornull. Authors set the label themselves; many messages have none. Thesentimentinput returns only labeled, only Bullish, only Bearish or only unlabeled messages, and messages filtered out are not charged. - Only new posts - with
monitoringModeon, the first run of a stream remembers its newest message, and every later run returns only messages newer than that. - A per-stream count - the log line of each stream and the
SENTIMENT_SUMMARYrecord of the run's key-value store give the number of Bullish, Bearish and unlabeled messages returned for each stream. - No wrong rows - a message is returned for a symbol stream only if it mentions that symbol, and for a user stream only if that user posted it. The
streamSymbolandstreamTitlecolumns show what Stocktwits answered with, so a mistyped ticker is visible (BTC is an exchange-traded fund; Bitcoin is BTC.X). - Free reason rows - unknown symbols or users, blocks, rate limits, invalid input, duplicates and budget stops come back as rows that say why and are not charged.
What it does not do
- Only the latest 30 messages of each stream. Stocktwits returns 30 messages per stream on the page this Actor reads. Older messages need paging URLs with a query string, which Stocktwits' robots.txt (
Disallow: /*?) does not allow, so this Actor does not read them. For history, run it on a schedule with monitoring on. - How fast 30 messages go by depends on the stream. Measured on 2026-09-21 during US market hours: the latest 30 $AAPL messages covered 93 minutes, BTC.X 22 minutes, and the trending stream about 1 minute. In monitoring mode, if all 30 messages of a stream are new since the last check, a free
possible-gaprow says that messages posted in between may be missing; check that stream more often. - Blocks, browser checks and rate limits are not worked around (no proxy rotation, no browser emulation). A stream that gets one is returned as a free row, and the rest of the list is not read in that run.
Input
| Field | What it does |
|---|---|
symbols | Tickers: AAPL, $TSLA, BRK.B, BTC.X or a stocktwits.com/symbol/... link. Crypto ends in .X. |
usernames | Users: howardlindzon, @howardlindzon or a stocktwits.com/<username> link. |
includeTrending | Also read the trending message stream. |
maxMessagesPerStream | 1 to 30 (default 30). The newest messages that pass the sentiment filter. Rows come newest first with monitoring off and oldest first with monitoring on. In monitoring mode it limits only the first check. |
sentiment | any (default), bullish, bearish, labeled or unlabeled. |
monitoringMode | Return only messages posted since the last run of each stream. |
resetMonitoringState | Forget what was remembered for every stream (turn it off again after one run). |
If you leave symbols, usernames and includeTrending all out with monitoring off, the example symbols AAPL, TSLA and BTC.X are read. With monitoring on, at least one stream is required, so that a schedule never pays to watch the examples.
{"symbols": ["AAPL", "TSLA", "NVDA", "BTC.X"],"usernames": ["howardlindzon"],"sentiment": "labeled","monitoringMode": true}
Output
One row per message:
{"source": "stocktwits","status": "ok","scrapedAt": "2026-09-21T16:21:15.000Z","stream": "symbol","input": "aapl","streamSymbol": "AAPL","streamUsername": null,"streamTitle": "Apple Inc","messageId": 664717167,"url": "https://stocktwits.com/urduja13/message/664717167","body": "$AAPL puts puts puts..","createdAt": "2026-09-21T15:24:40Z","sentiment": "Bearish","likeCount": 1,"replyCount": 0,"reshareCount": 0,"isReply": false,"inReplyToMessageId": null,"conversationRootId": null,"isReshare": false,"resharedMessageId": null,"symbols": ["AAPL"],"authorUsername": "urduja13","authorName": "ry tot","authorId": 793030,"authorFollowers": 21,"authorOfficial": false,"authorProfileUrl": "https://stocktwits.com/urduja13","chartUrl": null,"isDiscussion": false,"sourceApp": "StockTwits For Android","isFirstCheck": null,"isNew": null}
likeCount,replyCountandreshareCountare the counts at the time of the run; a message Stocktwits lists without any is 0. On 2026-09-21 five rows were compared with their stocktwits.com pages: text, label, likes and time matched on all five.isReply,inReplyToMessageIdandconversationRootIdplace replies in their thread;isReshareandresharedMessageIdmark reshares.isFirstCheckandisNeware filled in monitoring mode.- Rows with another
status(not-found,blocked,rate-limited,invalid-input,duplicate,no-messages,no-matching-messages,no-new-messages,possible-gap,budget-reached,not-checked) are free and carry anotethat says why.
Pricing
- $2.00 per 1,000 message rows (
message-returned), on the Free plan; paid Apify plans get the lower tier prices shown on the pricing tab. Reason rows are free. - Monitoring mode only: $0.30 per 1,000 stream checks (
stream-checked), charged for every stream read in a monitoring run, whether or not it has new messages. Example: 20 symbols checked every 30 minutes = 28,800 checks a month = $8.64, plus $2.00 per 1,000 new messages returned. - No start fee. The Actor stops before the run's maximum total charge: in monitoring mode it reads a stream only if the budget still has room for its check and one message row, and messages that did not fit are not remembered, so a later run returns them while they are still among the stream's latest 30.
Monitoring notes
- What is remembered is the newest message id per stream, stored in a key-value store named
stocktwits-monitoringin your account, together with the ids of newer messages that were already returned for another stream of the same run (a message that mentions two of your symbols is returned once). - Do not put the same stream in two schedules that can run at the same time. The Actor re-reads the remembered position right before writing it and never moves it backwards, but Apify's key-value store has no atomic update, so two runs that read the same new messages at the same moment can both return them.
FAQ
Why only 30 messages per stream? Stocktwits' robots.txt disallows URLs with a query string, which is how older pages are requested. This Actor stays within it and reads the first page only.
Why did BTC return an ETF? On Stocktwits, BTC is the Grayscale Bitcoin Mini Trust ETF. Use BTC.X for Bitcoin, ETH.X for Ether, and so on.
Why is the sentiment empty on many rows? The label is set by the author when posting and is optional.
Is this investment advice? No. The rows are what users posted on Stocktwits, returned as data.