Stocktwits Scraper - Messages, Sentiment & Trending Symbols avatar

Stocktwits Scraper - Messages, Sentiment & Trending Symbols

Pricing

from $0.69 / 1,000 messages

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

Stocktwits Scraper - Messages, Sentiment & Trending Symbols

Collect Stocktwits messages for any ticker or user, the trending feed and the ranked trending-symbols board, with author sentiment, price targets, engagement and Stocktwits sentiment scores. No login.

Pricing

from $0.69 / 1,000 messages

Rating

0.0

(0)

Developer

ClearPath

ClearPath

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

1,000 Stocktwits posts. Under 40 seconds. Sentiment, price targets and trader profiles.

From Clearpath, creators of Bluesky Scraper, Reddit Search Scraper and Reddit Comments Scraper. 250,000+ combined lifetime runs across those two Reddit scrapers.

Posts, sentiment and the people behind them

  • Fast bulk exports. Three 1,000-post TSLA exports finished in 33.8 to 37.6 seconds. Timing varies with the ticker, stream depth and settings; replies and separate symbol rows were off in those runs.
  • Get more than the post text. Author Bullish or Bearish tags, price targets, likes, replies, reshares, media and trader profiles, where available. Posts without a sentiment tag stay unlabeled.
  • Add the ticker's sentiment scores. Include Stocktwits' own sentiment and message-volume scores alongside the posts. Follow individual tickers and traders, or explore the trending feeds.

Get Stocktwits posts

Try AAPL and TSLA

Open the input page, switch to JSON and paste:

{
"symbols": [
"AAPL",
"TSLA"
],
"maxMessagesPerSource": 25,
"maxResults": 52,
"includeSymbolRows": true,
"includeSymbolSentiment": true
}

This collects up to 25 posts per ticker and adds a profile row for each ticker with Stocktwits sentiment scores. Symbol rows are billed separately from posts; see current pricing. Change the tickers or add usernames for your own research. Crypto tickers end in .X, for example BTC.X.

The image uses a saved AAPL example: the author's Bullish tag and price target are separate from Stocktwits' own ticker sentiment. Values change over time. The small trial does not reproduce the 1,000-post benchmark.

Clearpath social research  •  Posts, sentiment & audiences
  Stocktwits
➤ You are here
  Bluesky
Posts & audiences
  Reddit Search
Keyword monitoring
  Reddit Comments
Full threads & replies

Copy to your AI assistant

Help me use clearpath/stocktwits-scraper on Apify. Read https://apify.com/clearpath/stocktwits-scraper.md for documentation, input schema, pricing and limits. symbols and usernames choose what to collect, maxMessagesPerSource caps each ticker, user or feed and maxResults caps the whole run; trendingSymbols adds the ranked trending board, billed per symbol row. Choose settings for my requested outcome. If you cannot retrieve the page, ask me to paste the relevant sections. To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: feature requests, a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.

How to scrape Stocktwits

  1. Enter ticker symbols (AAPL, $TSLA, BTC.X or a stocktwits.com/symbol link), usernames (howardlindzon, @name or a profile link), or turn on the trending feed or trending board.
  2. Choose how many messages per ticker, user or feed (default 100, 0 for everything Stocktwits still shows).
  3. Run, then download the dataset as JSON, CSV, Excel or HTML, or read it from your own code.

Messages come newest first. A message that matches two of your inputs is saved once; matchedInput names the first input that found it.

Options

