Stocktwits Scraper - Messages, Sentiment & Trending avatar

Stocktwits Scraper - Messages, Sentiment & Trending

Pricing

from $1.20 / 1,000 message or profile records

Go to Apify Store
Stocktwits Scraper - Messages, Sentiment & Trending

Stocktwits Scraper - Messages, Sentiment & Trending

Scrape Stocktwits message streams with bull/bear sentiment labels, bodies, likes, replies, cashtags and author stats for any symbol. Trending symbols, user profiles and full reply threads. Incremental monitoring, resume and MCP export.

Pricing

from $1.20 / 1,000 message or profile records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Stocktwits Scraper

Pull the retail-trader conversation from Stocktwits (stocktwits.com): symbol message streams with the crowd's own Bullish / Bearish sentiment labels, full reply threads, user profiles and the trending symbols list. Every message record carries the body, the author, the sentiment tag the author chose, likes, reply counts and the cashtags it mentions. Recurring runs can report only what changed.

Why This Scraper?

  • Ready-made sentiment dataset: authors tag their own messages Bullish or Bearish; every record ships that label (or None), no inference required.
  • Any surface, one schema: a single record shape covers symbol streams, user messages, thread replies, profiles and trending symbols, filtered by the kind field.
  • Full reply threads: open any message and get every public reply with its own author, sentiment and likes (the reviews-analog surface).
  • Trending and profiles: the current trending symbols with watchlist counts, and user profiles with follower, following and idea counts.
  • Incremental monitoring: recurring runs emit only NEW, UPDATED, REAPPEARED or EXPIRED records against the same input, with first-seen and last-seen timestamps.
  • Resume support: continue an interrupted run without returning records already collected.

Data You Get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample value
kindmessage
recordIdm:00000000
messageId00000000
urlhttps://stocktwits.com/sampletrader/messages/00000000
bodySample trading note about the sample company. $SAMPLE looking ready.
createdAt2027-01-15T19:30:24Z
sentimentBullish (or Bearish, or None for untagged)
likes0
repliesCount0
reshares0
cashtags["SAMPLE"]
symbols[{"symbol": "SAMPLE", "title": "Sample Company Inc", "exchange": "NYSE"}]
mentionedUsers[]
authorUsername / authorNamesampletrader / Sample Trader
authorFollowers0
authorIdentity / authorOfficialUser / false
symbolContextSAMPLE (the stream the message was read from)
kindreply (thread replies add parentMessageId, inReplyToMessageId)
kindsymbol (trending: symbol, symbolTitle, exchange, region, watchlistCount, trendingRank)
kinduser (profiles: userId, username, profileUrl, joinDate, followers, following, ideas)
changeType / changedFields / firstSeenAt / lastSeenAtincremental mode only

Modes

ModeInputWhat you get
symbolssymbols (tickers, $ optional)each ticker's message stream walked newest-first
trendingnonethe current trending symbols with ranks
usersusernames (@ optional)profile record + the user's recent messages
threadsmessageUrls (links or bare message IDs)the message + every public reply
urlstartUrlssymbol pages walked as streams, profile pages as user reads, message links as threads

Filters

  • Stream order (symbols mode): all (newest first, the default) or top (the site's engagement-ranked order).
  • Sentiment filter: keep only Bullish, Bearish or untagged (None) messages. Runs on every fetched message in every mode that returns them.

Reply threads (opt-in, surcharge per 10 replies)

Turn on Fetch reply threads to read each returned message's conversation (one extra read per message) and emit every public reply as its own reply record. There is no reply cap: the full public thread is returned. Threads mode needs no toggle: the thread is the surface you asked for. Large, talkative symbols can make this heavy, so:

  • the thread read bills one detail-enrichment event, plus one more per started block of 10 replies returned (a 25-reply thread bills 3),
  • a run-level breaker stops thread fetching for the rest of the run when threads keep failing,
  • a suppressed incremental record never triggers a thread read or the surcharge.

Limits

Max items is the one cap: it defaults to 20, and 0 means no limit (the run then stops when the streams run out). Large, active symbol streams effectively never run out, so set a limit when you do not need the full history.

Resume and recurring updates

  • Resume (resumeFromRunId): paste a previous run or dataset ID to skip records already collected there.
  • Incremental mode (incrementalMode): for scheduled monitoring. The first run reports every record NEW; later runs report NEW, UPDATED and REAPPEARED. Like and reply counts move constantly, so they never mark a message UPDATED; a real body or sentiment change does.
  • emitUnchanged / emitExpired: off by default; turning them on returns (and bills) extra rows. EXPIRED detection only fires after a complete, uninterrupted scan, so a capped or partial run never tombstones live records.

Send results into your apps (MCP connectors)

You can optionally pipe results into apps you already use via Model Context Protocol (MCP) connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in the mcpConnectors input field. For Notion, set notionParentPageUrl to the page under which item pages are created; the Notion export writes a page per record with a readable summary. Other connectors get a best-effort write or digest. Cap the export with maxNotifyListings. Leave mcpConnectors empty to skip the export entirely; the dataset output is never changed by the connector surface.

Connection and limits

  • Runs on the plain Apify proxy by default; every plan works. The source answered identically on datacenter and residential exits when probed, so there is no need to pay for residential unless you want to.
  • Per-request timeout 15 s, at most 5 attempts per read, short backoff, and a fresh exit on transport errors: the run fails fast rather than grinding.
  • If every read is refused, the run fails loudly instead of reporting an empty success; a genuinely empty result succeeds with a warning.

Usage notes

  • Tickertime note: symbol streams cover stocks, ETFs, crypto pairs and futures tickers that exist on Stocktwits. An unknown ticker is reported and skipped, and a run where nothing could be read fails loudly.
  • One dataset, mixed kinds: filter on kind (message, reply, symbol, user) in the dataset views.