Stocktwits Scraper
Pricing
from $2.10 / 1,000 results
Stocktwits Scraper
Scrape Stocktwits for live stock & crypto messages, bullish/bearish sentiment, price targets, and trending symbols. Extract trader chatter and market mood β no API key. Export JSON/CSV for sentiment analysis, dashboards, and trading research.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Insights Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
π What is Stocktwits Scraper?
Stocktwits Scraper lets you collect public Stocktwits messages, Bullish and Bearish sentiment, price targets and trending symbols, so you can track retail investor sentiment for stocks and crypto without copying posts by hand. Enter one or more tickers (or usernames), pick a mode and click Start. No coding, no login and no Stocktwits API key needed.
Stocktwits is a financial social media network where traders post short messages about tickers. Stocktwits Scraper is a stock sentiment scraper for traders, analysts and researchers: it turns those posts into structured records you can download, schedule and plug into your own tools.
- Track sentiment: collect stock market sentiment data from the Bullish and Bearish tags on the tickers you care about.
- Build a sentiment analysis dataset: export labeled financial text for NLP and machine-learning models.
- Research trading signals: use message volume, sentiment and engagement as inputs for your own research.
- See what's hot: check which Stocktwits trending stocks are ranked today and read the AI summary Stocktwits shows for each one.
- Watch a watchlist on a schedule: monitor mode returns only messages you haven't collected yet.
- Follow traders: collect the public posts of specific Stocktwits users.
A Stocktwits API alternative for batch data: give it tickers or usernames, start a run, and fetch the structured records through the Apify API. It is not the official Stocktwits API and not a live feed: each run collects the messages that are on Stocktwits when it reads them.
What can Stocktwits Scraper do?
- π Read the Stocktwits stream for any ticker:
symbolmode collects the latest Stocktwits messages for stock and crypto tickers likeAAPLorBTC.X. - π€ Collect a trader's posts:
usermode reads the public messages of any username. - π₯ Read the trending Stocktwits feed:
trendingmode reads the site-wide feed of trending messages. - π Get Stocktwits trending symbols: ranked tickers with a trending score, Stocktwits' own AI summary and fundamentals such as sector, market cap and P/E ratio.
- π― Filter results by sentiment, minimum likes, asset class (stocks or crypto), content type (top, links, charts, videos), or only messages with a price target.
- ποΈ Run a Stocktwits monitor: monitor mode remembers the newest message per ticker, per user or for the trending feed, and returns only newer ones next time.
- β‘ Bulk input: paste many tickers or usernames at once. They are processed in parallel, and results appear in the dataset while the run is still going.
- π¦ Export to JSON, CSV, Excel, XML or HTML, run it via API, schedule and monitor runs, and connect it to Make, Zapier, Google Sheets and more.
ποΈ What data can Stocktwits Scraper extract?
Whether you use it as a Stocktwits message scraper for a watchlist or to follow traders, each message becomes one flat record. The table lists the main fields with their exact dataset names; a few extra author and media fields are included too.
| Data | Fields |
|---|---|
| π Message | messageId, body, createdAt, url, isDiscussion, sourceTitle, sourceUrl |
| β Sentiment | sentiment (Bullish / Bearish), sentimentScore (1, -1 or 0) |
| π² Price target | hasPriceTarget, priceTarget, priceTargetCurrency, priceTargetDate, priceTargetStartingPrice, priceTargetCurrentPrice, priceTargetSentiment, priceTargetStatus, priceTargetIsHit, priceTargetAccuracy |
| π Price since post | hasPriceSincePost, priceSincePostCapturedAt, priceSincePostSnapshots |
| π Engagement | likeCount, likesTotal, replyCount, reshareCount, isReply, isReshare, inReplyToMessageId |
| π€ Author | userId, username, userName (display name), userFollowers, userFollowing, userIdeas, userOfficial, userJoinDate, userAvatarUrl |
| π·οΈ Symbols | symbols, symbolsDetailed (title, exchange, watchlist count and more for each ticker), symbolPrices |
| πΈ Media and links | mediaItems, mediaUrl, mediaCount, chartUrl, links, hashtags, mentionedUsernames |
| π₯ Trending context (optional) | trending, trendingRank, trendingScore, trendingAiSummary |
| π§Ύ Record info | recordType (message, trendingSymbol or meta), sourceQuery (the ticker, user or feed the record came from), scrapedAt, isNewSinceLastRun (currently always true, see Known issues) |
| π Trending symbols mode | rank, symbol, title, exchange, trendingScore, aiSummary, sector, industry, marketCap, peRatio, eps, beta, high52Week, low52Week, watchlistCount |
A few fields explained:
likeCountandlikesTotalboth show the message's total likes. TheminLikesfilter checkslikesTotal.userIdeasis the "ideas" count Stocktwits reports for the author.- Stocktwits sentiment is tagged by the author, so
sentimentisnullwhen the author added no tag (sentimentScoreis then0). - Price-target fields are filled only when a price-target prediction is attached to the message, which is true for a minority of posts.
- Trending context fields are filled only when you turn on Enrich with trending context.
What data can't Stocktwits Scraper extract?
- Private messages or anything behind a login
- Full user profile pages as separate records (you get the author fields attached to each message)
- Keyword or full-text search across Stocktwits (the input is tickers, usernames or the trending feeds)
- Full reply threads (you get reply and reshare counts and parent message IDs)
π How to scrape Stocktwits messages and sentiment
- Create a free Apify account using your email.
- Open Stocktwits Scraper.
- The input is prefilled with
AAPLandTSLAinsymbolmode, so you can click Start right away for a test run. For your own watchlist, replace the tickers in Stock / crypto symbols (crypto tickers need the.Xsuffix, for exampleBTC.X), or switch Scraping mode touserand add names in Stocktwits usernames. - Click Start. Results appear in the Output tab while the run is going.
- Download the results in JSON, CSV, Excel, XML or HTML, or fetch them through the API.
π² How much does it cost to scrape Stocktwits?
Stocktwits Scraper uses pay-per-event pricing. The bill for a run has three parts:
| π² Part | Price |
|---|---|
| Results | $0.003 per result, which is $3.00 per 1,000 results on the Free plan (lower on paid plans, see below) |
| Actor start | $0.00005 for each GB of memory the run uses, charged once when the run starts. At the default memory of 1 GB, that's $0.00005 per run |
| Apify platform usage | The computing resources the run uses, paid on top of the event prices. It depends on the run, so there is no fixed price |
What counts as a result: each saved message, and each ranked ticker in trending-symbols mode. Progress records (see includeMeta) are not charged.
| Apify plan | Price per result | Price per 1,000 results |
|---|---|---|
| Free | $0.003 | $3.00 |
| Starter | $0.0027 | $2.70 |
| Scale | $0.0024 | $2.40 |
| Business and higher | $0.0021 | $2.10 |
The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.
Examples at Free plan prices (results plus the start event at the default 1 GB of memory; platform usage comes on top):
- 1,000 results: 1,000 Γ $0.003 + $0.00005 = $3.00005
- 100 results: 100 Γ $0.003 + $0.00005 = $0.30005
- 20 results: 20 Γ $0.003 + $0.00005 = $0.06005
If you change the run memory, the start event is $0.00005 Γ the number of GB. See the pricing tab for the current details.
Is scraping Stocktwits free?
You can try it on the Apify Free plan, which gives you $5 in monthly credit. Free-plan runs work the same as paid runs. The credit is used up by your results plus platform usage together, so set a maximum charge limit when you start a run and do a small test run first.
β¬οΈ Stocktwits Scraper input
Only Scraping mode (mode) is required. In symbol mode you also add tickers in symbols, and in user mode you add usernames; the trending and trending-symbols modes need neither. All other fields have defaults.
| Mode | What it collects |
|---|---|
symbol | The Stocktwits stream of each ticker in symbols |
user | The public posts of each username in usernames |
trending | The site-wide trending message feed |
trending-symbols | The Stocktwits trending tickers ranked today, with fundamentals and AI summaries |
Here's the input the Actor is prefilled with. It collects up to 20 of the latest messages for each of AAPL and TSLA:
{"mode": "symbol","symbols": ["AAPL", "TSLA"],"maxMessages": 20}
See the input tab for a full description of all fields.
Stock / crypto symbols (symbols)
Enter tickers one per line or paste a list. A leading $ is removed and tickers are upper-cased for you. Stocktwits crypto tickers use the .X suffix, so add BTC.X or ETH.X next to your stock tickers to collect crypto sentiment data in the same run.
- β
Good:
BTC.X - β Bad:
BTC
β οΈ Without
.X, you get messages for a different, non-crypto instrument. The Actor never guesses the suffix for you.
Max messages / symbols (maxMessages)
The default is 20. It limits how many messages are saved, not how many are scanned: the Actor keeps reading the feed until it has saved that many matching messages or the feed ends. In symbol and user modes the limit applies per ticker or user. In trending mode it is the total for the run, and in trending-symbols mode it is the number of ranked tickers saved.
Valid values are 0 to 10,000. Larger values make the run fail with an input error, even though the form accepts them. 0 = no count limit set by you; the run still stops at the end of the feed, the spending limit, or an internal safety limit.
- β
Good:
20 - β Bad:
50000
Monitor mode (onlyNewMessages and monitorStoreName)
Turn on Monitor mode β only new messages to get only messages newer than your last run, tracked separately per ticker, per user, or for the trending feed. The Monitor checkpoint name (default stocktwits-monitor) keeps track of what you have already collected. The first run with a new name scrapes normally and saves the checkpoint.
- β
Good:
"monitorStoreName": "tech-watchlist"for one watchlist and another name for the next - β Bad: reusing one name for unrelated watchlists you want to track separately
β οΈ The checkpoint moves to the newest message seen, even if a filter dropped that message. Monitor mode works in
symbol,userandtrendingmodes and has no effect intrending-symbolsmode.
Filters (sentimentFilter, minLikes, assetClassFilter, onlyPriceTargets, filter)
sentimentFilter: Any (the default, no filter),Bullish,Bearish, orNone(untagged messages only)minLikes: drop messages with fewer total likes (likesTotal);0turns it offassetClassFilter: Both (the default),STOCKSorCRYPTO, based on whether a message's tickers end in.XonlyPriceTargets: keep only messages that carry a price-target predictionfilter(Stream content filter):all(the default),top,links,chartsorvideos
The first four are checked after messages are read: every message is still scanned and only matches are saved. With strict filters, the Actor scans more of the feed to reach maxMessages, and you get fewer results if the feed runs out first.
filter works differently: it narrows the feed itself before it is read. For example, top reads only Stocktwits' top messages, and charts reads only messages with a chart, so other messages are never scanned.
β οΈ These filters, Enrich with trending context (
includeTrendingSymbolDetails) and monitor mode apply to the message modes only. They are ignored intrending-symbolsmode.
Other options
includeTrendingSymbolDetails: addstrending,trendingRank,trendingScoreandtrendingAiSummaryto each message. If the Stocktwits trending list can't be loaded, the run continues withtrendingset tofalse.maxId: continue backward (older messages) from a message ID. It applies to every target in the run, so use it with a single ticker or user.includeRawData: attach the original source object to each record asraw.legacyKeyAliases(on by default): also add snake_case copies of some fields, such asmessage_idanduser_id.includeMeta(on by default): add one Progress record per target with scan counts. These records are not charged.proxyConfiguration: off by default. The Actor can use Apify Proxy. If Stocktwits starts blocking requests, the run switches its connection settings on its own and keeps going. You can also turn Apify Proxy on from the start.
β¬οΈ Stocktwits Scraper output
Results are saved to the dataset while the run is still going. Open the Output or Storage tab to see them as a table or JSON in four views: Overview (all record types together), Messages, Trending Symbols and Progress. You can pick only the fields you need. For a one-off Stocktwits data download, export them as JSON, CSV, Excel, XML or HTML. A combined JSON file of all records, including Progress records, is also saved in the run's key-value store under the key OUTPUT.
JSON example
Results for the input example above. The values are illustrative examples, not from a real run, and only some fields are shown:
{"recordType": "message","messageId": 600000001,"body": "$AAPL holding support into earnings, adding a few shares.","createdAt": "2026-10-07T13:45:12Z","sentiment": "Bullish","sentimentScore": 1,"likeCount": 12,"replyCount": 3,"reshareCount": 1,"isReshare": false,"isReply": false,"hasPriceTarget": false,"hasPriceSincePost": false,"symbols": ["AAPL"],"symbolsDetailed": [{ "symbol": "AAPL", "title": "Apple Inc.", "exchange": "NASDAQ" }],"symbolPrices": [{ "symbol": "AAPL", "price": 250.1 }],"userId": 1234567,"username": "example_trader","userName": "Example Trader","userFollowers": 850,"userFollowing": 120,"userIdeas": 4200,"userOfficial": false,"userJoinDate": "2019-03-14","links": [],"hashtags": [],"mentionedUsernames": [],"likesTotal": 12,"url": "https://stocktwits.com/example_trader/message/600000001","sourceQuery": { "kind": "symbol", "value": "AAPL" },"isNewSinceLastRun": true,"scrapedAt": "2026-10-07T13:50:03.120Z"}
With the default settings, each message also carries snake_case copies of some fields (for example message_id, created_at, user_id). Turn off legacyKeyAliases if you don't need them.
Trending symbols example
With "mode": "trending-symbols", each record is one ranked ticker (illustrative values, some fields shown):
{"recordType": "trendingSymbol","rank": 1,"symbol": "NVDA","title": "NVIDIA Corporation","exchange": "NASDAQ","trendingScore": 9.1,"aiSummary": "Short AI summary of why the ticker is trending today.","sector": "Technology","industry": "Semiconductors","marketCap": 3500000000000,"peRatio": 45.2,"scrapedAt": "2026-10-07T13:50:03.120Z"}
Progress example
With includeMeta on (the default), the Progress view shows one record per target. messagesScanned counts every message read, and messagesReturned counts the ones saved after your filters (illustrative values):
{"recordType": "meta","target": { "kind": "symbol", "value": "AAPL" },"messagesScanned": 45,"messagesReturned": 20,"hasMoreResults": true,"nextMaxId": 599999950,"reachedMaxMessages": true,"scrapedAt": "2026-10-07T13:50:04.010Z"}
π‘ Tips and advanced usage
How many results can you scrape with Stocktwits Scraper?
maxMessages allows up to 10,000 saved messages per ticker or user (or in total in the trending modes). The real number depends on how many messages Stocktwits has for a ticker or user, on your filters, and on your spending limit. A quick test run is the best way to check your use case.
How to get cheaper results
- Start with the default
maxMessagesof 20 and raise it once you're happy with the output. - Use filters to save only the messages you need; you pay per saved result. Strict filters make the Actor scan more of the feed to fill
maxMessages, so the run itself can take longer. - Use monitor mode on scheduled runs so you don't collect the same messages again.
Build a Stocktwits sentiment dataset
Combine sentimentFilter, minLikes and assetClassFilter with a schedule and monitor mode. Each run adds only new, labeled messages, so your Stocktwits dataset keeps growing for model training or backtesting.
Known issues
sinceId(Resume after message ID) currently has no effect. Use monitor mode to get only newer messages.maxIdapplies to every target in the run, not just one. Use it with a single ticker or user.- The
isNewSinceLastRunfield is currently alwaystrue. Use monitor mode to get only new messages.
π Stocktwits Scraper integrations and API
Can I use Stocktwits Scraper as a Stocktwits sentiment API?
Yes, in a run-then-fetch way. The Apify API lets you start runs, schedule them and fetch their results, so you can use it as a stock sentiment API for your own apps. Results come from the runs you start or schedule, not from a live stream. Use the apify-client NPM package for Node.js or the apify-client PyPI package for Python. See the API tab for ready-to-use code.
Stocktwits API Python example
Install the client with pip install apify-client, then run the input example above from your own Stocktwits Python script. Replace <YOUR_API_TOKEN> with the API token from your Apify Console settings:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("insights_data/stocktwits-scraper").call(run_input={"mode": "symbol","symbols": ["AAPL", "TSLA"],"maxMessages": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Can I integrate Stocktwits Scraper with other apps?
Yes. Connect Stocktwits Scraper with almost any cloud service through Apify integrations: Make, Zapier, Slack, Google Sheets, Google Drive, Airbyte, GitHub, LangChain and more. Use webhooks to trigger actions whenever a run finishes. For example, schedule a monitor-mode run for your watchlist every hour and send new Bearish messages to a Slack channel or a Google Sheet.
Can I use Stocktwits Scraper with AI agents (MCP)?
Yes. Connect Stocktwits Scraper to Claude and other AI assistants through the Apify MCP server. Open the MCP tab for setup steps.
π§° Other scrapers from Insights Data
Insights Data, the developer of Stocktwits Scraper, also maintains these Actors. They collect data from other websites, not from Stocktwits:
| π Y Combinator Scraper: company profiles, founders and open roles from the YC directory, for deal sourcing and investor research | π Google Ads Transparency Center Scraper & API: competitor ad intelligence by brand, domain or advertiser ID |
| β Flipkart Reviews Scraper: product reviews, star ratings and verified-buyer sentiment | π Flipkart Product Scraper: prices, discounts, ratings and sellers for price monitoring |
β FAQ
Is it legal to scrape Stocktwits?
Scraping publicly available data is generally legal, but you are responsible for how you use it. Stocktwits Scraper collects only public content and nothing behind a login. You should respect personal data rules (for example, GDPR), collect personal data only with a legitimate reason, and take the Stocktwits Terms of Service into account. This is not legal advice; if you're unsure, ask a lawyer.
How does Stocktwits Scraper work?
Think of it as a Stocktwits crawler that works like a person scrolling through a feed, only faster. You pick a mode and give tickers or usernames. It reads each public feed newest first, turns every message into a flat record, applies your filters and saves the matching records to the dataset right away. In trending-symbols mode it collects today's ranked trending tickers instead.
Why use Stocktwits data for stock sentiment analysis?
Stocktwits sentiment analysis is popular because authors tag their own posts as Bullish or Bearish, so you get labeled data without manual tagging.
- Event studies: compare the social media sentiment stocks attract before and after earnings or news.
- Crypto research: follow
BTC.X,ETH.Xand other coins next to your stock tickers. - NLP and AI: train or test models on short, labeled financial posts.
- Price-target tracking: collect each Stocktwits price target with its status and accuracy.
- Discovery: find active tickers in
trending-symbolsmode, then collect their full message streams.
Why am I getting fewer results than expected?
- The feed ran out:
maxMessagesis a maximum, and a ticker or user may have fewer matching messages, especially with strict filters (sentimentFilter,minLikes,assetClassFilter,onlyPriceTargets). - Monitor mode returns only messages newer than your last run with the same checkpoint name.
- Check the ticker format: crypto tickers need
.X. Tickers or usernames that don't exist are skipped. - Your spending limit may have been reached; the run then stops and keeps the results already saved.
What if a run fails or a ticker is missing?
- The run failed: read the run's status message first. Invalid input, such as
symbolmode with no tickers or amaxMessagesvalue outside the allowed range, stops the run, and the status message says why. - A ticker or username is missing: the log shows a line saying the target was not found on Stocktwits and was skipped, while the other targets continue. With Progress records on (the default), that target usually appears in the Progress view with
messagesScannedset to0. - Following a run: while it runs, the status message shows how many targets are processed and how many messages are saved so far. The combined
OUTPUTfile in the key-value store holds every record of the run, including Progress records. - Still stuck? Report it on the Issues tab with a link to the run.
Do I need a Stocktwits account or API key?
No. This Stocktwits extractor collects public data without a login or key. You only need an Apify account to run it.
π§ Support and feedback
Found a bug or have a feature request? Please create an issue on the Issues tab.
Need a custom solution, a private sentiment feed or more data? Contact us at hello.insights.data@gmail.com.
Built and maintained by Insights Data.