OptionWhat it doesDefault
symbolsTickers whose message streams to collect. Stocks, ETFs, indexes and crypto (.X).none
usernamesUsers whose posts to collect.none
maxMessagesPerSourceMessages per ticker, user and the trending feed. 0 collects everything still shown.100
trendingMessagesAlso collect the Stocktwits trending feed.off
trendingSymbolsAlso save the ranked trending-symbols board, one row per symbol.off
maxTrendingSymbolsBoard rows to save. 0 saves the whole board (500+ symbols).100
messagesFromTrendingSymbolsAlso collect messages for the top N trending symbols.0 (off)
trendingSymbolsClassall or crypto board.all
maxResultsCap on saved rows for the whole run.no cap
sentimentall, bullish, bearish or unlabeled (author's own tag).all
contentFilterFor tickers: all, charts (chart, image or GIF) or links.all
onlyPriceTargetsOnly messages with a price target. Price targets are rare, so the run reads many more messages to find them.off
postedAfterOnly messages after a date (2026-11-01) or a period (7 days, 12 hours).none
newerThanMessageId / olderThanMessageIdCollect only new messages since your last run, or continue further back.none
includeRepliesAlso save the replies of each collected message that started a conversation. Replies follow the same filters, do not count toward maxMessagesPerSource, and each is a billed message; maxResults caps them.off
includeSymbolRowsAlso save one symbol row per ticker you entered (watchers, Stocktwits sentiment and message volume). Billed as a symbol.off
includeSymbolSentimentStocktwits' sentiment and message-volume scores on every symbol row. No extra charge.on

Every filter is off by default, so you get everything Stocktwits shows unless you narrow it.

More examples

Only bullish messages with a chart for Nvidia, last 7 days:

{
"symbols": ["NVDA"],
"sentiment": "bullish",
"contentFilter": "charts",
"postedAfter": "7 days",
"maxMessagesPerSource": 0
}

The ranked trending board with sentiment scores, top 300:

{
"trendingSymbols": true,
"maxTrendingSymbols": 300
}

Messages for today's top 10 trending tickers, 200 each:

{
"messagesFromTrendingSymbols": 10,
"maxMessagesPerSource": 200
}

Price targets across several tickers:

{
"symbols": ["TSLA", "NVDA", "AAPL", "AMD", "PLTR"],
"onlyPriceTargets": true,
"maxMessagesPerSource": 20
}

New messages since your last run (use the highest messageId you saved):

{
"symbols": ["GME"],
"newerThanMessageId": 667990000,
"maxMessagesPerSource": 0
}

A user's posts with the replies to them:

{
"usernames": ["howardlindzon"],
"includeReplies": true,
"maxMessagesPerSource": 100
}

What data can you extract from Stocktwits?

Two kinds of rows, told apart by recordType: message and symbol. The dataset has a Messages view and a Symbols view.

Message rows

FieldMeaning
messageId, url, createdAtMessage ID, link and time (UTC).
body, bodyTokens, symbols, mentions, hashtagsText, its cashtag/mention/link pieces, tickers, mentioned users and hashtags.
sentiment, sentimentScoreAuthor's tag: Bullish (1), Bearish (-1) or none (0).
likeCount, replyCount, reshareCount, likedByUserIds, resharedByUserIdsEngagement.
isReply, isConversationStart, conversationParentMessageId, inReplyToMessageId, conversationReply context.
isReshare, resharedMessageId, resharedMessage, reshareInfoReshare context, with the original message in full.
priceTarget, priceTargetCurrency, priceTargetDate, priceTargetDateTime, priceTargetStartDate, priceTargetStartingPrice, priceTargetCurrentPrice, priceTargetChangePercent, priceTargetSentiment, priceTargetStatus, priceTargetIsHit, priceTargetSymbol, priceTargetDetailsThe author's price prediction, when set.
priceSincePostPrice change of the mentioned ticker since the post, when Stocktwits shows it.
chartUrl, chart, mediaUrl, media, mediaCount, giphyIdCharts, images, videos and GIFs.
links, linkCountLinked pages with title, description, image and site.
pricesAtPost, symbolDetailsPrice of each ticker when posted; full ticker details (exchange, watchers, sector, sentiment and volume change).
userId, username, userDisplayName, userAvatarUrl, userProfileUrl, userFollowers, userFollowing, userIdeas, userLikeCount, userWatchlistCount, userOfficial, userIdentity, userJoinDate, userHomeCountry, userClassification, authorAuthor profile.
sourceId, sourceTitle, sourceUrlApp the message was posted from.
isDiscussion, discussionId, discussionType, discussableDiscussions, polls and earnings summaries attached to the message.
matchedInput, inputType, scrapedAtWhich input found the row (symbol, user, trending, reply, trendingSymbolMessages) and when.

A real message row (one ticker stream, likedByUserIds shortened):

{
"recordType": "message",
"messageId": 667997694,
"url": "https://stocktwits.com/GoDeepinBashersMom/message/667997694",
"body": "$SMCI do you even understand what will happen ? $PLTR $NVDA $BTC.X",
"createdAt": "2026-11-03T11:18:02Z",
"sentiment": "Bullish",
"sentimentScore": 1,
"symbols": [
"SMCI",
"PLTR",
"NVDA",
"BTC.X"
],
"mentions": [],
"hashtags": [],
"likeCount": 2,
"replyCount": 0,
"reshareCount": 0,
"isReshare": false,
"isReply": false,
"isConversationStart": false,
"isDiscussion": false,
"conversationParentMessageId": null,
"inReplyToMessageId": null,
"resharedMessageId": null,
"userId": 9101175,
"username": "GoDeepinBashersMom",
"userDisplayName": "Sick Mode",
"userAvatarUrl": "https://avatars.stocktwits.com/production/9101175/thumb-1718829899.png",
"userProfileUrl": "https://stocktwits.com/GoDeepinBashersMom",
"userFollowers": 199,
"userFollowing": 19,
"userIdeas": 4738,
"userLikeCount": 9344,
"userWatchlistCount": 76,
"userOfficial": false,
"userIdentity": "User",
"userJoinDate": "2024-05-28",
"userHomeCountry": "CZ",
"userClassification": [],
"chartUrl": "https://media.stocktwits-cdn.com/api/3/media/15395634/original.png",
"mediaUrl": "https://media.stocktwits-cdn.com/api/3/media/15395634/original.png",
"mediaCount": 2,
"linkCount": 0,
"priceTarget": null,
"priceTargetCurrency": null,
"priceTargetDate": null,
"priceTargetDateTime": null,
"priceTargetStartDate": null,
"priceTargetStartingPrice": null,
"priceTargetCurrentPrice": null,
"priceTargetChangePercent": null,
"priceTargetSentiment": null,
"priceTargetStatus": null,
"priceTargetIsHit": null,
"priceTargetSymbol": null,
"sourceId": 2095,
"sourceTitle": "StockTwits For Android",
"sourceUrl": "http://www.stocktwits.com/mobile",
"discussionId": null,
"discussionType": null,
"matchedInput": "NVDA",
"inputType": "symbol",
"scrapedAt": "2026-11-03T11:41:26.347Z",
"author": {
"id": 9101175,
"username": "GoDeepinBashersMom",
"name": "Sick Mode",
"avatarUrl": "https://avatars.stocktwits.com/production/9101175/thumb-1718829899.png",
"avatarUrlSsl": "https://avatars.stocktwits.com/production/9101175/thumb-1718829899.png",
"joinDate": "2024-05-28",
"official": false,
"identity": "User",
"classification": [],
"badges": [],
"homeCountry": "CZ",
"searchRegions": [],
"followers": 199,
"following": 19,
"ideas": 4738,
"watchlistStocksCount": 76,
"likeCount": 9344,
"plusTier": "",
"premiumRoom": "",
"tradeApp": false,
"tradeStatus": "PENDING_MFA",
"profileUrl": "https://stocktwits.com/GoDeepinBashersMom"
},
"symbolDetails": [
{
"id": 3563,
"symbol": "SMCI",
"symbolMic": "SMCI.XNAS",
"symbolDisplay": "SMCI",
"exchange": "NASDAQ",
"region": "US",
"logoUrl": "https://logos.stocktwits-cdn.com/SMCI.png",
"title": "Super Micro Computer Inc",
"aliases": [],
"deeplink": "symbol/SMCI",
"externalId": null,
"isFollowing": false,
"watchlistCount": 93804,
"hasPricing": true,
"instrumentClass": "Stock",
"liveEvent": false,
"earningsCta": "up_earn_tab",
"earningsId": "891fbadb-5086-4f50-9d05-989f64a1afa9",
"tradeStatus": "FRACTIONAL",
"sentimentChange": -2.44,
"volumeChange": 14.05,
"url": "https://stocktwits.com/symbol/SMCI"
},
{
"id": 8993,
"symbol": "PLTR",
"symbolMic": "PLTR.XNAS",
"symbolDisplay": "PLTR",
"exchange": "NASDAQ",
"region": "US",
"logoUrl": "https://logos.stocktwits-cdn.com/PLTR.png",
"title": "Palantir Technologies Inc",
"aliases": [],
"deeplink": "symbol/PLTR",
"externalId": null,
"isFollowing": false,
"watchlistCount": 325871,
"hasPricing": true,
"instrumentClass": "Stock",
"liveEvent": false,
"tradeStatus": "FRACTIONAL",
"sentimentChange": -7.8,
"volumeChange": 138.58,
"url": "https://stocktwits.com/symbol/PLTR"
},
{
"id": 2925,
"symbol": "NVDA",
"symbolMic": "NVDA.XNAS",
"symbolDisplay": "NVDA",
"exchange": "NASDAQ",
"region": "US",
"logoUrl": "https://logos.stocktwits-cdn.com/NVDA.png",
"title": "NVIDIA Corp",
"aliases": [],
"deeplink": "symbol/NVDA",
"externalId": null,
"isFollowing": false,
"watchlistCount": 674411,
"hasPricing": true,
"instrumentClass": "Stock",
"liveEvent": false,
"earningsCta": "up_earn_tab",
"earningsId": "f2a0f14c-7f7a-41de-b687-f8404e5de42b",
"tradeStatus": "FRACTIONAL",
"sentimentChange": -5.46,
"volumeChange": 6.54,
"url": "https://stocktwits.com/symbol/NVDA"
},
{
"id": 11418,
"symbol": "BTC.X",
"symbolMic": "BTC.X",
"symbolDisplay": "BTC",
"exchange": "CRYPTO",
"region": "X",
"logoUrl": "https://logos.stocktwits-cdn.com/BTC.X.webp",
"title": "Bitcoin",
"aliases": [
"BTCUSD"
],
"deeplink": "coins/bitcoin",
"externalId": "bitcoin",
"isFollowing": false,
"watchlistCount": 685726,
"hasPricing": true,
"instrumentClass": "CRYPTO",
"liveEvent": false,
"sentimentChange": -0.42,
"volumeChange": 4.88,
"url": "https://stocktwits.com/symbol/BTC.X"
}
],
"pricesAtPost": [
{
"id": 3563,
"symbol": "SMCI",
"symbolMic": "SMCI.XNAS",
"price": 31.17
},
{
"id": 8993,
"symbol": "PLTR",
"symbolMic": "PLTR.XNAS",
"price": 165.35
},
{
"id": 2925,
"symbol": "NVDA",
"symbolMic": "NVDA.XNAS",
"price": 204.99
},
{
"id": 11418,
"symbol": "BTC.X",
"symbolMic": "BTC.X",
"price": 77116.0
}
],
"conversation": null,
"chart": {
"id": 15395634,
"type": "image",
"thumb": "https://media.stocktwits-cdn.com/api/3/media/15395634/thumb.webp",
"medium": "https://media.stocktwits-cdn.com/api/3/media/15395634/medium.webp",
"large": "https://media.stocktwits-cdn.com/api/3/media/15395634/large.webp",
"original": "https://media.stocktwits-cdn.com/api/3/media/15395634/original.png",
"url": "https://media.stocktwits-cdn.com/api/3/media/15395634/default.webp",
"height": 2712,
"width": 1220,
"ratio": 0.449852
},
"media": [
{
"id": 15395634,
"type": "image",
"thumb": "https://media.stocktwits-cdn.com/api/3/media/15395634/thumb.webp",
"medium": "https://media.stocktwits-cdn.com/api/3/media/15395634/medium.webp",
"large": "https://media.stocktwits-cdn.com/api/3/media/15395634/large.webp",
"original": "https://media.stocktwits-cdn.com/api/3/media/15395634/original.png",
"url": "https://media.stocktwits-cdn.com/api/3/media/15395634/default.webp",
"height": 2712,
"width": 1220,
"ratio": 0.449852,
"provider": null,
"providerId": null
},
{
"id": 15395635,
"type": "image",
"thumb": "https://media.stocktwits-cdn.com/api/3/media/15395635/thumb.webp",
"medium": "https://media.stocktwits-cdn.com/api/3/media/15395635/medium.webp",
"large": "https://media.stocktwits-cdn.com/api/3/media/15395635/large.webp",
"original": "https://media.stocktwits-cdn.com/api/3/media/15395635/original.png",
"url": "https://media.stocktwits-cdn.com/api/3/media/15395635/default.webp",
"height": 2712,
"width": 1220,
"ratio": 0.449852,
"provider": null,
"providerId": null
}
],
"giphyId": null,
"links": [],
"priceTargetDetails": null,
"priceSincePost": null,
"discussable": null,
"likedByUserIds": [
11153998,
1483108
],
"resharedByUserIds": [],
"bodyTokens": [
{
"type": "cashTag",
"text": "$SMCI",
"symbol": "SMCI",
"symbolDisplay": "SMCI",
"logoUrl": "https://logos.stocktwits-cdn.com/SMCI.png",
"deeplink": "symbol/SMCI"
},
{
"type": "text",
"text": " do you even understand what will happen ? "
},
{
"type": "cashTag",
"text": "$PLTR",
"symbol": "PLTR",
"symbolDisplay": "PLTR",
"logoUrl": "https://logos.stocktwits-cdn.com/PLTR.png",
"deeplink": "symbol/PLTR"
},
{
"type": "text",
"text": " "
},
{
"type": "cashTag",
"text": "$NVDA",
"symbol": "NVDA",
"symbolDisplay": "NVDA",
"logoUrl": "https://logos.stocktwits-cdn.com/NVDA.png",
"deeplink": "symbol/NVDA"
},
{
"type": "text",
"text": " "
},
{
"type": "cashTag",
"text": "$BTC",
"symbol": "BTC.X",
"symbolDisplay": "BTC",
"logoUrl": "https://logos.stocktwits-cdn.com/BTC.X.webp",
"deeplink": "coins/bitcoin"
}
],
"reshareInfo": null,
"resharedMessage": null
}

Symbol rows

FieldMeaning
rank, trending, trendingScore, trendSummary, trendSummaryAt, trendRankAll, trendRankRegion, trendRankExchange, trendRankClassPosition on the trending board and Stocktwits' trend summary (written for the most active tickers).
symbol, symbolDisplay, symbolMic, symbolId, title, url, exchange, region, instrumentClass, logoUrl, isin, cusip, aliasesTicker identity.
watchlistCount, sentimentChange, volumeChangeWatchers and the day's sentiment and message-volume change (on symbols you enter; the trending board does not carry these two).
marketCap, sector, industry, fundamentalsMarket cap (USD) and 40+ fundamentals (millions where applicable).
price, priceChange, priceChangePercent, previousClose, volume, extendedHoursPrice, extendedHoursChangePercent, currency, priceAt, priceDataLatest regular-session price, pre- and after-market price, and the full price record.
sentimentScoreNow, sentimentLabelNow, sentimentScore15m, sentimentScore24h, ...Stocktwits' sentiment score (0 to 100) with label and change.
messageVolumeScoreNow, messageVolumeLabelNow, ...Stocktwits' message-volume score with label and change.
sentimentTimeframesSentiment, message volume and participation for 1 day, 1 week, 1 month, 3 months, 6 months, 1 year and all time.

A real trending-board row:

{
"recordType": "symbol",
"rank": 1,
"symbol": "AAPL",
"symbolDisplay": "AAPL",
"symbolMic": "AAPL.XNAS",
"symbolId": 686,
"title": "Apple Inc",
"url": "https://stocktwits.com/symbol/AAPL",
"exchange": "NASDAQ",
"region": "US",
"instrumentClass": "Stock",
"logoUrl": "https://logos.stocktwits-cdn.com/AAPL.png",
"watchlistCount": 999993,
"sector": "Electronic Technology",
"industry": "Telecommunications Equipment",
"trending": true,
"trendingScore": 15.7964,
"trendSummary": "Apples earnings beat expectations, but the shares came under pressure after its holiday-quarter margin outlook pointed to higher memory costs, with traders also weighing slower Services growth and concerns about valuation. Bearish reactions focus on margin compression and the post-earnings drop, while bulls argue that strong iPhone demand and the overall results support a recovery.",
"trendSummaryAt": "2026-11-03T11:18:22Z",
"trendRankAll": 1,
"trendRankRegion": 1,
"trendRankExchange": 1,
"trendRankClass": 1,
"sentimentChange": null,
"volumeChange": null,
"marketCap": 5029592216964.0,
"price": 338.32,
"priceChange": -6.31,
"priceChangePercent": -1.831,
"volume": 1430290.0,
"extendedHoursPrice": 325.77,
"extendedHoursChangePercent": -3.71,
"previousClose": 344.63,
"currency": "USD",
"priceAt": "2026-11-02T21:00:00Z",
"isin": "US0378331005",
"cusip": "037833100",
"aliases": [],
"tradeStatus": "FRACTIONAL",
"hasPricing": true,
"matchedInput": "trending symbols",
"inputType": "trendingSymbols",
"scrapedAt": "2026-11-03T11:38:18.547Z",
"sentimentScoreNow": 15,
"sentimentLabelNow": "Extremely bearish",
"sentimentChangeNow": 0.0,
"sentimentValueNow": 0.051,
"sentimentScore15m": 15,
"sentimentLabel15m": "Extremely bearish",
"sentimentChange15m": 0.0,
"sentimentValue15m": 0.058,
"sentimentScore24h": 26,
"sentimentLabel24h": "Bearish",
"sentimentChange24h": 73.3333,
"sentimentValue24h": 0.2934,
"messageVolumeScoreNow": 74,
"messageVolumeLabelNow": "High",
"messageVolumeChangeNow": 0.0,
"messageVolumeValueNow": 218378.0,
"messageVolumeScore15m": 74,
"messageVolumeLabel15m": "High",
"messageVolumeChange15m": 0.0,
"messageVolumeValue15m": 218208.0,
"messageVolumeScore24h": 54,
"messageVolumeLabel24h": "Normal",
"messageVolumeChange24h": -27.027,
"messageVolumeValue24h": 35971.0,
"sentimentTimeframes": {
"1D": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": -27.027,
"label": "EXTREMELY_HIGH",
"labelNormalized": "NORMAL",
"loaded": true,
"value": 35971,
"valueNormalized": 54
},
"participationScore": {
"change": 2100,
"label": "NORMAL",
"labelNormalized": "HIGH",
"loaded": true,
"value": 0.527,
"valueNormalized": 66
},
"sentiment": {
"change": 73.3333,
"label": "BULLISH",
"labelNormalized": "BEARISH",
"loaded": true,
"value": 0.2934,
"valueNormalized": 26
}
},
"1M": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": -43.2432,
"label": "EXTREMELY_HIGH",
"labelNormalized": "LOW",
"loaded": true,
"value": 29172,
"valueNormalized": 42
},
"participationScore": {
"change": 2033.3333,
"label": "HIGH",
"labelNormalized": "HIGH",
"loaded": true,
"value": 0.739,
"valueNormalized": 64
},
"sentiment": {
"change": 153.3333,
"label": "EXTREMELY_BULLISH",
"labelNormalized": "BEARISH",
"loaded": true,
"value": 0.776,
"valueNormalized": 38
}
},
"1W": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": -27.027,
"label": "EXTREMELY_HIGH",
"labelNormalized": "NORMAL",
"loaded": true,
"value": 44645,
"valueNormalized": 54
},
"participationScore": {
"change": 166.6667,
"label": "LOW",
"labelNormalized": "EXTREMELY_LOW",
"loaded": true,
"value": 0.317,
"valueNormalized": 8
},
"sentiment": {
"change": 86.6667,
"label": "BULLISH",
"labelNormalized": "BEARISH",
"loaded": true,
"value": 0.316,
"valueNormalized": 28
}
},
"1Y": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": 6.7568,
"label": "EXTREMELY_HIGH",
"labelNormalized": "EXTREMELY_HIGH",
"loaded": true,
"value": 21960,
"valueNormalized": 79
},
"participationScore": {
"change": 666.6667,
"label": "NORMAL",
"labelNormalized": "EXTREMELY_LOW",
"loaded": true,
"value": 0.525,
"valueNormalized": 23
},
"sentiment": {
"change": 486.6667,
"label": "EXTREMELY_BULLISH",
"labelNormalized": "EXTREMELY_BULLISH",
"loaded": true,
"value": 0.796,
"valueNormalized": 88
}
},
"3M": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": -5.4054,
"label": "EXTREMELY_HIGH",
"labelNormalized": "HIGH",
"loaded": true,
"value": 64748,
"valueNormalized": 70
},
"participationScore": {
"change": 666.6667,
"label": "LOW",
"labelNormalized": "EXTREMELY_LOW",
"loaded": true,
"value": 0.313,
"valueNormalized": 23
},
"sentiment": {
"change": 406.6667,
"label": "EXTREMELY_BULLISH",
"labelNormalized": "EXTREMELY_BULLISH",
"loaded": true,
"value": 0.695,
"valueNormalized": 76
}
},
"6M": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": 1.3514,
"label": "EXTREMELY_HIGH",
"labelNormalized": "EXTREMELY_HIGH",
"loaded": true,
"value": 23807,
"valueNormalized": 75
},
"participationScore": {
"change": 766.6667,
"label": "NORMAL",
"labelNormalized": "LOW",
"loaded": true,
"value": 0.487,
"valueNormalized": 26
},
"sentiment": {
"change": 400,
"label": "EXTREMELY_BULLISH",
"labelNormalized": "EXTREMELY_BULLISH",
"loaded": true,
"value": 0.748,
"valueNormalized": 75
}
},
"ALL": {
"buzz": {
"change": 0,
"label": "",
"labelNormalized": "",
"loaded": false,
"value": 0,
"valueNormalized": 0
},
"loaded": true,
"messageVolume": {
"change": 0,
"label": "EXTREMELY_HIGH",
"labelNormalized": "HIGH",
"loaded": true,
"value": 218378,
"valueNormalized": 74
},
"participationScore": {
"change": 0,
"label": "EXTREMELY_LOW",
"labelNormalized": "EXTREMELY_LOW",
"loaded": true,
"value": 0.245,
"valueNormalized": 3
},
"sentiment": {
"change": 0,
"label": "NEUTRAL",
"labelNormalized": "EXTREMELY_BEARISH",
"loaded": true,
"value": 0.051,
"valueNormalized": 15
}
}
},
"fundamentals": {
"symbol": "AAPL",
"timestamp": "2026-11-02T22:11:24.724916501-05:00",
"name": "Apple Inc",
"businessDescription": "Apple, Inc. engages in the design, manufacture, and sale of smartphones, personal computers, tablets, wearables and accessories, and other varieties of related services. It operates through the following geographical segments: Americas, Europe, Greater China, Japan, and Rest of Asia Pacific. The Americas segment includes North and South America. The Europe segment consists of European countries, as well as India, the Middle East, and Africa. The Greater China segment comprises China, Hong Kong, and Taiwan. The Rest of Asia Pacific segment includes Australia and Asian countries. Its products and services include iPhone, Mac, iPad, AirPods, Apple TV, Apple Watch, Beats products, AppleCare, iCloud, digital content stores, streaming, and licensing services. The company was founded by Steven Paul Jobs, Ronald Gerald Wayne, and Stephen G. Wozniak in April 1976 and is headquartered in Cupertino, CA.",
"industryName": "Telecommunications Equipment",
"sectorName": "Electronic Technology",
"instrumentClass": "Stock",
"fiscalPeriodEndDate": "2025-09-30T00:00:00Z",
"totalAssets": 359241,
"totalDebt": 112377,
"bookValuePerShare": 4.99098,
"totalExpenses": 283111,
"totalLiabilities": 285508,
"revenuePerEmployee": 2506993.976,
"grossIncomeMargin": 46.9051641071605,
"numberOfEmployees": 166000,
"revenueToAssets": 1.218,
"dividendsPerShareSecurity": 1.02,
"dividendExDate": "2025-08-11T00:00:00Z",
"dividendYieldSecurity": 0.399279730681907,
"priceToBook": 45.9682,
"salesOrRevenue": 416161,
"totalCash": 33539,
"sharesOutstanding": 14773.26,
"eps": 7.465,
"marketCapitalization": 5029592.216964,
"pegRatio": 1,
"peRatio": 38.78,
"floatCurrent": 14576.7,
"averageDailyVolumeLastMonth": 39899937.2991,
"fiftyDayMovingAverage": 333.6201,
"beta": 1.0481,
"averageDailyVolumeLast3Months": 42084696.7784,
"highPriceLast52Weeks": 351.73,
"lowPriceLast52Weeks": 243.42,
"totalEnterpriseValue": 3890779.89562,
"fiveYearAveragePeRatio": 31.05,
"sharesHeldByInstitutions": 10064.903708,
"earningsGrowth": 32.5713,
"dividendRate": 1.06,
"dividendPayoutRatio": 13.6637642330877
},
"priceData": {
"symbol": "AAPL",
"timestamp": "2026-11-02T16:00:00-05:00",
"quoteType": "EQUITY",
"open": 342.67,
"high": 343.8,
"low": 335.82,
"last": 338.32,
"previousClose": 344.63,
"previousCloseDate": "2026-10-30",
"change": -6.31,
"percentChange": -1.831,
"volume": 1430290,
"lastSize": 0,
"extendedHours": {
"price": 325.77,
"change": -12.55,
"percentChange": -3.71,
"timestamp": "2026-11-03T06:38:12-05:00",
"sessionType": "PRE_MARKET"
},
"combined": {
"isValid": true,
"price": 325.77,
"change": -12.55,
"percentChange": -3.71,
"timestamp": "2026-11-03T06:38:12-05:00",
"futuresSymbols": {
"standard": "SAAPL",
"micro": "XAAPL"
}
},
"timeLocation": "America/New_York",
"currencyCode": "USD",
"currencySymbol": "$",
"futuresSymbols": {
"standard": "SAAPL",
"micro": "XAAPL"
}
},
"otherFields": {
"deeplink": "symbol/AAPL",
"externalId": null,
"isFollowing": false,
"liveEvent": false,
"features": {
"alertsPrice": true,
"socialData": true,
"trendingMessages": true,
"earnings": true
},
"shouldSeoIndex": true
}
}

