Stocktwits Scraper
Pricing
from $0.01 / 1,000 message/symbols
Stocktwits Scraper
Collect current public Stocktwits messages, user posts, trending messages, and ranked symbols. Get source and text sentiment plus author and market context in structured rows. No Stocktwits login or API key is needed.
Pricing
from $0.01 / 1,000 message/symbols
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
31
Total users
11
Monthly active users
a day ago
Last modified
Categories
Share
📈 Stocktwits data for market research
Stocktwits Scraper helps traders, analysts, and researchers collect current public Stocktwits messages, user posts, and ranked trending symbols. It returns source sentiment, a separate text sentiment label, author and market context in structured dataset rows for market research and downstream analysis.
- Stocktwits Sentiment Analysis compares Stocktwits labels with the separate text sentiment label.
- Use Stocktwits API to start Actor runs and download structured rows.
- Build a message dataset with Stocktwits Dataset for text, symbols, authors, and source links.
- Collect current posts from public accounts with Stocktwits User Posts.
- Export the ranked current symbol list with Stocktwits Trending Symbols.
- Review public author fields in message rows with Stocktwits Author Analysis.
📦 Stocktwits messages and trending symbols
Message rows contain message text, publication time, source sentiment, a text-based sentiment label, cashtags, mentions, public author fields, media, conversation details, and optional price-target fields. Trending-symbol rows contain ranked symbol identity, watchlist context, source trend fields, and market classification.
Some source values can be null or empty when Stocktwits does not provide them. When the same message is found through more than one symbol or username, the Actor saves the first eligible match and skips later matches. matchedInput shows the symbol or username that first found that saved message.
🚀 Run Stocktwits Scraper
- Open the Input tab.
- Choose
symbol,user,trending,trending-streams, ortrending-symbolsin Result type. - Add ticker symbols or public usernames when the chosen mode needs them.
- Set a work limit, or leave it empty to collect all available results until the relevant public source is exhausted.
- Start the Actor and open the dataset.
A Stocktwits login or API key is not needed for this public data.
⚙️ Input
The selected mode controls which public rows the run requests. Fields for another mode are ignored.
Input fields
| Field | Type | What it does |
|---|---|---|
mode | string | Chooses symbol messages, user posts, trending messages, messages from trending tickers, or trending symbols. |
symbols | array of strings | Supplies Stocktwits ticker symbols for symbol mode. Crypto symbols use the .X suffix, such as BTC.X or ETH.X. |
usernames | array of strings | Supplies public Stocktwits usernames without the @ sign for user mode. |
maxTrendingSymbols | integer, optional | Sets the number of ranked symbols for trending-symbols mode. Leave it empty to return all available results until the public trending source is exhausted. |
maxMessagesPerTarget | integer, optional | Sets the number of recent messages per symbol or user in symbol, user, or trending-streams mode. Leave it empty to return all available messages until the public feed is exhausted. |
sentiment | string | For symbol and trending-streams, keeps all messages or only messages marked bullish or bearish by the author. |
onlyPriceTargets | boolean | For all message modes, keeps only posts with a source-reported price target when enabled. |
newerThanMessageId | integer, optional | For all message modes, keeps messages newer than this Stocktwits message ID. Leave it empty for no newer boundary. |
olderThanMessageId | integer, optional | For all message modes, keeps messages older than this Stocktwits message ID. Leave it empty for no older boundary. |
For both work limits, leaving the field empty returns all available results until the relevant source is exhausted.
Example input
This is the public input from a successful hosted QA default-input run on the current beta build:
{"mode": "symbol","symbols": ["AAPL","TSLA","NVDA","SPY","MSTR"],"usernames": [],"maxMessagesPerTarget": 30,"sentiment": "all","onlyPriceTargets": false}
🧾 Output
Run output
| Field | Type | What it does |
|---|---|---|
results | string | Opens the saved messages and trending symbols in the dataset. |
Each dataset row is either a message or a trending symbol.
Message rows
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies a message row as message. |
messageId | integer or null | Stocktwits message ID. |
matchedInput | string or null | Symbol or username that first found the message. |
body | string or null | Message text. |
createdAt | date-time string or null | Time the message was posted in ISO 8601 format. |
sourceSentiment | string or null | Stocktwits Bullish or Bearish label, or null when none is present. |
computedSentiment | string or null | Positive, neutral, or negative label based on the message text. |
sentimentScore | number or null | Score from analysis of message text, separate from the author's bullish or bearish label. |
postingSource | string or null | App used to post the message, as reported by Stocktwits. |
reshares | integer or null | Number of message reshares reported by Stocktwits. |
cashtags | object[] | Cashtags found in the message. |
cashtags[].symbol | string or null | Cashtag symbol. |
cashtags[].title | string or null | Company or asset name. |
cashtags[].exchange | string or null | Exchange name. |
cashtags[].watchlistCount | integer or null | Stocktwits watchlist count for the cashtag. |
cashtags[].currentPrice | number or null | Price shown with the message. |
mentions | string[] | Stocktwits usernames named in the message. |
author | object or null | Public facts about the author. |
author.username | string or null | Author username. |
author.name | string or null | Author display name. |
author.avatarUrl | string or null | Author profile image URL. |
author.official | boolean or null | Whether Stocktwits marks the author as official. |
author.followers | integer or null | Author follower count. |
author.following | integer or null | Number of accounts the author follows. |
author.ideas | integer or null | Author idea count shown by Stocktwits. |
author.likes | integer or null | Number of posts the author has liked. |
author.watchlistCount | integer or null | Number of symbols on the author's watchlist. |
author.joinedAt | string or null | Date the author joined Stocktwits. |
media | object[] | Media attached to the message. |
media[].type | string or null | Media type. |
media[].url | string or null | Media URL. |
media[].width | integer or null | Media width in pixels. |
media[].height | integer or null | Media height in pixels. |
chartUrl | string or null | Link to a chart attached to the message. |
likes | integer or null | Number of likes on the message. |
conversation | object or null | Reply details from Stocktwits. |
conversation.parentMessageId | integer or null | Parent message ID. |
conversation.inReplyToMessageId | integer or null | Message ID this post replies to. |
conversation.replies | integer or null | Reply count. |
conversation.isParent | boolean or null | Whether this is a parent message. |
priceTarget | object or null | Price-target details from Stocktwits when present. |
priceTarget.price | number or null | Target price. |
priceTarget.currency | string or null | Target currency. |
priceTarget.date | string or null | Target date. |
priceTarget.startingPrice | number or null | Starting price for the target. |
priceTarget.currentPrice | number or null | Current price shown for the target. |
priceTarget.startDate | string or null | Start date of the source-reported price prediction. |
Genuine message row
This genuine row is from a successful run on the current beta build:
{"recordType": "message","messageId": 626774309,"matchedInput": "Hadirezai99","body": "@Stocktwits","createdAt": "2025-08-27T20:13:33Z","sourceSentiment": "Bullish","computedSentiment": "neutral","sentimentScore": 0,"postingSource": "StockTwits for iOS","reshares": null,"cashtags": [{"symbol": "NVDA","title": "NVIDIA Corp","exchange": "NASDAQ","watchlistCount": 670834,"currentPrice": 182.47}],"mentions": ["@Stocktwits"],"author": {"username": "Hadirezai99","name": "Hadirezai99","avatarUrl": "https://avatars.stocktwits.com/images/default_avatar_11_thumb.png","official": false,"followers": 0,"ideas": 1,"following": 2,"likes": 18,"watchlistCount": 106,"joinedAt": "2024-05-03"},"media": [],"chartUrl": null,"likes": null,"conversation": {"parentMessageId": 626424179,"inReplyToMessageId": 626424179,"replies": 0,"isParent": false},"priceTarget": {"price": 196.2,"currency": "USD","date": "2025-08-28T16:00:00-04:00","startingPrice": 182.47,"currentPrice": 231.1,"startDate": "2025-08-27T16:13:33-04:00"}}
Trending-symbol rows
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies a trending-symbol row as trendingSymbol. |
rank | integer or null | Trending rank, starting at one. |
symbol | string or null | Trending Stocktwits symbol. |
title | string or null | Company or asset name. |
exchange | string or null | Exchange name. |
region | string or null | Region code. |
instrumentClass | string or null | Type of market item. |
logoUrl | string or null | Symbol logo image URL. |
watchlistCount | integer or null | Stocktwits watchlist count. |
sentimentChange | number or null | Sentiment change supplied by Stocktwits. |
volumeChange | number or null | Discussion-volume change supplied by Stocktwits. |
trendScore | number or null | Trend score supplied by Stocktwits. |
trendSummary | string or null | Trend summary supplied by Stocktwits. |
sector | string or null | Market sector. |
industry | string or null | Market industry. |
marketCap | number or null | Market value supplied for the company. |
Genuine trending-symbol row
This genuine row is from a successful trending-symbols run on the current beta build:
{"recordType": "trendingSymbol","rank": 1,"symbol": "ASTS","title": "AST SpaceMobile Inc","exchange": "NASDAQ","region": "US","instrumentClass": "Stock","logoUrl": "https://logos.stocktwits-cdn.com/ASTS.png","watchlistCount": 71753,"sentimentChange": -6.54,"volumeChange": 41.59,"trendScore": 22.3078,"trendSummary": "SpaceXs agreement to acquire low-band spectrum AST SpaceMobile had pursued has intensified concerns that Starlink could become a stronger direct-to-phone competitor, adding to worries about ASTSs launch pace and execution. Traders are divided: bears see the deal as eroding ASTSs competitive position, while bulls argue it could push mobile carriers to deepen their support for ASTS.","sector": "Communications","industry": "SpecialtyTelecommunications","marketCap": 22155.305646}
💳 Pricing
This Actor uses pay-per-event pricing. A charge applies when one public message or trending symbol is saved to your dataset. The current rate is shown in the pricing panel.
🔌 Integrations
- Run the Actor through the Apify API from Python or JavaScript.
- Set an Apify schedule for repeat runs.
- Export the dataset as JSON, CSV, or Excel.
- Use Apify webhooks to send run events to another service.
❓ FAQ
What happens when I leave a work limit empty?
The Actor returns all available messages or trending symbols until the relevant public source is exhausted.
What does matchedInput mean?
It is the first symbol or username that found a saved message. If another value finds the same message later, that later match is skipped. Trending messages have null because they are not tied to a symbol or username.
What happens when Stocktwits leaves out a value?
The field can be null or empty. The Actor does not invent missing source facts.
Does source sentiment appear on every message?
No. sourceSentiment is present when the author added a Bullish or Bearish label. computedSentiment is a separate positive, neutral, or negative label based on the message text.
Can I collect posts from a Stocktwits user?
Yes. Choose user and enter public usernames without the @ sign.
Which mode should I choose?
Use symbol for current public messages for submitted tickers, user for current public posts from submitted usernames, trending for current market-wide trending messages, trending-streams for recent messages from trending tickers, and trending-symbols for the ranked public trending-symbol list.
Does this provide a full Stocktwits archive?
No. It collects current public data exposed by the chosen Stocktwits source. It does not promise a full historical archive.
Is the data a trading recommendation?
No. The Actor returns source data and text sentiment. It does not give trading advice or predict prices.
📝 Changelog
v2.0 (09-10-2026)
- Message rows no longer include
messageUrl. Update code that reads this field. - Collect recent messages from trending tickers with
trending-streams. - Filter messages by trader sentiment, price targets, or message ID range.
- Message rows now include a text sentiment score, posting app, and reshare count.
- Text sentiment is always included.
includeComputedSentiment: falseno longer turns it off. - Price targets now include their source start date and use the source-reported prediction currency when available.
- The paid result label now covers both messages and trending symbols.
v1.1 (22-09-2026)
- Collect trending messages and ranked trending symbols with richer market details.
- Save richer message rows with author, media, conversation, price target, and sentiment data.
- Leave source limits empty to collect all available results.
- Normal runs no longer print package startup commands, while result and failure logs remain available.
v1.0
- Added message rows, computed sentiment, author and market context, and ranked trending-symbol details.
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Text Sentiment Analysis. Apply positive, neutral, or negative labels to message text for follow-up analysis.
- Twitter Scraper. Add public X posts and profile context when Stocktwits is one part of market research.
- Reddit Comments Search Scraper. Compare public Reddit comments with Stocktwits discussion for sentiment work.
- Morningstar Scraper. Add public stock, mutual fund, and ETF research to symbol-level market work.
- Barchart Scraper. Add financial news, quotes, and options data for the same symbols.
Made with ❤️ by Maxime Dupré