Pull the message and sentiment stream from Stocktwits for stock and crypto ticker symbols. Each row carries Stocktwits' own user-applied Bullish/Bearish sentiment tag plus message text, author, and engagement counts. Keyless target, bounded per-symbol pagination.
Real implementation (T03-T09): client.py (curl-cffi transport,
retry/backoff, Retry-After honouring, chrome131/firefox133
impersonation rotation per attempt — REQ-4/REQ-9), parser.py (pure
JSON->row mapping, field paths confirmed against a live-captured
streams/symbol/AAPL.json payload — REQ-2/REQ-7), scraper.py
(per-symbol pagination, FirstFetchFailedError for fail-loud-only-
on-first-fetch — REQ-1/REQ-3/REQ-5/REQ-6), main.py (real Apify SDK
wiring replacing the scaffold stub — validate-before-charge, batched
push_data + PPE charging, proxy session_id rotation).
58 unit tests across test_models.py/test_client.py/test_parser.py/
test_scraper.py/test_main.py; local apify run smoke test verified
against tests/fixtures/input.qa.json.
README price banner corrected to $3.20 / 1 000 (folded-in
actor-start + 1 000 x message-scraped, matching
scripts/verify_readme_price.py's convention).
0.1.0 — 2026-09-10
Initial scaffolded release (T01/T02). .actor/ config (input schema,
dataset schema, output schema, PPE events, actor.json) finalized to
match docs/specs/stocktwits-sentiment-scraper/spec.md and
design.md. src/models.py carries the real ActorInput/ResultRow
shapes; src/main.py is a scaffold stub only — see
docs/specs/stocktwits-sentiment-scraper/tasks.md T03-T09 for the
real Stocktwits fetch/paginate/sentiment-map implementation plan.