Scrape public Stocktwits ticker conversations into a clean Apify dataset. Track trader messages, bullish or bearish sentiment, authors, likes, replies, mentioned cashtags, and direct message URLs for any public Stocktwits symbol stream.
Use this actor when you need structured Stocktwits data for market monitoring, sentiment dashboards, alerts, research, or investor-relations workflows.
What does Stocktwits Scraper do?
Stocktwits Scraper collects public messages from Stocktwits symbol streams such as AAPL, TSLA, MSFT, or $NVDA.
It returns one dataset row per message with normalized fields that are ready for spreadsheets, BI tools, databases, and automations.
The actor can collect recent messages for multiple symbols in one run and can optionally use Stocktwits message IDs for incremental collection.
Who is it for?
- ๐ Traders tracking ticker-level discussion and market mood
- ๐ง Quant researchers building sentiment datasets
- ๐ฐ Finance journalists watching fast-moving narratives
- ๐ข Investor-relations teams monitoring public market chatter
- ๐ Automation builders creating ticker alerts
- ๐ Analysts comparing sentiment across symbols
Why use this scraper?
Stocktwits is fast-moving and difficult to monitor manually across many tickers. This actor turns public symbol conversations into a structured dataset with consistent field names.
You can schedule it, call it from an API, connect it to Make or Zapier, or export results to CSV, JSON, Excel, Google Sheets, BigQuery, and other Apify integrations.
What Stocktwits data can I scrape?
You can scrape public symbol message streams. For each requested symbol, the actor returns the newest public messages up to your configured limit.
Typical use cases include collecting the latest messages for watchlists, comparing bullish and bearish mentions, or building a rolling archive with sinceMessageId.
How to use Stocktwits Scraper
- Open the actor on Apify.
- Add one or more Stocktwits symbols, for example
AAPL,TSLA, orMSFT. - Set the number of messages per symbol.
- Run the actor.
- Export the dataset or connect it to your workflow.
Input settings
| Setting | JSON key | Type / default | Description |
|---|---|---|---|
| Stocktwits symbols | symbols |
array, default ["AAPL","TSLA"] |
Ticker or cashtag symbols to scrape from Stocktwits. Use values like AAPL, TSLA, MSFT, or $NVDA. |
| Messages per symbol | maxMessagesPerSymbol |
integer, default 20 |
Maximum number of messages to save for each Stocktwits symbol. |
| Since message ID | sinceMessageId |
integer | Only request messages newer than this Stocktwits message ID, when supported by the public stream. |
| Before message ID | beforeMessageId |
integer | Start pagination before this Stocktwits message ID to collect older messages. |
| Include raw message JSON | includeRaw |
boolean, default false |
Add the raw Stocktwits message object to each dataset item for debugging or custom parsing. |
| Proxy configuration | proxyConfiguration |
object, default {"useApifyProxy":false} |
Optional Apify proxy settings. Leave disabled unless your network is blocked by Stocktwits. |
Example input
{
"symbols": ["AAPL", "TSLA"],
"maxMessagesPerSymbol": 20,
"includeRaw": false
}
Example output
{
"symbol": "AAPL",
"messageId": 123456789,
"body": "$AAPL watching the breakout level",
"createdAt": "2026-07-03T15:00:00Z",
"userId": 12345,
"username": "marketwatcher",
"userName": "Market Watcher",
"avatarUrl": "https://...",
"sentiment": "bullish",
"likes": 4,
"replies": 1,
"mentionedSymbols": ["AAPL", "SPY"],
"sourceUrl": "https://stocktwits.com/marketwatcher/message/123456789"
}
Tips for best results
- Start with a small symbol list and increase after checking output quality.
- Use scheduled runs for rolling sentiment monitoring.
- Store the highest
messageIdfrom each run if you need incremental updates. - Keep
includeRawoff unless you need it, because raw payloads increase dataset size. - Use symbols that have active Stocktwits streams for non-empty outputs.
Handling empty streams
Some symbols may have little or no recent Stocktwits activity. If a symbol returns no rows, try a more active ticker such as AAPL, TSLA, NVDA, or SPY to confirm your setup.
Integrations
Stocktwits Scraper works with Apify integrations and webhooks.
- ๐ Send dataset exports to Google Sheets for analyst review.
- ๐ Trigger a webhook when new messages are collected.
- ๐ง Feed messages into sentiment or LLM classification pipelines.
- ๐๏ธ Store results in BigQuery, Snowflake, PostgreSQL, or S3.
- ๐ฌ Build alerts for bullish or bearish spikes.
API usage
Run Stocktwits Scraper from your own code with the Apify API.
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
"symbols": [
"AAPL",
"TSLA"
],
"maxMessagesPerSymbol": 20,
"sinceMessageId": 1,
"beforeMessageId": 1,
"includeRaw": false
};
const run = await client.actor('fetch_cat/stocktwits-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/stocktwits-scraper").call(run_input={
"symbols": [
"AAPL",
"TSLA"
],
"maxMessagesPerSymbol": 20,
"sinceMessageId": 1,
"beforeMessageId": 1,
"includeRaw": false
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~stocktwits-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"symbols":["AAPL","TSLA"],"maxMessagesPerSymbol":20,"sinceMessageId":1,"beforeMessageId":1,"includeRaw":false}'
Use with AI agents via MCP
Stocktwits Scraper can be used by AI assistants through the hosted Apify MCP server.
Claude Code setup
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/stocktwits-scraper"
Claude Desktop, Cursor, or VS Code JSON config
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/stocktwits-scraper"
}
}
}
Example prompts
- "Run Stocktwits Scraper with this input JSON and summarize the dataset."
- "Export the latest Stocktwits Scraper results to a table I can review."
- "Schedule this Actor for monitoring and tell me what changed between runs."
Scheduling
For continuous monitoring, schedule runs every 15 minutes, hourly, or daily depending on your needs. Store the latest message IDs between runs if you want incremental collection.
Data quality notes
Stocktwits messages are user-generated content. Sentiment is returned when available from Stocktwits. Not every message has sentiment, replies, or complete user profile metadata.
Legality and responsible use
This actor collects publicly available Stocktwits data. You are responsible for using the results in compliance with applicable laws, Stocktwits terms, and your own data policies. Avoid collecting or processing personal data unless you have a lawful basis.
Troubleshooting
Why did my run return fewer messages than requested?
The symbol may have limited recent activity, or the public stream may not provide enough older messages for the requested boundary.
Why is sentiment null?
Not every Stocktwits message has a bullish or bearish sentiment label. Null means no sentiment was present for that message.
Should I enable proxies?
Leave proxies disabled by default. Enable an Apify proxy only if your environment cannot reach Stocktwits reliably.
Support
Report bugs, wrong output, blocked runs, or missing fields from the Actor page. Include the Apify run ID or run URL, your input JSON, what you expected, what the Actor returned, and one reproducible public URL so the issue can be tested quickly.
Field reference details
sourceUrl points to the public Stocktwits message page when a username is available. mentionedSymbols includes cashtags returned with the message and may include the requested symbol plus other referenced tickers.
Export formats
Apify datasets can be exported as JSON, CSV, Excel, XML, RSS, and HTML. CSV and Excel are convenient for analysts; JSON is best for pipelines.
Performance expectations
The actor is HTTP-based and designed for quick runs. Runtime mainly depends on the number of symbols and messages requested.
Monitoring workflows
A common workflow is to run the actor every hour for a watchlist, filter for messages with sentiment, and alert when bearish or bullish counts change sharply.
Research workflows
Researchers can collect historical samples by using beforeMessageId and repeated runs. Keep your collection rate conservative and document your methodology.
Investor-relations workflows
IR teams can monitor tickers around earnings calls, product launches, analyst reports, and market-moving news.
Automation workflows
Use Apify webhooks to trigger downstream jobs after the dataset is ready. For example, send the dataset to an LLM summarizer or a dashboard refresh.