Stocktwits Sentiment Scraper — Bullish/Bearish Feed
Pricing
Pay per event
Stocktwits Sentiment Scraper — Bullish/Bearish Feed
Pull the message and sentiment stream from Stocktwits for stock and crypto ticker symbols. Each row carries Stocktwits' own user-applied Bullish/Bearish sentiment tag plus message text, author, and engagement counts. Keyless target, bounded per-symbol pagination.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
🎯 What this scrapes
Stocktwits runs a live message stream for every stock and crypto ticker, and traders tag their own posts Bullish or Bearish as they write them. This Actor takes a list of symbols, walks each symbol's stream backward page by page, and writes one typed row per message — sentiment tag included verbatim, null when the author left it untagged. We handle the retries, backoff, and proxy routing so the stream lands, bounded to a predictable page/message cap per run.
🔥 Features
- 🔁 Retries with exponential backoff on
408 / 429 / 503and network errors, honouringRetry-Afterwhen Stocktwits sends it. - 🛡️ Rotating browser fingerprints — real-browser TLS impersonation on every request, not a bare Python client.
- 🌐 Apify Proxy routing on every request, fresh exit IP and session on any block.
- 🧩 Per-symbol fault isolation — one symbol's failure never aborts the rest of your run.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, sentiment always present as
Bullish,Bearish, ornull. - 💰 Predictable cost ceiling — every run stops at whichever of your message or page cap hits first.
💡 Use cases
- Sentiment dashboards — track the Bullish/Bearish split for a watchlist over time.
- Trading signal research — feed crowd sentiment into a backtest alongside price data.
- Social listening for IR/comms teams — see what retail traders are saying about a ticker, unfiltered.
- Crypto community monitoring — the same stream + sentiment tag works for
.X-suffixed crypto symbols.
⚙️ How to use it
- Click Try for free at the top of the page.
- Enter the ticker symbols you want — stock or crypto.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the Apify API.
For no-code workflows: install the Apify node for n8n or the Apify module for Make, connect your Apify token, and point it at DevilScrapes/stocktwits-sentiment-scraper.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
symbols | array | yes | ["AAPL", "TSLA"] | Ticker symbols, e.g. AAPL, TSLA, BTC.X. Uppercased and deduplicated automatically. Max 50. |
maxMessagesPerSymbol | integer | no | 100 | Hard cap on messages returned per symbol (1-2000). |
maxPagesPerSymbol | integer | no | 10 | Hard cap on paginated requests per symbol (1-100). |
proxyConfiguration | object | no | {"useApifyProxy": true} | We route every request through Apify Proxy and rotate exit IPs on any block. |
Example input
{"symbols": ["AAPL", "TSLA"],"maxMessagesPerSymbol": 100,"maxPagesPerSymbol": 10,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
One row per Stocktwits message.
| Field | Type | Notes |
|---|---|---|
message_id | integer | Stocktwits message id — stable row identity. |
symbol | string | Ticker symbol the row was fetched for (uppercased). |
text | string | Message body text. |
sentiment | string | null | Bullish, Bearish, or null when the author left it untagged. |
author_username | string | Posting user's Stocktwits handle. |
created_at | string | Message timestamp, ISO-8601 UTC. |
likes_count | integer | null | Like count, if exposed by the payload. |
reshares_count | integer | null | Reshare count, if exposed by the payload. |
Example output
{"message_id": 601234567,"symbol": "AAPL","text": "AAPL breaking out of the range, watching 230 next","sentiment": "Bullish","author_username": "traderjoe22","created_at": "2026-09-10T14:32:07Z","likes_count": 3,"reshares_count": 0}
💰 Pricing
Pay-Per-Event — pay only for what lands in your dataset:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
message-scraped | $0.003 | Per validated message row |
Example: 1 000 messages in a run ≈ $3.20 ($0.20 start + 1 000 x $0.003). No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- Snapshot Actor, not an unbounded archive crawler — no historical backfill beyond your page/message caps.
- No watchlist/portfolio, user-profile, or trending-symbols discovery — symbol list is user-supplied only.
- No authenticated/logged-in Stocktwits features (private streams, DMs).
- No price/OHLC quote data — sentiment-focused by design.
- No sentiment re-classification or NLP — surfaces Stocktwits' own label verbatim, never infers sentiment.
❓ FAQ
Do I need a Stocktwits account or API key?
No. The stream endpoint this Actor calls needs no auth — you only need an Apify account to run it.
What happens to messages the author didn't tag Bullish or Bearish?
They're still returned, with sentiment: null — we never drop a message for lacking a sentiment tag.
Can I pull crypto symbols, not just stocks?
Yes — Stocktwits' own .X crypto ticker convention (e.g. BTC.X) works the same as a stock symbol.
What happens if one of my symbols is invalid or has no messages?
That symbol finishes with zero rows and the run keeps going — an empty stream is a valid result, not a failure.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab in Apify Console — we ship fixes weekly and we read every report.