Integrations and scheduling

Schedule the Stocktwits scraper hourly or daily to follow a watchlist, with newerThanMessageId or postedAfter to collect only new messages. Each finished run can trigger a webhook for n8n, Make or Zapier, or feed a sentiment model or dashboard.

How much does it cost to scrape Stocktwits?

You pay per row saved, plus a small fee when the run starts.

EventWhen chargedPrice
MessageOnce for each message saved (tickers, users, trending feed, replies)$0.99 per 1,000
SymbolOnce for each symbol row saved (trending board, symbol rows)$1.99 per 1,000
Actor startOnce per run, per GB of memory (default 512 MB: one start)$0.005

Discounts by Apify plan, per 1,000: messages $0.99 on Free, $0.89 on Bronze, $0.79 on Silver, $0.69 on Gold and above; symbols $1.99, $1.79, $1.69 and $1.39. Apify also charges $0.01 per 1,000 rows saved (dataset item fee).

Typical runs on the Free plan: 100 messages, about $0.11 with the start fee; 10,000 messages, about $10.01; the top 100 trending symbols with sentiment, about $0.21. Set maxMessagesPerSource, maxResults or a spending limit to cap any run. A run that reaches its spending limit stops and keeps every row it saved.

FAQ

Do I need a Stocktwits account? No. Enter tickers or usernames and run. Nothing to log in to, no cookie, no key.

