Stocktwits Scraper
Pricing
Pay per event
Stocktwits Scraper
Extract stock and crypto messages, bullish/bearish sentiment, trending symbols, and user posts from Stocktwits. Monitor market mood for any ticker. No API key needed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract stock and crypto messages, bullish/bearish sentiment, trending symbols, and trader posts from Stocktwits — the largest financial social network for investors and traders. No API key or login required.
Monitor market mood for any ticker symbol in real time. Scrape the complete message stream for stocks like $AAPL or $TSLA, track what traders are saying about crypto like $BTC, or pull a ranked list of today's trending symbols — all in one actor.
What does Stocktwits Scraper do?
Stocktwits Scraper connects to Stocktwits' internal API to extract messages, user profiles, and symbol data at scale. It covers four data modes:
- 📈 Symbol stream — all recent messages for any stock or crypto ticker (e.g., AAPL, TSLA, BTC.X, ETH.X)
- 👤 User posts — the complete message history of any public Stocktwits user
- 🔥 Trending messages — real-time feed of the most active discussions across all tickers
- 📊 Trending symbols — ranked list of the 30 most-discussed symbols with AI-generated summaries and fundamentals
Every message includes the full text, timestamp, sentiment label (Bullish or Bearish), mentioned tickers, user profile data, and attached chart or media URLs. Export to JSON, CSV, or Excel for downstream analysis.
Who is Stocktwits Scraper for?
Quant analysts and data scientists
- Build trading signal models from retail investor sentiment
- Correlate Stocktwits sentiment with price movements using historical ticker data
- Create datasets for NLP and LLM fine-tuning on financial text
Hedge funds and portfolio managers
- Monitor crowd sentiment for positions in your portfolio
- Track how retail traders react to earnings, news events, or Fed announcements
- Identify unusual spikes in discussion volume for any ticker
FinTech startups and research teams
- Power sentiment dashboards and stock screeners with social signal data
- Monitor competitor tickers and compare community engagement
- Integrate with alternative data platforms (Bloomberg, Refinitiv, FactSet)
Individual traders and retail investors
- Track what top Stocktwits traders are saying about specific stocks
- Get a real-time pulse on market mood before opening a trade
- Automate daily sentiment reports for your watchlist
Why use Stocktwits Scraper?
- 🚀 Pure HTTP — no browser overhead, extremely fast (100 messages in ~5 seconds)
- 💰 16x cheaper compute than the only competitor (256 MB vs 4096 MB)
- 📊 Sentiment included — every message that has a bullish/bearish label includes it
- 🔁 Full pagination — scrape hundreds of messages per ticker via cursor-based pagination
- 📦 All 4 endpoints — symbol, user, trending messages, and trending symbols
- 🤖 AI-generated summaries — trending symbols mode includes Stocktwits' own trend analysis
- 🌐 No API key needed — accesses the public data layer just like the browser does
- 🗂️ Export-ready — JSON, CSV, Excel, XML out of the box via Apify platform
What data can you extract?
Message data (symbol, user, trending modes)
| Field | Type | Description |
|---|---|---|
messageId | number | Unique Stocktwits message ID |
body | string | Full message text |
createdAt | string | ISO 8601 timestamp |
sentiment | string | "Bullish", "Bearish", or null |
symbols | array | Ticker symbols mentioned (e.g., ["AAPL", "SPY"]) |
username | string | Poster's Stocktwits username |
userName | string | Poster's display name |
userId | number | Poster's user ID |
userFollowers | number | Follower count |
userFollowing | number | Following count |
userIdeas | number | Total messages posted |
userOfficial | boolean | Whether it's a verified/official account |
userJoinDate | string | Account creation date |
chartUrl | string | Chart image URL (if attached) |
mediaUrl | string | Media attachment URL (if attached) |
sourceTitle | string | Source app (e.g., "StockTwits Web") |
url | string | Direct link to the message |
scrapedAt | string | Extraction timestamp |
Trending symbols data (trending-symbols mode)
| Field | Type | Description |
|---|---|---|
symbol | string | Ticker symbol (e.g., "AAPL") |
symbolDisplay | string | Display ticker (e.g., "AAPL", "BTC") |
title | string | Full company/asset name |
exchange | string | Exchange (NASDAQ, NYSE, CRYPTO, etc.) |
instrumentClass | string | Asset class (Stock, CRYPTO, etc.) |
logoUrl | string | Symbol logo URL |
watchlistCount | number | Number of users watching |
rank | number | Trending rank (1 = most trending) |
trendingScore | number | Quantitative trending score |
trendSummary | string | AI-generated summary of why it's trending |
marketCap | number | Market cap in billions (USD) |
sector | string | GICS sector |
industry | string | GICS industry |
scrapedAt | string | Extraction timestamp |
How much does it cost to scrape Stocktwits?
Stocktwits Scraper uses Pay-Per-Event (PPE) pricing — you only pay for what you extract.
| Plan | Price per message | Price per trending symbol |
|---|---|---|
| Free | $0.0023 | $0.0023 |
| Starter (BRONZE) | $0.0020 | $0.0020 |
| Scale (SILVER) | $0.00156 | $0.00156 |
| Business (GOLD) | $0.0012 | $0.0012 |
Real-world cost examples (BRONZE pricing):
| What you're scraping | Items | Approx. cost |
|---|---|---|
| 50 AAPL messages | 50 | $0.10 |
| 100 TSLA messages | 100 | $0.20 |
| 30 trending symbols | 30 | $0.06 |
| 200 messages for 3 tickers | 600 | $1.20 |
Free plan estimate: With $5 in free credits you can extract approximately 2,000 messages — enough for a full sentiment analysis run on your top 5 tickers.
There is also a small one-time start fee of $0.005 per run.
How to scrape Stocktwits data
- Go to Stocktwits Scraper on Apify Store
- Click Try for free
- Select your scraping mode (symbol, user, trending, or trending-symbols)
- Enter your ticker symbols (e.g., AAPL, TSLA, BTC.X) or usernames
- Set Max messages (start with 20 to test)
- Click Start
- Download your results in JSON, CSV, or Excel
Example input for symbol mode:
{"mode": "symbol","symbols": ["AAPL", "TSLA", "BTC.X"],"maxMessages": 100}
Example input for trending symbols:
{"mode": "trending-symbols"}
Example input for user mode:
{"mode": "user","usernames": ["jimcramer", "marketwizard"],"maxMessages": 50}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | symbol | Scraping mode: symbol, user, trending, trending-symbols |
symbols | array | [] | Ticker symbols to scrape (used in symbol mode). Crypto tickers end in .X |
usernames | array | [] | Stocktwits usernames (used in user mode, without the @ sign) |
maxMessages | integer | 100 | Max messages per symbol/user. Use 0 for all available |
proxyConfiguration | object | BUYPROXIES | Proxy settings. Default datacenter proxy works well |
Ticker format notes:
- US stocks:
AAPL,TSLA,SPY,NVDA - Crypto:
BTC.X,ETH.X,DOGE.X(note the.Xsuffix) - ETFs:
QQQ,IWM,VTI
Output examples
Message output (symbol/user/trending mode):
{"messageId": 649367647,"body": "$AAPL clean dip at the open → instant buyers stepped in → full intraday recovery. Bullish signal.","createdAt": "2026-04-03T07:14:06Z","sentiment": "Bullish","symbols": ["AAPL"],"username": "TraderJoe","userName": "Joe Smith","userId": 10809273,"userFollowers": 2500,"userFollowing": 180,"userIdeas": 1240,"userOfficial": false,"userJoinDate": "2021-01-15","chartUrl": null,"mediaUrl": "https://media.stocktwits-cdn.com/api/3/media/11474646/default.webp","sourceTitle": "StockTwits Web","url": "https://stocktwits.com/TraderJoe/message/649367647","scrapedAt": "2026-04-03T09:26:27.791Z"}
Trending symbol output:
{"symbol": "NVDA","symbolDisplay": "NVDA","title": "NVIDIA Corporation","exchange": "NASDAQ","instrumentClass": "Stock","logoUrl": "https://logos.stocktwits-cdn.com/NVDA.png","watchlistCount": 612450,"rank": 1,"trendingScore": 8.92,"trendSummary": "NVIDIA is surging on AI chip demand with new data center orders announced. Community is heavily bullish ahead of earnings next week.","marketCap": 2810.5,"sector": "Technology","industry": "Semiconductors","scrapedAt": "2026-04-03T09:26:54.370Z"}
Tips for best results
- 🎯 Start small — test with 20 messages per ticker to verify the output before scaling up
- 📅 Use cursor pagination — the actor handles multi-page scraping automatically; just set a high
maxMessagesvalue - 💎 Crypto tickers — remember to add
.Xsuffix:BTC.X,ETH.X,SOL.X,DOGE.X - ⏰ Schedule for market hours — most discussion happens 9 AM–4 PM ET on weekdays
- 📊 Sentiment analysis — filter for
sentiment: "Bullish"orsentiment: "Bearish"to build directional signal datasets - 🔥 Trending symbols first — run
trending-symbolsmode daily to discover which tickers are getting unusual attention before scraping their message streams
Integrations
Stocktwits Scraper → Google Sheets via Zapier Monitor your portfolio tickers daily. Set up a Zapier workflow that runs the scraper on a schedule, then appends new messages with sentiment to a Google Sheet for manual review.
Stocktwits → Slack alerts via Make Get notified when unusual discussion volume spikes on a ticker you follow. Create a Make scenario that runs the scraper hourly, counts messages, and sends a Slack alert when count exceeds a threshold.
Scheduled sentiment tracking Use Apify Scheduler to run the scraper every morning at 8 AM ET before market open. Track the sentiment ratio (bullish/bearish) for your watchlist and feed the data to a Python analysis script via Apify API.
Trending symbols → stock screener
Combine trending-symbols mode with a stock screener API. Run this actor daily, extract the top 10 symbols, then look up their technical indicators to filter for high-probability setups.
Webhook to database Configure an Apify webhook to POST new results directly to your database (Supabase, PostgreSQL, MongoDB) as soon as each run completes. Great for building real-time sentiment dashboards.
Using the Apify API
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('automation-lab/stocktwits-scraper').call({mode: 'symbol',symbols: ['AAPL', 'TSLA'],maxMessages: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Extracted ${items.length} messages`);items.filter(m => m.sentiment === 'Bullish').forEach(m => {console.log(`@${m.username}: ${m.body.slice(0, 80)}`);});
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("automation-lab/stocktwits-scraper").call(run_input={"mode": "symbol","symbols": ["AAPL", "TSLA"],"maxMessages": 100,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsbullish = [m for m in items if m.get("sentiment") == "Bullish"]bearish = [m for m in items if m.get("sentiment") == "Bearish"]print(f"Bullish: {len(bullish)}, Bearish: {len(bearish)}, Neutral: {len(items)-len(bullish)-len(bearish)}")
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~stocktwits-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "symbol","symbols": ["AAPL", "TSLA"],"maxMessages": 50}'
Use with AI agents via MCP
Stocktwits Scraper is available as a tool for AI assistants that support the Model Context Protocol (MCP).
Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com"}}}
Your AI assistant will use OAuth to authenticate with your Apify account on first use.
Example prompts
Once connected, try asking your AI assistant:
- "Use automation-lab/stocktwits-scraper to get the last 50 messages for NVDA and summarize the sentiment"
- "Fetch the trending symbols from Stocktwits right now and tell me which sectors are getting the most attention"
- "Get 100 messages for BTC.X from Stocktwits and count how many are bullish vs bearish"
Learn more in the Apify MCP documentation.
Is it legal to scrape Stocktwits?
Stocktwits is a publicly accessible social platform. All data extracted by this actor is publicly visible in a browser without logging in. This actor:
- Only accesses public content — no authentication, no private messages
- Does not bypass any authentication or paywall
- Respects rate limits and includes delays between requests
- Complies with GDPR in that all extracted data is publicly available
Use the data responsibly: for market research, academic study, sentiment analysis, and trading signal research. Do not use it to spam, harass, or build contact databases. Always review Stocktwits' Terms of Service for your specific use case.
Apify is committed to ethical scraping — we only build tools for publicly accessible data and promote responsible data use. See Apify's Legal page for more details.
FAQ
How fast is Stocktwits Scraper? Very fast. The actor uses pure HTTP requests (no browser), so it can extract 100 messages in approximately 5–10 seconds on a typical run, depending on the number of pagination pages needed.
How much does it cost to scrape 1,000 messages? At BRONZE pricing ($0.002/message), 1,000 messages costs $2.00 plus a $0.005 run start fee. On the free plan ($5 credits) you can extract approximately 2,100 messages.
Does it work for crypto tickers?
Yes. Use the .X suffix for crypto: BTC.X, ETH.X, SOL.X, DOGE.X, ADA.X, etc. The trending-symbols mode includes both stocks and crypto.
What's the difference between Stocktwits Scraper and the official Stocktwits API? The official Stocktwits API requires an approved developer account and has strict rate limits. This scraper uses the same public API endpoints your browser accesses, requiring no API key or login.
Why are some messages missing sentiment?
Sentiment on Stocktwits is user-provided — traders manually mark their message as Bullish or Bearish when posting. Many users don't add a sentiment label, so those messages return null for the sentiment field. In practice, roughly 30–50% of messages have sentiment labels.
Why did I get zero results?
- Check the ticker format: crypto needs
.X(e.g.,BTC.XnotBTC) - Verify the symbol exists on Stocktwits — search for it at stocktwits.com
- Try the
trending-symbolsmode to discover valid tickers - If a username returns nothing, verify it exists on Stocktwits
What if the scraper gets blocked? The actor uses Apify's datacenter proxies by default, which work reliably with Stocktwits. If you experience blocks, you can switch to the RESIDENTIAL proxy group in the Proxy configuration setting.
Other financial scrapers
- Yahoo Finance Scraper — stock prices, charts, historical data
- TradingView Scraper — stock screener with technical indicators
- CoinGecko Scraper — crypto prices, market caps, coin data
- CoinMarketCap Scraper — crypto market data
- DexScreener Scraper — decentralized exchange token data
- Financial Statements Scraper — SEC filings, income statements
- Reddit Scraper — Reddit posts and comments for r/wallstreetbets and other finance subreddits