Stocktwits Sentiment Scraper & Alerts
Pricing
from $1.50 / 1,000 watchlist results
Stocktwits Sentiment Scraper & Alerts
[🔔 Stateful alerts] Track bullish and bearish Stocktwits sentiment for stock and crypto watchlists. Get sentiment reversals, message-volume spikes and supporting posts, with saved baselines for scheduled monitoring. No Stocktwits API key required.
Pricing
from $1.50 / 1,000 watchlist results
Rating
0.0
(0)
Developer
Fetch Finch
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Scrape Stocktwits Sentiment & Get Watchlist Alerts
What this Actor does
Track bullish and bearish Stocktwits sentiment for stock and crypto watchlists. The Actor saves a rolling baseline for each monitorId, compares later runs with the previous successful snapshot, and emits compact alerts with supporting posts.
It is built for Apify Tasks and schedules, webhooks, Make, Zapier, Slack workflows, dashboards, and research pipelines. It does not require a Stocktwits API key.
Successful event types are:
BASELINE— the first successful snapshot for a symbol.SENTIMENT_REVERSAL— sentiment crossed from meaningfully bullish to bearish, or vice versa.SENTIMENT_SHIFT— sentiment moved by the configured number of points.MENTION_SPIKE— rolling message volume exceeded its previous level by the configured multiplier.
Symbol result vs. scraped message
The priced unit is an aggregated symbol result, not an individual scraped Stocktwits message. One symbol result summarizes the messages found for one symbol in one run and can aggregate up to maxMessagesPerSymbol messages in the rolling window. It contains counts, percentages, score changes, volume changes, and optional topMessages supporting posts.
The transparent score is calculated from Stocktwits' user-selected labels:
sentimentScore = 100 × (bullish tagged messages − bearish tagged messages)/ all tagged messages
The score ranges from -100 (all bearish) to 100 (all bullish). Untagged messages count toward volume but not the score. minTaggedMessages prevents small samples from creating sentiment alerts.
Pricing
The recommended price is $1.50 per 1,000 emitted successful symbol results. Comparing this with raw-message prices of $1–$2.30 per 1,000 messages is misleading: one symbol result can aggregate many messages and include only the highest-engagement posts as evidence.
signalsOnly is the cost-conscious default. The first successful run can emit one BASELINE result per symbol; later runs emit only when a configured signal is detected. A run with no material changes can therefore have an empty dataset. Empty runs do not create symbol-result charges, although Actor runtime and any separately metered proxy traffic can still have platform costs.
Example monthly scenarios, using 30 days and the recommended rate:
| Watchlist and schedule | Emission assumption | Approx. successful results/month | Approx. event price |
|---|---|---|---|
20 symbols every 15 minutes, signalsOnly | 5% of symbol checks emit a result | 2,880 | $4.32 |
20 symbols every 15 minutes, signalsOnly | 10% of symbol checks emit a result | 5,760 | $8.64 |
20 symbols every 15 minutes, allSnapshots | Every successful symbol check emits | 57,600 | $86.40 |
These examples describe event charges only. Direct requests do not use proxy traffic; if Stocktwits blocks direct access, Apify Proxy can improve reliability, and residential proxy traffic may add a separate usage cost. Check the selected Apify proxy product and plan for current rates.
Billing and failed symbols
When a symbol fails, the current implementation writes an ERROR record so the run remains observable and other symbols can continue. An ERROR record has no sentiment result or supporting-message payload, and is not a successful symbol result.
The dataset event description currently covers both successful symbol results and these operational ERROR records. In a future billing implementation, failed-symbol output should be routed to a non-billable channel or excluded from the billable event so customers are not charged for failed-symbol output. Until then, treat the price examples above as the recommended product model and verify the Actor's configured event behavior before publishing.
Run it
Create an Apify Task, enter a watchlist, and run it once to create the initial baseline. Then schedule the same Task every 10–15 minutes with the same monitorId.
Example input:
{"symbols": ["AAPL", "TSLA", "NVDA", "BTC.X"],"monitorId": "growth-and-crypto","windowMinutes": 60,"maxMessagesPerSymbol": 300,"outputMode": "signalsOnly","thresholds": {"sentimentShiftPoints": 20,"reversalMinScore": 15,"mentionSpikeMultiplier": 2,"minMessagesForSpike": 10,"minTaggedMessages": 5}}
Use a different monitorId for each independent watchlist or schedule. Reusing an ID intentionally reuses its rolling history. Set resetState to true when a fresh baseline is needed.
Example result
{"eventType": "SENTIMENT_REVERSAL","eventTypes": ["SENTIMENT_REVERSAL", "MENTION_SPIKE"],"symbol": "AAPL","observedAt": "2026-08-01T10:15:00.000Z","windowMinutes": 60,"messageCount": 84,"previousMessageCount": 39,"messageCountDelta": 45,"volumeRatio": 2.15,"newMessages": 31,"taggedCount": 28,"bullishCount": 9,"bearishCount": 19,"bullishPercent": 32.14,"sentimentScore": -35.71,"previousSentimentScore": 27.27,"sentimentChangePoints": -62.98,"uniqueContributors": 66,"collectionCapped": false,"topMessages": [],"sourceUrl": "https://stocktwits.com/symbol/AAPL","errorMessage": null}
eventType contains the highest-priority event for simple filters. eventTypes preserves every threshold crossed in the same run. A symbol failure instead has eventType: "ERROR" and an errorMessage; it is an operational record, not a sentiment alert.
Input guidance
symbols: Up to 50 stock or crypto symbols. Remove$; use Stocktwits'.Xconvention where applicable for crypto.monitorId: Persistent-state namespace. Keep it stable across scheduled runs.windowMinutes: Rolling aggregation window, from 5 minutes to 7 days.maxMessagesPerSymbol: Fetch and state cap. Increase it whencollectionCappedistrue.outputMode:signalsOnlyfor alerts orallSnapshotsfor time-series collection.emitBaseline: Choose whether the first successful snapshot is emitted.topMessages: Number of high-engagement public posts attached as evidence.resetState: Starts a new baseline for the selectedmonitorId.proxyConfiguration: Optional Apify Proxy settings.failOnSymbolError: Make the run fail after writing error records when any symbol cannot be collected.
Saved baselines
State is stored in a named key-value store:
stocktwits-monitor-<monitorId>
Each symbol retains only normalized messages inside the current rolling window, bounded by maxMessagesPerSymbol. A failed symbol does not overwrite its last good state. When at least one symbol succeeds, successful state updates are committed for the next run.
Symbols removed from the watchlist are also removed from that monitor's state on the next partially or fully successful run.
Stocktwits access and proxies
The Actor uses Stocktwits' public web data endpoint and does not require a Stocktwits API key. The endpoint is undocumented for third-party automation and may change or apply Cloudflare protection without notice.
Direct requests are attempted unless proxy use is enabled. If output contains an HTTP 403 or Cloudflare error, enable Apify Proxy. Residential proxy traffic is generally more reliable, but it costs more; begin with a small watchlist and conservative concurrency.
Responsible use
Stocktwits messages are public user-generated content. Sentiment labels are self-selected by authors, are not verified, and are not trading recommendations. Comply with Stocktwits' terms, applicable law, and your data-retention obligations. This Actor is not affiliated with Stocktwits and does not provide financial advice.