Workflow

Daily Reddit Trading Signal Scan

Daily automated scan of Reddit trading subreddits for ticker mentions and sentiment signals. Detect momentum before mainstream news.

Overview

This pipeline scans Reddit trading communities daily, extracts ticker mentions from post titles and comments, and cross-references with Google News to validate signals. The workflow produces a morning briefing with tickers showing unusual Reddit activity alongside any confirming news headlines. Designed for traders who want Reddit-sourced alpha without manually scrolling trading subreddits.

Trigger

Cron schedule (daily at 7:00 AM EST)

Schedule

Runs daily at 7:00 AM EST

Workflow Steps

1

Scan Reddit trading subreddits

Query Scavio Reddit for recent posts from WSB, r/stocks, r/options, and r/investing.

2

Extract and count ticker mentions

Parse ticker symbols from post titles and snippets, filtering noise words.

3

Cross-reference with Google News

For top-mentioned tickers, query Scavio Google for confirming or contradicting news.

4

Generate morning briefing

Compile a ranked ticker list with Reddit mention counts and news confirmation status.

Python Implementation

Python
import requests
import json
import re
from collections import Counter
from datetime import datetime
from pathlib import Path

API_KEY = "your_scavio_api_key"
TICKER_RE = re.compile(r"\b[A-Z]{2,5}\b")
SKIP = {"THE","AND","FOR","ARE","BUT","NOT","YOU","ALL","CAN","HAS","WSB","IMO","YOLO","FOMO","HODL","TBH"}

def scan_reddit(queries: list[str]) -> list[dict]:
    posts = []
    for q in queries:
        res = requests.post(
            "https://api.scavio.dev/api/v1/search",
            headers={"x-api-key": API_KEY},
            json={"platform": "reddit", "query": q},
            timeout=15,
        )
        res.raise_for_status()
        posts.extend(res.json().get("organic", []))
    return posts

def cross_reference_news(ticker: str) -> dict:
    res = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY},
        json={"platform": "google", "query": f"{ticker} stock news today"},
        timeout=15,
    )
    res.raise_for_status()
    headlines = [r.get("title", "") for r in res.json().get("organic", [])[:3]]
    return {"ticker": ticker, "news_headlines": headlines, "has_news": len(headlines) > 0}

def run():
    date = datetime.utcnow().strftime("%Y-%m-%d")
    posts = scan_reddit(["wallstreetbets today", "stocks picks today", "options plays this week"])

    counts = Counter()
    for p in posts:
        text = f"{p.get('title', '')} {p.get('snippet', '')}"
        for t in TICKER_RE.findall(text):
            if t not in SKIP:
                counts[t] += 1

    top = counts.most_common(10)
    briefing = {"date": date, "posts_scanned": len(posts), "signals": []}
    for ticker, mentions in top:
        news = cross_reference_news(ticker)
        briefing["signals"].append({"ticker": ticker, "reddit_mentions": mentions, **news})

    Path(f"trading_scan_{date}.json").write_text(json.dumps(briefing, indent=2))
    for s in briefing["signals"][:5]:
        news_str = s["news_headlines"][0][:60] if s["news_headlines"] else "no confirming news"
        print(f"  ${s['ticker']}: {s['reddit_mentions']} mentions | {news_str}")

if __name__ == "__main__":
    run()

JavaScript Implementation

JavaScript
const API_KEY = "your_scavio_api_key";
const SKIP = new Set(["THE","AND","FOR","ARE","BUT","NOT","YOU","ALL","WSB","YOLO","FOMO"]);

async function scanReddit(queries) {
  const posts = [];
  for (const q of queries) {
    const res = await fetch("https://api.scavio.dev/api/v1/search", {
      method: "POST", headers: { "x-api-key": API_KEY, "content-type": "application/json" },
      body: JSON.stringify({ platform: "reddit", query: q }),
    });
    posts.push(...((await res.json()).organic ?? []));
  }
  return posts;
}

const posts = await scanReddit(["wallstreetbets today", "stocks picks today"]);
const counts = {};
for (const p of posts) {
  for (const m of `${p.title ?? ""} ${p.snippet ?? ""}`.matchAll(/\b[A-Z]{2,5}\b/g)) {
    if (!SKIP.has(m[0])) counts[m[0]] = (counts[m[0]] ?? 0) + 1;
  }
}
Object.entries(counts).sort((a, b) => b[1] - a[1]).slice(0, 5).forEach(([t, c]) => console.log(`$${t}: ${c} mentions`));

Platforms Used

Reddit

Community, posts & threaded comments from any subreddit

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

This pipeline scans Reddit trading communities daily, extracts ticker mentions from post titles and comments, and cross-references with Google News to validate signals. The workflow produces a morning briefing with tickers showing unusual Reddit activity alongside any confirming news headlines. Designed for traders who want Reddit-sourced alpha without manually scrolling trading subreddits.

This workflow uses a cron schedule (daily at 7:00 am est). Runs daily at 7:00 AM EST.

This workflow uses the following Scavio platforms: reddit, google. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 250 credits per month with no credit card required. That is enough to test and validate this workflow before scaling it.

Daily Reddit Trading Signal Scan

Daily automated scan of Reddit trading subreddits for ticker mentions and sentiment signals. Detect momentum before mainstream news.