How far back can I go? As far as Stocktwits still shows the stream. A recorded run collected 8,678 $TSLA messages covering 12 days before it reached a 5-minute time limit; busy tickers go back further with a longer run. The default run limit is one hour, and the run stops just before its limit and keeps every row.

Does it include sentiment? Yes, twice. Each message carries the author's own Bullish or Bearish tag (sentiment, sentimentScore). Symbol rows carry Stocktwits' sentiment and message-volume scores for now, 15 minutes, 24 hours and longer timeframes. The actor never guesses sentiment from text: untagged messages stay untagged.

Can I get only messages with price targets? Yes, turn on onlyPriceTargets. Only a small share of messages carry one, so expect the run to read many messages for each match.

Can I download a Stocktwits sentiment dataset? Yes. Every run is a dataset you can export as CSV, Excel or JSON: message-level author sentiment for your tickers, and Stocktwits' own sentiment scores per symbol. Schedule it to build your own history over time.

Can I collect crypto? Yes. Crypto tickers end in .X (BTC.X, ETH.X, SOL.X), and the trending board can show crypto only.

How do I collect only new messages on a schedule? Save the highest messageId of each run and pass it as newerThanMessageId next time, or use postedAfter with a period such as 1 hour.

Why is a ticker or user missing? Tickers and users Stocktwits does not list are named in the run log, and the run carries on with the rest. Private or suspended accounts are not returned.

How do I use it from my own code or an AI agent? Run it from the Apify Console, on a schedule, from n8n, Make or Zapier, with the Apify client for Python or JavaScript, or through Apify's MCP server, then read the dataset when the run finishes.

Support

Found a bug or need a field? Open an issue in the Issues tab, or email max@mapa.slmail.me.

This actor is independent and not affiliated with Stocktwits. It collects data Stocktwits makes publicly available; you are responsible for how you use it.