{
  "data": {
    "id": "GC4k4X5RdbgRTbx9m",
    "actId": "gO7zdvF0aSw7rDweu",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-10T16:14:53.373Z",
    "finishedAt": "2026-11-10T16:15:04.528Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11032,
      "runTimeSecs": 11.032,
      "computeUnits": 0.012257777777777777,
      "imageSizeBytes": 358411264
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"StockTwits Scraper Input\",\n  \"description\": \"Scrape StockTwits messages, aggregate sentiment and its history, trending tickers, quotes, fundamentals, price bars, profiles, search, and reply threads.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch from StockTwits.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"symbolMessages\",\n        \"userMessages\",\n        \"trendingSymbols\",\n        \"marketMessages\",\n        \"symbolSentiment\",\n        \"symbolOverview\",\n        \"priceHistory\",\n        \"search\",\n        \"conversation\",\n        \"trendingMessages\",\n        \"symbolSearch\"\n      ],\n      \"enumTitles\": [\n        \"Ticker messages\",\n        \"Trader posts\",\n        \"Trending tickers\",\n        \"Market-wide posts\",\n        \"Ticker sentiment (now or history)\",\n        \"Ticker quote & fundamentals\",\n        \"Price history (OHLCV)\",\n        \"Search tickers & traders\",\n        \"Message thread & replies\",\n        \"Market-wide trending posts (legacy alias)\",\n        \"Search tickers (legacy alias)\"\n      ],\n      \"default\": \"symbolMessages\",\n      \"prefill\": \"symbolMessages\"\n    },\n    \"symbols\": {\n      \"title\": \"Tickers (mode=symbolMessages / symbolSentiment / symbolOverview / priceHistory)\",\n      \"type\": \"array\",\n      \"description\": \"Tickers to fetch, e.g. AAPL, TSLA, BTC.X, BRK.B, SHOP.TSX. Accepts $cashtags and StockTwits symbol URLs. Use .X for crypto.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [\n        \"AAPL\"\n      ],\n      \"prefill\": [\n        \"AAPL\"\n      ]\n    },\n    \"usernames\": {\n      \"title\": \"Usernames (mode=userMessages)\",\n      \"type\": \"array\",\n      \"description\": \"StockTwits usernames without @, or profile URLs, e.g. KirRoyalTrader, https://stocktwits.com/Fibonaccino.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries (mode=search)\",\n      \"type\": \"array\",\n      \"description\": \"Company names, tickers, or trader names to search for, e.g. tesla, apple, TraderLion.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"searchType\": {\n      \"title\": \"Search type (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"What to return from each query.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"symbols\",\n        \"users\"\n      ],\n      \"enumTitles\": [\n        \"Everything (tickers + traders)\",\n        \"Tickers only\",\n        \"Traders only\"\n      ],\n      \"default\": \"all\"\n    },\n    \"streamFilter\": {\n      \"title\": \"Message sort (mode=symbolMessages)\",\n      \"type\": \"string\",\n      \"description\": \"All = newest first, Top = StockTwits ranking, Trending = curated high-engagement posts for the ticker (up to 100).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"top\",\n        \"trending\"\n      ],\n      \"enumTitles\": [\n        \"All (newest first)\",\n        \"Top (ranked stream)\",\n        \"Trending (curated top 100)\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"contentFilter\": {\n      \"title\": \"Content filter (message modes)\",\n      \"type\": \"string\",\n      \"description\": \"Keep only messages with this attachment. Videos are rare; All keeps every message.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"links\",\n        \"charts\",\n        \"videos\"\n      ],\n      \"enumTitles\": [\n        \"All messages\",\n        \"With links\",\n        \"With charts\",\n        \"With videos\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"sentimentFilter\": {\n      \"title\": \"Sentiment filter (message modes)\",\n      \"type\": \"string\",\n      \"description\": \"Keep posts by the author's self-tagged sentiment. Most posts are untagged; Any keeps all.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"bullish\",\n        \"bearish\",\n        \"tagged\"\n      ],\n      \"enumTitles\": [\n        \"Any (no filter)\",\n        \"Bullish only\",\n        \"Bearish only\",\n        \"Any tagged sentiment\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"onlyPriceTargets\": {\n      \"title\": \"Only price predictions (message modes)\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only messages where the author attached a StockTwits price prediction (price target).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"feedType\": {\n      \"title\": \"Market feed (mode=marketMessages)\",\n      \"type\": \"string\",\n      \"description\": \"Trending = market-wide trending posts; Suggested = posts from StockTwits' curated suggested traders; All = public market-wide firehose (deep, chronological).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"trending\",\n        \"suggested\",\n        \"all\"\n      ],\n      \"enumTitles\": [\n        \"Trending posts\",\n        \"Suggested trader posts\",\n        \"All public posts (market-wide, v3)\"\n      ],\n      \"default\": \"trending\"\n    },\n    \"trendingAssetClass\": {\n      \"title\": \"Asset class (mode=trendingSymbols)\",\n      \"type\": \"string\",\n      \"description\": \"Which trending instruments to keep. All includes stocks, ETFs, crypto, ADRs, commodities, and other classes.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"stocks\",\n        \"etf\",\n        \"crypto\",\n        \"adr\",\n        \"commodity\"\n      ],\n      \"enumTitles\": [\n        \"All asset classes\",\n        \"Stocks\",\n        \"ETFs\",\n        \"Crypto\",\n        \"ADRs\",\n        \"Commodities\"\n      ],\n      \"default\": \"all\"\n    },\n    \"sentimentRange\": {\n      \"title\": \"Sentiment range (mode=symbolSentiment)\",\n      \"type\": \"string\",\n      \"description\": \"Now = current sentiment across 15m, 24h, now, 1D–ALL. Other values return the daily/intraday history for that window.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"now\",\n        \"1D\",\n        \"1W\",\n        \"1M\",\n        \"3M\",\n        \"6M\",\n        \"1Y\",\n        \"5Y\",\n        \"ALL\"\n      ],\n      \"enumTitles\": [\n        \"Current snapshot (10 timeframes)\",\n        \"1 day history\",\n        \"1 week history\",\n        \"1 month history\",\n        \"3 month history\",\n        \"6 month history\",\n        \"1 year history\",\n        \"5 year history\",\n        \"All history (2018+)\"\n      ],\n      \"default\": \"now\"\n    },\n    \"chartZoom\": {\n      \"title\": \"Price history window (mode=priceHistory)\",\n      \"type\": \"string\",\n      \"description\": \"Intraday windows use 5-minute (1D) or 30-minute (1W) bars; other windows use daily/weekly bars.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"1D\",\n        \"1W\",\n        \"1M\",\n        \"3M\",\n        \"6M\",\n        \"YTD\",\n        \"1Y\",\n        \"5Y\",\n        \"ALL\"\n      ],\n      \"enumTitles\": [\n        \"1 day\",\n        \"1 week\",\n        \"1 month\",\n        \"3 months\",\n        \"6 months\",\n        \"Year to date\",\n        \"1 year\",\n        \"5 years\",\n        \"All (2016+)\"\n      ],\n      \"default\": \"1M\"\n    },\n    \"includeUserProfile\": {\n      \"title\": \"Include trader profile (mode=userMessages)\",\n      \"type\": \"boolean\",\n      \"description\": \"Add one profile record per username before that trader's posts.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeRelatedSymbols\": {\n      \"title\": \"Include related tickers (mode=symbolOverview)\",\n      \"type\": \"boolean\",\n      \"description\": \"Add StockTwits' related-industry tickers to each symbol record.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"newerThanMessageId\": {\n      \"title\": \"Newer than message ID (message modes)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep messages with an ID greater than this. Useful for incremental scheduled runs.\",\n      \"minimum\": 0\n    },\n    \"olderThanMessageId\": {\n      \"title\": \"Older than message ID (message modes)\",\n      \"type\": \"integer\",\n      \"description\": \"Start from messages at or below this ID and page further back.\",\n      \"minimum\": 0\n    },\n    \"messageIds\": {\n      \"title\": \"Message IDs (mode=conversation)\",\n      \"type\": \"array\",\n      \"description\": \"Message IDs or StockTwits message URLs whose parent + reply thread should be fetched.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"maxItems\": {\n      \"title\": \"Max records\",\n      \"type\": \"integer\",\n      \"description\": \"Per ticker/username/query/thread for target modes; total for trending and market feeds; max points or bars for history modes.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 30,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# StockTwits Ticker Sentiment & Trending Symbol Feed\n\nStockTwits is where retail traders post real-time, self-tagged Bullish/Bearish takes on stocks, ETFs, and crypto. This actor reads that public data for any ticker or trader: message streams, aggregate sentiment snapshots, daily sentiment history back to 2018, the full trending-symbols list with prices and fundamentals, current quotes, OHLCV price bars, search results, and reply threads — all without a login or API key.\n\n## What this actor does\n\n- **Nine modes:** ticker messages, trader posts, trending tickers, market-wide posts (trending / suggested / all), ticker sentiment, ticker overview, price history, search, and message threads.\n- **Multi-target inputs:** up to 50 tickers or traders per run, with per-target record limits.\n- **Sentiment:** per-message Bullish/Bearish tags plus StockTwits' own aggregate gauge and historical daily series.\n- **Trending depth:** up to 573 trending instruments (not just the top 30), including price, fundamentals, and trend summaries where StockTwits provides them.\n- **Deep archive:** v2 for recent filtered streams, automatic v3 continuation when the 12-month boundary is reached (AAPL back to 2009 in probes).\n- **Filters:** newest/top/curated-trending sort, links/charts/videos, self-tagged sentiment, and message-ID bounds for incremental runs.\n- **No credentials, no browser, no proxy setup.** Empty fields are omitted from each record.\n\n## Output per record type\n\nEvery row has a `recordType` and `scrapedAt`.\n\n### Message (`recordType: \"message\"`)\n\n- `messageId`, `body`, `createdAt`, `isDiscussion`, `sentiment` — post identity and the author's optional Bullish/Bearish tag\n- `symbol`, `symbols`, `cashtags` — the ticker and every cashtag, with title, exchange, watchlist count, price, sentiment change, and volume change\n- `priceAtPost`, `prices` — price snapshot(s) attached to the post\n- `priceTarget`, `priceTargetDate`, `priceTargetDateTime`, `priceTargetStartingPrice`, `priceTargetCurrentPrice`, `priceTargetPercentChange` — StockTwits' source-reported price prediction, when the author attached one\n- `priceTargetStatus`, `priceTargetSentiment`, `priceTargetType`, `priceTargetIsHit`, `priceTargetAccuracy` — prediction status and outcome metadata\n- `priceTargetFinalPrice`, `priceTargetFinalPriceChange`, `priceTargetFinalPriceChangePercent`, `priceTargetCreatedAt`, `priceTargetSymbol` — final result and provenance\n- `likeCount`, `reshareCount`, `replyCount` — engagement\n- `isReply`, `isReshare`, `conversationParentMessageId`, `conversationInReplyToMessageId`, `isConversationParent`, `conversationRole` — thread context\n- `userId`, `username`, `userDisplayName`, `userFollowers`, `userFollowing`, `userIdeas`, `userJoinDate`, `userOfficial`, `userIdentity`, `userClassification`, `userBadges`, `userHomeCountry`, `userLikeCount`, `userWatchlistCount`, `userTradeStatus` — author details\n- `userAvatarUrl`, `userAvatarUrlOriginal`, `stocktwitsUserUrl`\n- `mediaUrls`, `media`, `chartUrl`, `links`, `mentionedUsers`\n- `resharedMessageId`, `resharedBody`, `resharedUsername`, `resharedCreatedAt`\n- `source`, `sourceUrl`, `stocktwitsUrl`\n\n### Symbol (`recordType: \"symbol\"`)\n\n- `symbol`, `symbolId`, `symbolDisplay`, `symbolMic`, `title`, `exchange`, `region`, `instrumentClass`, `logoUrl`, `watchlistCount`, `hasPricing`, `tradeStatus`, `liveEvent`, `aliases`, `cusip`, `isin`\n- `sector`, `industry`, `rank`, `isTrending`, `trendingScore`, `trendSummary`, `trendSummaryAt`, `trendRanks`, `features`\n- `priceLast`, `priceChange`, `pricePercentChange`, `priceOpen`, `priceHigh`, `priceLow`, `pricePreviousClose`, `priceVolume`, `priceCurrency`, `priceAsOf`, `extendedHoursPrice`, `extendedHoursChange`, `extendedHoursPercentChange`, `combinedPrice`, `combinedChange`, `combinedPercentChange`\n- `marketCap`, `peRatio`, `eps`, `dividendRate`, `beta`, `sharesOutstanding`, `floatShares`, `revenue`, `grossMargin`, `totalCash`, `totalDebt`, `totalAssets`, `totalLiabilities`, `bookValuePerShare`, `priceToBook`, `revenuePerEmployee`, `revenueToAssets`, `avgDailyVolume1M`, `avgDailyVolume3M`, `high52Week`, `low52Week`, `fiftyDayMovingAverage`, `institutionalOwnership`, `earningsGrowth`, `employees`, `businessDescription`, `fiscalPeriodEnd`, `fundamentalsUpdatedAt`. Monetary fundamentals are in USD; share counts are share counts.\n- `relatedSymbols` (when enabled), `matchedQuery` (search), `stocktwitsUrl`\n\n### Trader (`recordType: \"user\"`)\n\n`userId`, `username`, `userDisplayName`, `userAvatarUrl`, `userAvatarUrlOriginal`, `userJoinDate`, `userOfficial`, `userIdentity`, `userClassification`, `userBadges`, `userHomeCountry`, `userFollowers`, `userFollowing`, `userIdeas`, `userWatchlistCount`, `userLikeCount`, `userTradeStatus`, optional `pinnedMessageId`/`pinnedMessageBody`/`pinnedMessageCreatedAt`, `stocktwitsUrl`, and search-only `premium`, `verified`, `companyRepresentative`, `matchedQuery`.\n\n### Sentiment snapshot (`recordType: \"sentiment\"`)\n\nOne row per ticker with a `timeframes` object keyed `15m`, `24h`, `now`, `1D`, `1W`, `1M`, `3M`, `6M`, `1Y`, and `ALL`. Each timeframe carries:\n\n- `sentimentValue`, `sentimentLabel`, `sentimentScore`, `sentimentScoreLabel`, `sentimentChange`\n- `messageVolume`, `messageVolumeLabel`, `messageVolumeScore`, `messageVolumeScoreLabel`, `messageVolumeChange`\n- `participationRatio`, `participationLabel`, `participationScore`, `participationScoreLabel`, `participationChange` where available\n\n### Sentiment history (`recordType: \"sentimentPoint\"`)\n\nOne row per date/time: `symbol`, `dateTime`, `sentimentValue`, `sentimentLabel`, `sentimentScore`, `sentimentScoreLabel`, `messageVolume`, `messageVolumeLabel`, `messageVolumeScore`, `messageVolumeScoreLabel`, `participationRatio`, `participationLabel`, `participationScore`, `participationScoreLabel`.\n\n### Price bar (`recordType: \"priceBar\"`)\n\n`symbol`, `date`, `startTime`, `endTime`, `dateTime`, `open`, `high`, `low`, `close`, `last`, `volume`, `trades`, `vwap`, `twap`, `utcOffset`.\n\n## Input\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `mode` | string (select) | `symbolMessages` | `symbolMessages`, `userMessages`, `trendingSymbols`, `marketMessages`, `symbolSentiment`, `symbolOverview`, `priceHistory`, `search`, `conversation`. Legacy aliases `trendingMessages` and `symbolSearch` are still accepted. |\n| `symbols` | array | `[\"AAPL\"]` | Tickers for symbol modes. Accepts `AAPL`, `$TSLA`, `BTC.X`, `BRK.B`, `SHOP.TSX`, or symbol URLs. |\n| `usernames` | array | – | Traders for `userMessages`, without `@`; profile URLs accepted. |\n| `searchQueries` | array | – | Names or tickers for `search`. |\n| `searchType` | string (select) | `all` | `all`, `symbols`, or `users`. |\n| `streamFilter` | string (select) | `all` | `all` (newest), `top` (ranked), `trending` (curated top 100 per ticker). |\n| `contentFilter` | string (select) | `all` | `all`, `links`, `charts`, `videos`. |\n| `sentimentFilter` | string (select) | `any` | `any`, `bullish`, `bearish`, `tagged`. |\n| `onlyPriceTargets` | boolean | `false` | Keep only messages with a source-reported price prediction. |\n| `feedType` | string (select) | `trending` | `trending`, `suggested`, or `all` (public market-wide chronological stream). |\n| `trendingAssetClass` | string (select) | `all` | `all`, `stocks`, `etf`, `crypto`, `adr`, `commodity`. |\n| `sentimentRange` | string (select) | `now` | `now`, `1D`, `1W`, `1M`, `3M`, `6M`, `1Y`, `5Y`, `ALL`. |\n| `chartZoom` | string (select) | `1M` | `1D`, `1W`, `1M`, `3M`, `6M`, `YTD`, `1Y`, `5Y`, `ALL`. |\n| `includeUserProfile` | boolean | `false` | Add a trader profile record in `userMessages`. |\n| `includeRelatedSymbols` | boolean | `false` | Add related tickers in `symbolOverview`. |\n| `newerThanMessageId` | integer | – | Keep messages newer than this StockTwits message ID. |\n| `olderThanMessageId` | integer | – | Start at or below this message ID and page further back. |\n| `messageIds` | array | – | Message IDs or URLs for `conversation`. |\n| `maxItems` | integer | `30` | Per ticker/trader/query/thread for target modes; total for feeds; max points/bars for history modes. 1–5000. |\n\n### Example: latest tagged sentiment on several tickers\n\n```json\n{\n  \"mode\": \"symbolMessages\",\n  \"symbols\": [\"AAPL\", \"TSLA\", \"NVDA\"],\n  \"streamFilter\": \"all\",\n  \"sentimentFilter\": \"tagged\",\n  \"maxItems\": 50\n}\n```\n\n### Example: daily sentiment history for a watchlist\n\n```json\n{\n  \"mode\": \"symbolSentiment\",\n  \"symbols\": [\"AAPL\", \"MSFT\", \"SPY\", \"BTC.X\"],\n  \"sentimentRange\": \"ALL\",\n  \"maxItems\": 500\n}\n```\n\n### Example: trending crypto with prices and fundamentals\n\n```json\n{\n  \"mode\": \"trendingSymbols\",\n  \"trendingAssetClass\": \"crypto\",\n  \"maxItems\": 74\n}\n```\n\n### Example: quote, fundamentals, and related tickers\n\n```json\n{\n  \"mode\": \"symbolOverview\",\n  \"symbols\": [\"NVDA\", \"AMD\", \"ASML\"],\n  \"includeRelatedSymbols\": true,\n  \"maxItems\": 3\n}\n```\n\n### Example: a trader's posts plus their profile\n\n```json\n{\n  \"mode\": \"userMessages\",\n  \"usernames\": [\"KirRoyalTrader\"],\n  \"includeUserProfile\": true,\n  \"maxItems\": 100\n}\n```\n\n### Example: a message thread\n\n```json\n{\n  \"mode\": \"conversation\",\n  \"messageIds\": [\"https://stocktwits.com/TalkMarkets/message/666869978\"],\n  \"maxItems\": 30\n}\n```\n\n## Use cases\n\n- **Sentiment research** — compare self-tagged Bullish/Bearish posts with StockTwits' aggregate gauge and daily history.\n- **Trading dashboards** — feed message volume, participation, sentiment scores, and trending ranks into a live dashboard.\n- **Scheduled monitoring** — use `newerThanMessageId` to collect only posts published since the last run.\n- **Trend discovery** — scan the full trending list, filter to stocks, ETFs, or crypto, and read StockTwits' why-it-is-trending summaries.\n- **Trader research** — export a public trader's post history, profile stats, and replies for influence analysis.\n- **Quant datasets** — join ticker messages, quotes, fundamentals, and OHLCV bars in one run for model training or backtesting.\n\n## FAQ\n\n**Does this need a StockTwits login or API key?**\nNo. It reads the same public JSON endpoints the StockTwits website uses when you browse logged out. No cookies, API key, or proxy setup is required.\n\n**How far back do messages go?**\nRecent filtered streams use StockTwits' 12-month v2 window. When that walk reaches the boundary, the actor continues through StockTwits' v3 stream API: probes reached 2009 for AAPL and 2022 across 38/38 diverse tickers, with user archives varying by account. `streamFilter=top` stays on the recent ranked window; the archive continuation is chronological. Older v3 rows can omit fields the current source no longer serializes (for example `links` or reply context). Sentiment history goes back to 2018, and price bars go back to 2016 where the ticker has data.\n\n**Why is `sentiment` missing from many messages?**\nTagging a post Bullish or Bearish is optional. Untagged posts simply omit the field. Use `sentimentFilter=tagged`, or use the `symbolSentiment` mode for StockTwits' aggregate gauge, which is not limited to tagged posts.\n\n**What do `sentimentScore` and `sentimentScoreLabel` mean?**\nThey are StockTwits' normalized 0–100 score and label (for example \"Extremely Bearish\"). `sentimentValue` is the underlying raw value, which can be negative. The normalized pair is what the StockTwits website displays. Snapshot mode returns one row per ticker with a `timeframes` object containing all ten timeframes; history mode returns one row per date/time.\n\n**Why are some trending tickers missing prices or fundamentals?**\nStockTwits publishes richer data for equities than for some ETFs and crypto. AI trend summaries are generated by StockTwits only for the top of the trending list, not for every symbol. Fields the source does not provide are omitted rather than filled with placeholder values.\n\n**Does every ticker have price history?**\nMost US, Canadian, ETF, and crypto symbols do. A few valid message-stream symbols — often very thinly traded or foreign listings such as some `.TSX` names — have no chart data; the actor skips them and continues, while `symbolOverview` can still return their quote.\n\n**Can I get more than 30 trending tickers?**\nYes. The trending mode walks StockTwits' enhanced list, which currently returns up to about 573 instruments (about 74 for crypto). `marketMessages` with `feedType=all` reads the public market-wide stream instead. Search is separate and capped by StockTwits at 12 symbol or 15 user results per query.\n\n**Can I collect messages for a specific trader and ticker together?**\nStockTwits' combined user+ticker endpoint requires authentication, so it is not used. You can fetch a trader's posts and filter the `cashtags`/`symbols` fields client-side.\n\n**Why do links to stocktwits.com sometimes fail in scripts?**\nStockTwits protects its website pages with a browser challenge. The links are valid and open normally in a browser; this affects page navigation, not the actor's data.\n\n**Does the actor invent price targets or text sentiment?**\nNo. It returns StockTwits' own source-reported price predictions when an author attached one (`priceTarget*` fields) and never generates targets or model-based text sentiment. Empty fields are omitted rather than returned as `null`.\n\n## Use it as an API (server mode)\n\nNeed one answer right away instead of a batch job? Send the input as an HTTP request and the results come back in the response. There's no run to start and poll.\n\n```bash\ncurl -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  \"https://dataspryva--stocktwits-ticker-sentiment-and-trending-symbol.apify.actor/?mode=symbolMessages&symbols=AAPL&maxItems=3\"\n```\n\nOr POST the same input as JSON:\n\n```bash\ncurl -X POST -H \"Authorization: Bearer $APIFY_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": \"symbolMessages\", \"symbols\": [\"AAPL\"], \"maxItems\": 3}' \\\n  \"https://dataspryva--stocktwits-ticker-sentiment-and-trending-symbol.apify.actor/\"\n```\n\n- The fields are the same as in the input above. With GET, repeat a parameter once for each value in a list.\n- You get back a JSON array with the same records a normal run saves. They're saved to the run's dataset too.\n- Each request is capped at 50 results and 4 minutes. For bigger jobs, start a normal run.\n- The request runs in your own Apify account at the Actor's normal price (a start fee plus a price per result). The server shuts down after a minute with no requests.\n- The Server tab on this page lists every parameter and lets you try a request from your browser.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "stocktwits-ticker-sentiment-and-trending-symbol",
      "title": "StockTwits Ticker Sentiment & Trending Symbol Feed",
      "description": "Scrape StockTwits ticker messages, trader posts, aggregate sentiment and its daily history, trending tickers with prices and fundamentals, quotes, price bars, and search. No login or API key.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# StockTwits Ticker Sentiment & Trending Symbol Feed\n\nStockTwits is where retail traders post real-time, self-tagged Bullish/Bearish takes on stocks, ETFs, and crypto. This actor reads that public data for any ticker or trader: message streams, aggregate sentiment snapshots, daily sentiment history back to 2018, the full trending-symbols list with prices and fundamentals, current quotes, OHLCV price bars, search results, and reply threads — all without a login or API key.\n\n## What this actor does\n\n- **Nine modes:** ticker messages, trader posts, trending tickers, market-wide posts (trending / suggested / all), ticker sentiment, ticker overview, price history, search, and message threads.\n- **Multi-target inputs:** up to 50 tickers or traders per run, with per-target record limits.\n- **Sentiment:** per-message Bullish/Bearish tags plus StockTwits' own aggregate gauge and historical daily series.\n- **Trending depth:** up to 573 trending instruments (not just the top 30), including price, fundamentals, and trend summaries where StockTwits provides them.\n- **Deep archive:** v2 for recent filtered streams, automatic v3 continuation when the 12-month boundary is reached (AAPL back to 2009 in probes).\n- **Filters:** newest/top/curated-trending sort, links/charts/videos, self-tagged sentiment, and message-ID bounds for incremental runs.\n- **No credentials, no browser, no proxy setup.** Empty fields are omitted from each record.\n\n## Output per record type\n\nEvery row has a `recordType` and `scrapedAt`.\n\n### Message (`recordType: \"message\"`)\n\n- `messageId`, `body`, `createdAt`, `isDiscussion`, `sentiment` — post identity and the author's optional Bullish/Bearish tag\n- `symbol`, `symbols`, `cashtags` — the ticker and every cashtag, with title, exchange, watchlist count, price, sentiment change, and volume change\n- `priceAtPost`, `prices` — price snapshot(s) attached to the post\n- `priceTarget`, `priceTargetDate`, `priceTargetDateTime`, `priceTargetStartingPrice`, `priceTargetCurrentPrice`, `priceTargetPercentChange` — StockTwits' source-reported price prediction, when the author attached one\n- `priceTargetStatus`, `priceTargetSentiment`, `priceTargetType`, `priceTargetIsHit`, `priceTargetAccuracy` — prediction status and outcome metadata\n- `priceTargetFinalPrice`, `priceTargetFinalPriceChange`, `priceTargetFinalPriceChangePercent`, `priceTargetCreatedAt`, `priceTargetSymbol` — final result and provenance\n- `likeCount`, `reshareCount`, `replyCount` — engagement\n- `isReply`, `isReshare`, `conversationParentMessageId`, `conversationInReplyToMessageId`, `isConversationParent`, `conversationRole` — thread context\n- `userId`, `username`, `userDisplayName`, `userFollowers`, `userFollowing`, `userIdeas`, `userJoinDate`, `userOfficial`, `userIdentity`, `userClassification`, `userBadges`, `userHomeCountry`, `userLikeCount`, `userWatchlistCount`, `userTradeStatus` — author details\n- `userAvatarUrl`, `userAvatarUrlOriginal`, `stocktwitsUserUrl`\n- `mediaUrls`, `media`, `chartUrl`, `links`, `mentionedUsers`\n- `resharedMessageId`, `resharedBody`, `resharedUsername`, `resharedCreatedAt`\n- `source`, `sourceUrl`, `stocktwitsUrl`\n\n### Symbol (`recordType: \"symbol\"`)\n\n- `symbol`, `symbolId`, `symbolDisplay`, `symbolMic`, `title`, `exchange`, `region`, `instrumentClass`, `logoUrl`, `watchlistCount`, `hasPricing`, `tradeStatus`, `liveEvent`, `aliases`, `cusip`, `isin`\n- `sector`, `industry`, `rank`, `isTrending`, `trendingScore`, `trendSummary`, `trendSummaryAt`, `trendRanks`, `features`\n- `priceLast`, `priceChange`, `pricePercentChange`, `priceOpen`, `priceHigh`, `priceLow`, `pricePreviousClose`, `priceVolume`, `priceCurrency`, `priceAsOf`, `extendedHoursPrice`, `extendedHoursChange`, `extendedHoursPercentChange`, `combinedPrice`, `combinedChange`, `combinedPercentChange`\n- `marketCap`, `peRatio`, `eps`, `dividendRate`, `beta`, `sharesOutstanding`, `floatShares`, `revenue`, `grossMargin`, `totalCash`, `totalDebt`, `totalAssets`, `totalLiabilities`, `bookValuePerShare`, `priceToBook`, `revenuePerEmployee`, `revenueToAssets`, `avgDailyVolume1M`, `avgDailyVolume3M`, `high52Week`, `low52Week`, `fiftyDayMovingAverage`, `institutionalOwnership`, `earningsGrowth`, `employees`, `businessDescription`, `fiscalPeriodEnd`, `fundamentalsUpdatedAt`. Monetary fundamentals are in USD; share counts are share counts.\n- `relatedSymbols` (when enabled), `matchedQuery` (search), `stocktwitsUrl`\n\n### Trader (`recordType: \"user\"`)\n\n`userId`, `username`, `userDisplayName`, `userAvatarUrl`, `userAvatarUrlOriginal`, `userJoinDate`, `userOfficial`, `userIdentity`, `userClassification`, `userBadges`, `userHomeCountry`, `userFollowers`, `userFollowing`, `userIdeas`, `userWatchlistCount`, `userLikeCount`, `userTradeStatus`, optional `pinnedMessageId`/`pinnedMessageBody`/`pinnedMessageCreatedAt`, `stocktwitsUrl`, and search-only `premium`, `verified`, `companyRepresentative`, `matchedQuery`.\n\n### Sentiment snapshot (`recordType: \"sentiment\"`)\n\nOne row per ticker with a `timeframes` object keyed `15m`, `24h`, `now`, `1D`, `1W`, `1M`, `3M`, `6M`, `1Y`, and `ALL`. Each timeframe carries:\n\n- `sentimentValue`, `sentimentLabel`, `sentimentScore`, `sentimentScoreLabel`, `sentimentChange`\n- `messageVolume`, `messageVolumeLabel`, `messageVolumeScore`, `messageVolumeScoreLabel`, `messageVolumeChange`\n- `participationRatio`, `participationLabel`, `participationScore`, `participationScoreLabel`, `participationChange` where available\n\n### Sentiment history (`recordType: \"sentimentPoint\"`)\n\nOne row per date/time: `symbol`, `dateTime`, `sentimentValue`, `sentimentLabel`, `sentimentScore`, `sentimentScoreLabel`, `messageVolume`, `messageVolumeLabel`, `messageVolumeScore`, `messageVolumeScoreLabel`, `participationRatio`, `participationLabel`, `participationScore`, `participationScoreLabel`.\n\n### Price bar (`recordType: \"priceBar\"`)\n\n`symbol`, `date`, `startTime`, `endTime`, `dateTime`, `open`, `high`, `low`, `close`, `last`, `volume`, `trades`, `vwap`, `twap`, `utcOffset`.\n\n## Input\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `mode` | string (select) | `symbolMessages` | `symbolMessages`, `userMessages`, `trendingSymbols`, `marketMessages`, `symbolSentiment`, `symbolOverview`, `priceHistory`, `search`, `conversation`. Legacy aliases `trendingMessages` and `symbolSearch` are still accepted. |\n| `symbols` | array | `[\"AAPL\"]` | Tickers for symbol modes. Accepts `AAPL`, `$TSLA`, `BTC.X`, `BRK.B`, `SHOP.TSX`, or symbol URLs. |\n| `usernames` | array | – | Traders for `userMessages`, without `@`; profile URLs accepted. |\n| `searchQueries` | array | – | Names or tickers for `search`. |\n| `searchType` | string (select) | `all` | `all`, `symbols`, or `users`. |\n| `streamFilter` | string (select) | `all` | `all` (newest), `top` (ranked), `trending` (curated top 100 per ticker). |\n| `contentFilter` | string (select) | `all` | `all`, `links`, `charts`, `videos`. |\n| `sentimentFilter` | string (select) | `any` | `any`, `bullish`, `bearish`, `tagged`. |\n| `onlyPriceTargets` | boolean | `false` | Keep only messages with a source-reported price prediction. |\n| `feedType` | string (select) | `trending` | `trending`, `suggested`, or `all` (public market-wide chronological stream). |\n| `trendingAssetClass` | string (select) | `all` | `all`, `stocks`, `etf`, `crypto`, `adr`, `commodity`. |\n| `sentimentRange` | string (select) | `now` | `now`, `1D`, `1W`, `1M`, `3M`, `6M`, `1Y`, `5Y`, `ALL`. |\n| `chartZoom` | string (select) | `1M` | `1D`, `1W`, `1M`, `3M`, `6M`, `YTD`, `1Y`, `5Y`, `ALL`. |\n| `includeUserProfile` | boolean | `false` | Add a trader profile record in `userMessages`. |\n| `includeRelatedSymbols` | boolean | `false` | Add related tickers in `symbolOverview`. |\n| `newerThanMessageId` | integer | – | Keep messages newer than this StockTwits message ID. |\n| `olderThanMessageId` | integer | – | Start at or below this message ID and page further back. |\n| `messageIds` | array | – | Message IDs or URLs for `conversation`. |\n| `maxItems` | integer | `30` | Per ticker/trader/query/thread for target modes; total for feeds; max points/bars for history modes. 1–5000. |\n\n### Example: latest tagged sentiment on several tickers\n\n```json\n{\n  \"mode\": \"symbolMessages\",\n  \"symbols\": [\"AAPL\", \"TSLA\", \"NVDA\"],\n  \"streamFilter\": \"all\",\n  \"sentimentFilter\": \"tagged\",\n  \"maxItems\": 50\n}\n```\n\n### Example: daily sentiment history for a watchlist\n\n```json\n{\n  \"mode\": \"symbolSentiment\",\n  \"symbols\": [\"AAPL\", \"MSFT\", \"SPY\", \"BTC.X\"],\n  \"sentimentRange\": \"ALL\",\n  \"maxItems\": 500\n}\n```\n\n### Example: trending crypto with prices and fundamentals\n\n```json\n{\n  \"mode\": \"trendingSymbols\",\n  \"trendingAssetClass\": \"crypto\",\n  \"maxItems\": 74\n}\n```\n\n### Example: quote, fundamentals, and related tickers\n\n```json\n{\n  \"mode\": \"symbolOverview\",\n  \"symbols\": [\"NVDA\", \"AMD\", \"ASML\"],\n  \"includeRelatedSymbols\": true,\n  \"maxItems\": 3\n}\n```\n\n### Example: a trader's posts plus their profile\n\n```json\n{\n  \"mode\": \"userMessages\",\n  \"usernames\": [\"KirRoyalTrader\"],\n  \"includeUserProfile\": true,\n  \"maxItems\": 100\n}\n```\n\n### Example: a message thread\n\n```json\n{\n  \"mode\": \"conversation\",\n  \"messageIds\": [\"https://stocktwits.com/TalkMarkets/message/666869978\"],\n  \"maxItems\": 30\n}\n```\n\n## Use cases\n\n- **Sentiment research** — compare self-tagged Bullish/Bearish posts with StockTwits' aggregate gauge and daily history.\n- **Trading dashboards** — feed message volume, participation, sentiment scores, and trending ranks into a live dashboard.\n- **Scheduled monitoring** — use `newerThanMessageId` to collect only posts published since the last run.\n- **Trend discovery** — scan the full trending list, filter to stocks, ETFs, or crypto, and read StockTwits' why-it-is-trending summaries.\n- **Trader research** — export a public trader's post history, profile stats, and replies for influence analysis.\n- **Quant datasets** — join ticker messages, quotes, fundamentals, and OHLCV bars in one run for model training or backtesting.\n\n## FAQ\n\n**Does this need a StockTwits login or API key?**\nNo. It reads the same public JSON endpoints the StockTwits website uses when you browse logged out. No cookies, API key, or proxy setup is required.\n\n**How far back do messages go?**\nRecent filtered streams use StockTwits' 12-month v2 window. When that walk reaches the boundary, the actor continues through StockTwits' v3 stream API: probes reached 2009 for AAPL and 2022 across 38/38 diverse tickers, with user archives varying by account. `streamFilter=top` stays on the recent ranked window; the archive continuation is chronological. Older v3 rows can omit fields the current source no longer serializes (for example `links` or reply context). Sentiment history goes back to 2018, and price bars go back to 2016 where the ticker has data.\n\n**Why is `sentiment` missing from many messages?**\nTagging a post Bullish or Bearish is optional. Untagged posts simply omit the field. Use `sentimentFilter=tagged`, or use the `symbolSentiment` mode for StockTwits' aggregate gauge, which is not limited to tagged posts.\n\n**What do `sentimentScore` and `sentimentScoreLabel` mean?**\nThey are StockTwits' normalized 0–100 score and label (for example \"Extremely Bearish\"). `sentimentValue` is the underlying raw value, which can be negative. The normalized pair is what the StockTwits website displays. Snapshot mode returns one row per ticker with a `timeframes` object containing all ten timeframes; history mode returns one row per date/time.\n\n**Why are some trending tickers missing prices or fundamentals?**\nStockTwits publishes richer data for equities than for some ETFs and crypto. AI trend summaries are generated by StockTwits only for the top of the trending list, not for every symbol. Fields the source does not provide are omitted rather than filled with placeholder values.\n\n**Does every ticker have price history?**\nMost US, Canadian, ETF, and crypto symbols do. A few valid message-stream symbols — often very thinly traded or foreign listings such as some `.TSX` names — have no chart data; the actor skips them and continues, while `symbolOverview` can still return their quote.\n\n**Can I get more than 30 trending tickers?**\nYes. The trending mode walks StockTwits' enhanced list, which currently returns up to about 573 instruments (about 74 for crypto). `marketMessages` with `feedType=all` reads the public market-wide stream instead. Search is separate and capped by StockTwits at 12 symbol or 15 user results per query.\n\n**Can I collect messages for a specific trader and ticker together?**\nStockTwits' combined user+ticker endpoint requires authentication, so it is not used. You can fetch a trader's posts and filter the `cashtags`/`symbols` fields client-side.\n\n**Why do links to stocktwits.com sometimes fail in scripts?**\nStockTwits protects its website pages with a browser challenge. The links are valid and open normally in a browser; this affects page navigation, not the actor's data.\n\n**Does the actor invent price targets or text sentiment?**\nNo. It returns StockTwits' own source-reported price predictions when an author attached one (`priceTarget*` fields) and never generates targets or model-based text sentiment. Empty fields are omitted rather than returned as `null`.\n\n## Use it as an API (server mode)\n\nNeed one answer right away instead of a batch job? Send the input as an HTTP request and the results come back in the response. There's no run to start and poll.\n\n```bash\ncurl -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  \"https://dataspryva--stocktwits-ticker-sentiment-and-trending-symbol.apify.actor/?mode=symbolMessages&symbols=AAPL&maxItems=3\"\n```\n\nOr POST the same input as JSON:\n\n```bash\ncurl -X POST -H \"Authorization: Bearer $APIFY_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": \"symbolMessages\", \"symbols\": [\"AAPL\"], \"maxItems\": 3}' \\\n  \"https://dataspryva--stocktwits-ticker-sentiment-and-trending-symbol.apify.actor/\"\n```\n\n- The fields are the same as in the input above. With GET, repeat a parameter once for each value in a list.\n- You get back a JSON array with the same records a normal run saves. They're saved to the run's dataset too.\n- Each request is capped at 50 results and 4 minutes. For bigger jobs, start a normal run.\n- The request runs in your own Apify account at the Actor's normal price (a start fee plus a price per result). The server shuts down after a minute with no requests.\n- The Server tab on this page lists every parameter and lets you try a request from your browser.\n",
      "input": {
        "title": "StockTwits Scraper Input",
        "description": "Scrape StockTwits messages, aggregate sentiment and its history, trending tickers, quotes, fundamentals, price bars, profiles, search, and reply threads.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch from StockTwits.",
            "editor": "select",
            "enum": [
              "symbolMessages",
              "userMessages",
              "trendingSymbols",
              "marketMessages",
              "symbolSentiment",
              "symbolOverview",
              "priceHistory",
              "search",
              "conversation",
              "trendingMessages",
              "symbolSearch"
            ],
            "enumTitles": [
              "Ticker messages",
              "Trader posts",
              "Trending tickers",
              "Market-wide posts",
              "Ticker sentiment (now or history)",
              "Ticker quote & fundamentals",
              "Price history (OHLCV)",
              "Search tickers & traders",
              "Message thread & replies",
              "Market-wide trending posts (legacy alias)",
              "Search tickers (legacy alias)"
            ],
            "default": "symbolMessages",
            "prefill": "symbolMessages"
          },
          "symbols": {
            "title": "Tickers (mode=symbolMessages / symbolSentiment / symbolOverview / priceHistory)",
            "type": "array",
            "description": "Tickers to fetch, e.g. AAPL, TSLA, BTC.X, BRK.B, SHOP.TSX. Accepts $cashtags and StockTwits symbol URLs. Use .X for crypto.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [
              "AAPL"
            ],
            "prefill": [
              "AAPL"
            ]
          },
          "usernames": {
            "title": "Usernames (mode=userMessages)",
            "type": "array",
            "description": "StockTwits usernames without @, or profile URLs, e.g. KirRoyalTrader, https://stocktwits.com/Fibonaccino.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searchQueries": {
            "title": "Search queries (mode=search)",
            "type": "array",
            "description": "Company names, tickers, or trader names to search for, e.g. tesla, apple, TraderLion.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searchType": {
            "title": "Search type (mode=search)",
            "type": "string",
            "description": "What to return from each query.",
            "editor": "select",
            "enum": [
              "all",
              "symbols",
              "users"
            ],
            "enumTitles": [
              "Everything (tickers + traders)",
              "Tickers only",
              "Traders only"
            ],
            "default": "all"
          },
          "streamFilter": {
            "title": "Message sort (mode=symbolMessages)",
            "type": "string",
            "description": "All = newest first, Top = StockTwits ranking, Trending = curated high-engagement posts for the ticker (up to 100).",
            "editor": "select",
            "enum": [
              "all",
              "top",
              "trending"
            ],
            "enumTitles": [
              "All (newest first)",
              "Top (ranked stream)",
              "Trending (curated top 100)"
            ],
            "default": "all",
            "prefill": "all"
          },
          "contentFilter": {
            "title": "Content filter (message modes)",
            "type": "string",
            "description": "Keep only messages with this attachment. Videos are rare; All keeps every message.",
            "editor": "select",
            "enum": [
              "all",
              "links",
              "charts",
              "videos"
            ],
            "enumTitles": [
              "All messages",
              "With links",
              "With charts",
              "With videos"
            ],
            "default": "all",
            "prefill": "all"
          },
          "sentimentFilter": {
            "title": "Sentiment filter (message modes)",
            "type": "string",
            "description": "Keep posts by the author's self-tagged sentiment. Most posts are untagged; Any keeps all.",
            "editor": "select",
            "enum": [
              "any",
              "bullish",
              "bearish",
              "tagged"
            ],
            "enumTitles": [
              "Any (no filter)",
              "Bullish only",
              "Bearish only",
              "Any tagged sentiment"
            ],
            "default": "any",
            "prefill": "any"
          },
          "onlyPriceTargets": {
            "title": "Only price predictions (message modes)",
            "type": "boolean",
            "description": "Keep only messages where the author attached a StockTwits price prediction (price target).",
            "default": false,
            "prefill": false
          },
          "feedType": {
            "title": "Market feed (mode=marketMessages)",
            "type": "string",
            "description": "Trending = market-wide trending posts; Suggested = posts from StockTwits' curated suggested traders; All = public market-wide firehose (deep, chronological).",
            "editor": "select",
            "enum": [
              "trending",
              "suggested",
              "all"
            ],
            "enumTitles": [
              "Trending posts",
              "Suggested trader posts",
              "All public posts (market-wide, v3)"
            ],
            "default": "trending"
          },
          "trendingAssetClass": {
            "title": "Asset class (mode=trendingSymbols)",
            "type": "string",
            "description": "Which trending instruments to keep. All includes stocks, ETFs, crypto, ADRs, commodities, and other classes.",
            "editor": "select",
            "enum": [
              "all",
              "stocks",
              "etf",
              "crypto",
              "adr",
              "commodity"
            ],
            "enumTitles": [
              "All asset classes",
              "Stocks",
              "ETFs",
              "Crypto",
              "ADRs",
              "Commodities"
            ],
            "default": "all"
          },
          "sentimentRange": {
            "title": "Sentiment range (mode=symbolSentiment)",
            "type": "string",
            "description": "Now = current sentiment across 15m, 24h, now, 1D–ALL. Other values return the daily/intraday history for that window.",
            "editor": "select",
            "enum": [
              "now",
              "1D",
              "1W",
              "1M",
              "3M",
              "6M",
              "1Y",
              "5Y",
              "ALL"
            ],
            "enumTitles": [
              "Current snapshot (10 timeframes)",
              "1 day history",
              "1 week history",
              "1 month history",
              "3 month history",
              "6 month history",
              "1 year history",
              "5 year history",
              "All history (2018+)"
            ],
            "default": "now"
          },
          "chartZoom": {
            "title": "Price history window (mode=priceHistory)",
            "type": "string",
            "description": "Intraday windows use 5-minute (1D) or 30-minute (1W) bars; other windows use daily/weekly bars.",
            "editor": "select",
            "enum": [
              "1D",
              "1W",
              "1M",
              "3M",
              "6M",
              "YTD",
              "1Y",
              "5Y",
              "ALL"
            ],
            "enumTitles": [
              "1 day",
              "1 week",
              "1 month",
              "3 months",
              "6 months",
              "Year to date",
              "1 year",
              "5 years",
              "All (2016+)"
            ],
            "default": "1M"
          },
          "includeUserProfile": {
            "title": "Include trader profile (mode=userMessages)",
            "type": "boolean",
            "description": "Add one profile record per username before that trader's posts.",
            "default": false,
            "prefill": false
          },
          "includeRelatedSymbols": {
            "title": "Include related tickers (mode=symbolOverview)",
            "type": "boolean",
            "description": "Add StockTwits' related-industry tickers to each symbol record.",
            "default": false,
            "prefill": false
          },
          "newerThanMessageId": {
            "title": "Newer than message ID (message modes)",
            "type": "integer",
            "description": "Only keep messages with an ID greater than this. Useful for incremental scheduled runs.",
            "minimum": 0
          },
          "olderThanMessageId": {
            "title": "Older than message ID (message modes)",
            "type": "integer",
            "description": "Start from messages at or below this ID and page further back.",
            "minimum": 0
          },
          "messageIds": {
            "title": "Message IDs (mode=conversation)",
            "type": "array",
            "description": "Message IDs or StockTwits message URLs whose parent + reply thread should be fetched.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxItems": {
            "title": "Max records",
            "type": "integer",
            "description": "Per ticker/username/query/thread for target modes; total for trending and market feeds; max points or bars for history modes.",
            "minimum": 1,
            "maximum": 5000,
            "default": 30,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "StockTwits Ticker Sentiment & Trending Symbol Feed Output",
        "description": "StockTwits messages, trader profiles, ticker sentiment snapshots and history, trending symbols with prices and fundamentals, quotes, OHLCV bars, search results, and reply threads.",
        "properties": {
          "records": {
            "type": "string",
            "title": "StockTwits records",
            "description": "Dataset containing all scraped StockTwits records, keyed by recordType.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "StockTwits records",
              "transformation": {
                "fields": [
                  "recordType",
                  "symbol",
                  "title",
                  "sentiment",
                  "sentimentScore",
                  "priceLast",
                  "pricePercentChange",
                  "body",
                  "username",
                  "rank",
                  "createdAt",
                  "stocktwitsUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "webServerSchema": {
        "openapi": "3.0.3",
        "info": {
          "title": "StockTwits Ticker Sentiment & Trending Symbol Feed (server mode)",
          "version": "1.1",
          "description": "Send one lookup and get the results back in the response. It takes the same input as a normal run: query parameters with GET, or a JSON body with POST. At most 50 results and 240 seconds per request; start a normal run for bigger jobs. Requests run in your own Apify account at the Actor's normal price.",
          "x-oa-server-mode": "1.1"
        },
        "paths": {
          "/": {
            "get": {
              "operationId": "lookupGet",
              "summary": "Run one lookup (query parameters)",
              "parameters": [
                {
                  "name": "mode",
                  "in": "query",
                  "required": true,
                  "description": "What to fetch from StockTwits.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "symbolMessages",
                      "userMessages",
                      "trendingSymbols",
                      "marketMessages",
                      "symbolSentiment",
                      "symbolOverview",
                      "priceHistory",
                      "search",
                      "conversation",
                      "trendingMessages",
                      "symbolSearch"
                    ],
                    "default": "symbolMessages"
                  },
                  "example": "symbolMessages"
                },
                {
                  "name": "symbols",
                  "in": "query",
                  "required": false,
                  "description": "Tickers to fetch, e.g. AAPL, TSLA, BTC.X, BRK.B, SHOP.TSX. Accepts $cashtags and StockTwits symbol URLs. Use .X for crypto. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "default": [
                      "AAPL"
                    ],
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 5
                  },
                  "style": "form",
                  "explode": true,
                  "example": [
                    "AAPL"
                  ]
                },
                {
                  "name": "usernames",
                  "in": "query",
                  "required": false,
                  "description": "StockTwits usernames without @, or profile URLs, e.g. KirRoyalTrader, https://stocktwits.com/Fibonaccino. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 5
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "searchQueries",
                  "in": "query",
                  "required": false,
                  "description": "Company names, tickers, or trader names to search for, e.g. tesla, apple, TraderLion. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 3
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "searchType",
                  "in": "query",
                  "required": false,
                  "description": "What to return from each query.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "all",
                      "symbols",
                      "users"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "streamFilter",
                  "in": "query",
                  "required": false,
                  "description": "All = newest first, Top = StockTwits ranking, Trending = curated high-engagement posts for the ticker (up to 100).",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "all",
                      "top",
                      "trending"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "contentFilter",
                  "in": "query",
                  "required": false,
                  "description": "Keep only messages with this attachment. Videos are rare; All keeps every message.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "all",
                      "links",
                      "charts",
                      "videos"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "sentimentFilter",
                  "in": "query",
                  "required": false,
                  "description": "Keep posts by the author's self-tagged sentiment. Most posts are untagged; Any keeps all.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "any",
                      "bullish",
                      "bearish",
                      "tagged"
                    ],
                    "default": "any"
                  }
                },
                {
                  "name": "onlyPriceTargets",
                  "in": "query",
                  "required": false,
                  "description": "Keep only messages where the author attached a StockTwits price prediction (price target).",
                  "schema": {
                    "type": "boolean",
                    "default": false
                  }
                },
                {
                  "name": "feedType",
                  "in": "query",
                  "required": false,
                  "description": "Trending = market-wide trending posts; Suggested = posts from StockTwits' curated suggested traders; All = public market-wide firehose (deep, chronological).",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "trending",
                      "suggested",
                      "all"
                    ],
                    "default": "trending"
                  }
                },
                {
                  "name": "trendingAssetClass",
                  "in": "query",
                  "required": false,
                  "description": "Which trending instruments to keep. All includes stocks, ETFs, crypto, ADRs, commodities, and other classes.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "all",
                      "stocks",
                      "etf",
                      "crypto",
                      "adr",
                      "commodity"
                    ],
                    "default": "all"
                  }
                },
                {
                  "name": "sentimentRange",
                  "in": "query",
                  "required": false,
                  "description": "Now = current sentiment across 15m, 24h, now, 1D–ALL. Other values return the daily/intraday history for that window.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "now",
                      "1D",
                      "1W",
                      "1M",
                      "3M",
                      "6M",
                      "1Y",
                      "5Y",
                      "ALL"
                    ],
                    "default": "now"
                  }
                },
                {
                  "name": "chartZoom",
                  "in": "query",
                  "required": false,
                  "description": "Intraday windows use 5-minute (1D) or 30-minute (1W) bars; other windows use daily/weekly bars.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "1D",
                      "1W",
                      "1M",
                      "3M",
                      "6M",
                      "YTD",
                      "1Y",
                      "5Y",
                      "ALL"
                    ],
                    "default": "1M"
                  }
                },
                {
                  "name": "includeUserProfile",
                  "in": "query",
                  "required": false,
                  "description": "Add one profile record per username before that trader's posts.",
                  "schema": {
                    "type": "boolean",
                    "default": false
                  }
                },
                {
                  "name": "includeRelatedSymbols",
                  "in": "query",
                  "required": false,
                  "description": "Add StockTwits' related-industry tickers to each symbol record.",
                  "schema": {
                    "type": "boolean",
                    "default": false
                  }
                },
                {
                  "name": "newerThanMessageId",
                  "in": "query",
                  "required": false,
                  "description": "Only keep messages with an ID greater than this. Useful for incremental scheduled runs.",
                  "schema": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                {
                  "name": "olderThanMessageId",
                  "in": "query",
                  "required": false,
                  "description": "Start from messages at or below this ID and page further back.",
                  "schema": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                {
                  "name": "messageIds",
                  "in": "query",
                  "required": false,
                  "description": "Message IDs or StockTwits message URLs whose parent + reply thread should be fetched. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "default": [],
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 20
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "maxItems",
                  "in": "query",
                  "required": false,
                  "description": "Per ticker/username/query/thread for target modes; total for trending and market feeds; max points or bars for history modes.",
                  "schema": {
                    "type": "integer",
                    "default": 30,
                    "minimum": 1,
                    "maximum": 50
                  },
                  "example": 3
                }
              ],
              "responses": {
                "200": {
                  "description": "The results as a JSON array (at most 50). They are also saved to the run's dataset and billed per result, like a normal run.",
                  "headers": {
                    "X-Item-Count": {
                      "schema": {
                        "type": "integer"
                      },
                      "description": "Results returned."
                    },
                    "X-Status-Message": {
                      "schema": {
                        "type": "string"
                      },
                      "description": "The Actor's last status message, e.g. why nothing was found."
                    }
                  },
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/Item"
                        }
                      },
                      "example": [
                        {
                          "messageId": 668680983,
                          "body": "$AAPL Update | 10:30 AM ET \n \nThe 10:25 candle is showing early signs of a potential reversal. \n \nHigher low: $346.80 \nHigher high: $347.33 \nVolume: +6.1% vs...",
                          "createdAt": "2026-11-10T15:33:18Z",
                          "isDiscussion": false,
                          "prices": [
                            {
                              "symbol": "AAPL",
                              "price": 347.24
                            }
                          ],
                          "symbols": [
                            "AAPL"
                          ],
                          "symbol": "AAPL",
                          "cashtags": [
                            {
                              "symbol": "AAPL",
                              "title": "Apple Inc",
                              "exchange": "NASDAQ",
                              "instrumentClass": "Stock",
                              "watchlistCount": 1000981,
                              "price": 347.24,
                              "sentimentChange": 0.32,
                              "volumeChange": -49.41
                            }
                          ],
                          "priceAtPost": 347.24,
                          "userId": 4521122,
                          "username": "Invescent",
                          "userDisplayName": "Invescent",
                          "userFollowers": 486,
                          "userFollowing": 1,
                          "userIdeas": 59823,
                          "userJoinDate": "2021-01-05",
                          "userOfficial": false,
                          "userIdentity": "User",
                          "userClassification": [
                            "plus"
                          ],
                          "userHomeCountry": "US",
                          "userLikeCount": 51,
                          "userWatchlistCount": 72,
                          "userTradeStatus": "PENDING_MFA",
                          "userAvatarUrl": "https://avatars.stocktwits-cdn.com/production/4521122/thumb-1609914640.png",
                          "userAvatarUrlOriginal": "https://avatars.stocktwits.com/production/4521122/thumb-1609914640.png",
                          "stocktwitsUserUrl": "https://stocktwits.com/Invescent",
                          "isReshare": true,
                          "source": "StockTwits Web",
                          "sourceUrl": "https://stocktwits.com",
                          "stocktwitsUrl": "https://stocktwits.com/Invescent/message/668680983",
                          "recordType": "message",
                          "scrapedAt": "2026-11-10T15:34:24.320107+00:00"
                        }
                      ]
                    }
                  }
                },
                "400": {
                  "description": "Invalid, missing or unknown input fields. Nothing ran.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      },
                      "example": {
                        "error": "invalid_input",
                        "errorDescription": "mode: required"
                      }
                    }
                  }
                },
                "422": {
                  "description": "The Actor could not complete this request (for example, nothing matches). No results were delivered.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "500": {
                  "description": "Unexpected failure. Safe to retry.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "504": {
                  "description": "The request used up its 240 s budget. The results found so far are in partialItems.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Error"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "partialItems": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Item"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            },
            "post": {
              "operationId": "lookupPost",
              "summary": "Run one lookup (JSON body)",
              "requestBody": {
                "required": true,
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "enum": [
                            "symbolMessages",
                            "userMessages",
                            "trendingSymbols",
                            "marketMessages",
                            "symbolSentiment",
                            "symbolOverview",
                            "priceHistory",
                            "search",
                            "conversation",
                            "trendingMessages",
                            "symbolSearch"
                          ],
                          "default": "symbolMessages",
                          "description": "What to fetch from StockTwits."
                        },
                        "symbols": {
                          "type": "array",
                          "default": [
                            "AAPL"
                          ],
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 5,
                          "description": "Tickers to fetch, e.g. AAPL, TSLA, BTC.X, BRK.B, SHOP.TSX. Accepts $cashtags and StockTwits symbol URLs. Use .X for crypto."
                        },
                        "usernames": {
                          "type": "array",
                          "default": [],
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 5,
                          "description": "StockTwits usernames without @, or profile URLs, e.g. KirRoyalTrader, https://stocktwits.com/Fibonaccino."
                        },
                        "searchQueries": {
                          "type": "array",
                          "default": [],
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 3,
                          "description": "Company names, tickers, or trader names to search for, e.g. tesla, apple, TraderLion."
                        },
                        "searchType": {
                          "type": "string",
                          "enum": [
                            "all",
                            "symbols",
                            "users"
                          ],
                          "default": "all",
                          "description": "What to return from each query."
                        },
                        "streamFilter": {
                          "type": "string",
                          "enum": [
                            "all",
                            "top",
                            "trending"
                          ],
                          "default": "all",
                          "description": "All = newest first, Top = StockTwits ranking, Trending = curated high-engagement posts for the ticker (up to 100)."
                        },
                        "contentFilter": {
                          "type": "string",
                          "enum": [
                            "all",
                            "links",
                            "charts",
                            "videos"
                          ],
                          "default": "all",
                          "description": "Keep only messages with this attachment. Videos are rare; All keeps every message."
                        },
                        "sentimentFilter": {
                          "type": "string",
                          "enum": [
                            "any",
                            "bullish",
                            "bearish",
                            "tagged"
                          ],
                          "default": "any",
                          "description": "Keep posts by the author's self-tagged sentiment. Most posts are untagged; Any keeps all."
                        },
                        "onlyPriceTargets": {
                          "type": "boolean",
                          "default": false,
                          "description": "Keep only messages where the author attached a StockTwits price prediction (price target)."
                        },
                        "feedType": {
                          "type": "string",
                          "enum": [
                            "trending",
                            "suggested",
                            "all"
                          ],
                          "default": "trending",
                          "description": "Trending = market-wide trending posts; Suggested = posts from StockTwits' curated suggested traders; All = public market-wide firehose (deep, chronological)."
                        },
                        "trendingAssetClass": {
                          "type": "string",
                          "enum": [
                            "all",
                            "stocks",
                            "etf",
                            "crypto",
                            "adr",
                            "commodity"
                          ],
                          "default": "all",
                          "description": "Which trending instruments to keep. All includes stocks, ETFs, crypto, ADRs, commodities, and other classes."
                        },
                        "sentimentRange": {
                          "type": "string",
                          "enum": [
                            "now",
                            "1D",
                            "1W",
                            "1M",
                            "3M",
                            "6M",
                            "1Y",
                            "5Y",
                            "ALL"
                          ],
                          "default": "now",
                          "description": "Now = current sentiment across 15m, 24h, now, 1D–ALL. Other values return the daily/intraday history for that window."
                        },
                        "chartZoom": {
                          "type": "string",
                          "enum": [
                            "1D",
                            "1W",
                            "1M",
                            "3M",
                            "6M",
                            "YTD",
                            "1Y",
                            "5Y",
                            "ALL"
                          ],
                          "default": "1M",
                          "description": "Intraday windows use 5-minute (1D) or 30-minute (1W) bars; other windows use daily/weekly bars."
                        },
                        "includeUserProfile": {
                          "type": "boolean",
                          "default": false,
                          "description": "Add one profile record per username before that trader's posts."
                        },
                        "includeRelatedSymbols": {
                          "type": "boolean",
                          "default": false,
                          "description": "Add StockTwits' related-industry tickers to each symbol record."
                        },
                        "newerThanMessageId": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Only keep messages with an ID greater than this. Useful for incremental scheduled runs."
                        },
                        "olderThanMessageId": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Start from messages at or below this ID and page further back."
                        },
                        "messageIds": {
                          "type": "array",
                          "default": [],
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 20,
                          "description": "Message IDs or StockTwits message URLs whose parent + reply thread should be fetched."
                        },
                        "maxItems": {
                          "type": "integer",
                          "default": 30,
                          "minimum": 1,
                          "maximum": 50,
                          "description": "Per ticker/username/query/thread for target modes; total for trending and market feeds; max points or bars for history modes."
                        }
                      },
                      "additionalProperties": false,
                      "required": [
                        "mode"
                      ]
                    },
                    "example": {
                      "mode": "symbolMessages",
                      "symbols": [
                        "AAPL"
                      ],
                      "maxItems": 3
                    }
                  }
                }
              },
              "responses": {
                "200": {
                  "description": "The results as a JSON array (at most 50). They are also saved to the run's dataset and billed per result, like a normal run.",
                  "headers": {
                    "X-Item-Count": {
                      "schema": {
                        "type": "integer"
                      },
                      "description": "Results returned."
                    },
                    "X-Status-Message": {
                      "schema": {
                        "type": "string"
                      },
                      "description": "The Actor's last status message, e.g. why nothing was found."
                    }
                  },
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/Item"
                        }
                      },
                      "example": [
                        {
                          "messageId": 668680983,
                          "body": "$AAPL Update | 10:30 AM ET \n \nThe 10:25 candle is showing early signs of a potential reversal. \n \nHigher low: $346.80 \nHigher high: $347.33 \nVolume: +6.1% vs...",
                          "createdAt": "2026-11-10T15:33:18Z",
                          "isDiscussion": false,
                          "prices": [
                            {
                              "symbol": "AAPL",
                              "price": 347.24
                            }
                          ],
                          "symbols": [
                            "AAPL"
                          ],
                          "symbol": "AAPL",
                          "cashtags": [
                            {
                              "symbol": "AAPL",
                              "title": "Apple Inc",
                              "exchange": "NASDAQ",
                              "instrumentClass": "Stock",
                              "watchlistCount": 1000981,
                              "price": 347.24,
                              "sentimentChange": 0.32,
                              "volumeChange": -49.41
                            }
                          ],
                          "priceAtPost": 347.24,
                          "userId": 4521122,
                          "username": "Invescent",
                          "userDisplayName": "Invescent",
                          "userFollowers": 486,
                          "userFollowing": 1,
                          "userIdeas": 59823,
                          "userJoinDate": "2021-01-05",
                          "userOfficial": false,
                          "userIdentity": "User",
                          "userClassification": [
                            "plus"
                          ],
                          "userHomeCountry": "US",
                          "userLikeCount": 51,
                          "userWatchlistCount": 72,
                          "userTradeStatus": "PENDING_MFA",
                          "userAvatarUrl": "https://avatars.stocktwits-cdn.com/production/4521122/thumb-1609914640.png",
                          "userAvatarUrlOriginal": "https://avatars.stocktwits.com/production/4521122/thumb-1609914640.png",
                          "stocktwitsUserUrl": "https://stocktwits.com/Invescent",
                          "isReshare": true,
                          "source": "StockTwits Web",
                          "sourceUrl": "https://stocktwits.com",
                          "stocktwitsUrl": "https://stocktwits.com/Invescent/message/668680983",
                          "recordType": "message",
                          "scrapedAt": "2026-11-10T15:34:24.320107+00:00"
                        }
                      ]
                    }
                  }
                },
                "400": {
                  "description": "Invalid, missing or unknown input fields. Nothing ran.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      },
                      "example": {
                        "error": "invalid_input",
                        "errorDescription": "mode: required"
                      }
                    }
                  }
                },
                "422": {
                  "description": "The Actor could not complete this request (for example, nothing matches). No results were delivered.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "500": {
                  "description": "Unexpected failure. Safe to retry.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "504": {
                  "description": "The request used up its 240 s budget. The results found so far are in partialItems.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Error"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "partialItems": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Item"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "components": {
          "schemas": {
            "Item": {
              "type": "object",
              "description": "One result, the same record a normal run saves to its dataset.",
              "properties": {
                "messageId": {
                  "type": "integer"
                },
                "body": {
                  "type": "string"
                },
                "createdAt": {
                  "type": "string"
                },
                "isDiscussion": {
                  "type": "boolean"
                },
                "prices": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                "symbols": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "symbol": {
                  "type": "string"
                },
                "cashtags": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                "priceAtPost": {
                  "type": "number"
                },
                "userId": {
                  "type": "integer"
                },
                "username": {
                  "type": "string"
                },
                "userDisplayName": {
                  "type": "string"
                },
                "userFollowers": {
                  "type": "integer"
                },
                "userFollowing": {
                  "type": "integer"
                },
                "userIdeas": {
                  "type": "integer"
                },
                "userJoinDate": {
                  "type": "string"
                },
                "userOfficial": {
                  "type": "boolean"
                },
                "userIdentity": {
                  "type": "string"
                },
                "userClassification": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "userHomeCountry": {
                  "type": "string"
                },
                "userLikeCount": {
                  "type": "integer"
                },
                "userWatchlistCount": {
                  "type": "integer"
                },
                "userTradeStatus": {
                  "type": "string"
                },
                "userAvatarUrl": {
                  "type": "string"
                },
                "userAvatarUrlOriginal": {
                  "type": "string"
                },
                "stocktwitsUserUrl": {
                  "type": "string"
                },
                "isReshare": {
                  "type": "boolean"
                },
                "source": {
                  "type": "string"
                },
                "sourceUrl": {
                  "type": "string"
                },
                "stocktwitsUrl": {
                  "type": "string"
                },
                "recordType": {
                  "type": "string"
                },
                "scrapedAt": {
                  "type": "string"
                }
              },
              "example": {
                "messageId": 668680983,
                "body": "$AAPL Update | 10:30 AM ET \n \nThe 10:25 candle is showing early signs of a potential reversal. \n \nHigher low: $346.80 \nHigher high: $347.33 \nVolume: +6.1% vs...",
                "createdAt": "2026-11-10T15:33:18Z",
                "isDiscussion": false,
                "prices": [
                  {
                    "symbol": "AAPL",
                    "price": 347.24
                  }
                ],
                "symbols": [
                  "AAPL"
                ],
                "symbol": "AAPL",
                "cashtags": [
                  {
                    "symbol": "AAPL",
                    "title": "Apple Inc",
                    "exchange": "NASDAQ",
                    "instrumentClass": "Stock",
                    "watchlistCount": 1000981,
                    "price": 347.24,
                    "sentimentChange": 0.32,
                    "volumeChange": -49.41
                  }
                ],
                "priceAtPost": 347.24,
                "userId": 4521122,
                "username": "Invescent",
                "userDisplayName": "Invescent",
                "userFollowers": 486,
                "userFollowing": 1,
                "userIdeas": 59823,
                "userJoinDate": "2021-01-05",
                "userOfficial": false,
                "userIdentity": "User",
                "userClassification": [
                  "plus"
                ],
                "userHomeCountry": "US",
                "userLikeCount": 51,
                "userWatchlistCount": 72,
                "userTradeStatus": "PENDING_MFA",
                "userAvatarUrl": "https://avatars.stocktwits-cdn.com/production/4521122/thumb-1609914640.png",
                "userAvatarUrlOriginal": "https://avatars.stocktwits.com/production/4521122/thumb-1609914640.png",
                "stocktwitsUserUrl": "https://stocktwits.com/Invescent",
                "isReshare": true,
                "source": "StockTwits Web",
                "sourceUrl": "https://stocktwits.com",
                "stocktwitsUrl": "https://stocktwits.com/Invescent/message/668680983",
                "recordType": "message",
                "scrapedAt": "2026-11-10T15:34:24.320107+00:00"
              }
            },
            "Error": {
              "type": "object",
              "required": [
                "error",
                "errorDescription"
              ],
              "properties": {
                "error": {
                  "type": "string",
                  "enum": [
                    "invalid_input",
                    "request_failed",
                    "internal_error",
                    "timeout",
                    "busy",
                    "not_found",
                    "method_not_allowed",
                    "payload_too_large"
                  ]
                },
                "errorDescription": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.3",
    "imageDigest": "d23ceb3c5c8500ddd8b9c58a5e7e8bcadb2ae3658b2d7275622d7ac80c568321",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.012257777777777777
    }
  }
}