Stocktwits Watchlist Sentiment Monitor
Pricing
from $1.50 / 1,000 watchlist results
Stocktwits Watchlist Sentiment Monitor
Monitor Stocktwits watchlists for bullish and bearish sentiment shifts, reversals, and message-volume spikes. Get compact, alert-ready signals for stocks and crypto.
Pricing
from $1.50 / 1,000 watchlist results
Rating
0.0
(0)
Developer
FetchFinch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn a Stocktwits watchlist into alert-ready sentiment signals instead of another raw message feed.
This Apify Actor keeps rolling state between scheduled runs, measures Stocktwits' user-tagged bullish/bearish sentiment, and emits records only when something material changes:
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.BASELINE— the first successful snapshot for a symbol.ERROR— a symbol failed while the rest of the watchlist continued.
The Actor is designed for Apify schedules, webhooks, Make, Zapier, Slack workflows, dashboards, and research pipelines.
Why this Actor is different
Most Stocktwits Actors export messages. This one maintains a bounded rolling observation window in a named key-value store, incrementally fetches new messages, and produces compact symbol-level events with evidence.
Sentiment is transparent and reproducible:
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 toward the sentiment score. minTaggedMessages prevents small samples from creating sentiment alerts.
Quick start
Use input such as:
{"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}}
The first run creates state and normally emits BASELINE. Schedule subsequent runs every 10–15 minutes using the same monitorId. A run with no material changes can intentionally have an empty dataset when outputMode is signalsOnly; its OUTPUT key-value record still contains the run summary.
Use a different monitorId for each independent task or watchlist. Reusing an ID intentionally reuses its rolling history.
Example signal
{"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.
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.topMessages: Number of high-engagement public messages attached as evidence.resetState: Starts a new baseline for the selectedmonitorId.proxyConfiguration: Optional Apify Proxy settings.
Persistent state
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. That 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/Cloudflare error, enable Apify Proxy. Residential proxy traffic is generally more reliable, but it costs more; begin with a small watchlist and conservative concurrency.
Local development
npm installnpm testapify validate-schemaapify run --input-file INPUT.json
Local direct requests may be blocked even if cloud or residential-proxy runs work. Unit tests use deterministic fixtures and do not contact Stocktwits.
Recommended production setup
- Create an Apify Task with a unique
monitorId. - Run it once and inspect the baseline, tagged-message sample size, and
collectionCappedflag. - Tune thresholds for the watchlist's normal activity.
- Schedule it every 10–15 minutes.
- Connect successful-run output to an integration, or call the dataset API from your automation.
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.