Pulse hunts small and niche companies that are quietly dominating, before everyone knows the name.
Not "MU has crazy revenue." The point is finding the next one while it's $500M, not $500B.
hunt Yahoo screen: every US-listed stock over $50M with quarterly revenue +25% (~860 names).
Each run researches the 40 best pre-ranked (trend, extension, size, improving EPS), plus a
35-name slice walking the rest alphabetically, so the whole screen gets looked at about once a day.
Any screen name scoring 62+ is kept in every run until it fades.
heat names hot in news (Massive, Yahoo), Reddit/X cashtags (scraper.py), small-cap gainers
→ top 50 researched, at most 8 of them megacaps (> $500B) so hype can't crowd out the gems
gate hard rejects: OTC, < $1, < $1M/day traded, < $10M revenue, shares +30%/yr, reverse split
(18m), < 4 quarters of cash, pump pattern (+80%/5d on 5x volume with thin fundamentals),
SEC delisting notice / late filing
score 6 pillars on fixed 0–100 scales → composite − 7 per red flag → BUY / WATCH / AVOID
read news + social tone (VADER), IWM/SPY/QQQ/VIX backdrop, sector heat, written summary
| Pillar | Weight | What it rewards |
|---|---|---|
| Growth | 25% | revenue growth, latest-quarter YoY, acceleration, gross-margin expansion, forward estimates |
| Quality | 18% | margins and their trend, FCF, cash runway, no dilution, low leverage |
| Estimates | 12% | net EPS revisions, estimate drift, surprises, beat rate, target upside |
| Valuation | 8% | EV/sales per point of growth, forward P/E, PEG |
| Momentum | 17% | 3m/6m vs SPY, 1m, off 52w high, above 50/200d |
| Early | 20% | smaller cap, few analysts, institutions near 40% (not crowded), not extended, 1y not parabolic |
BUY needs 70 (75 over $50B, 80 over $500B — the names everyone already knows have to earn it). No size ceiling: megacaps can be ranked, but the Early pillar scores anything over $500B as zero on size. The dashboard splits everything into cap bands: Small (under $50B, the hunt), Growth & proven ($50B–$500B) and Megacaps ($500B+). Megacaps stay hidden unless they're doing something extraordinary (a BUY: 80+ with no red flags); the Megacaps band shows them all if you want to look. ◆ Diamonds in the rough: under $3B, ≤ 6 analysts, growth pillar ≥ 65, quality ≥ 50, score ≥ 60, no red flags.
Red flags (−7 each, 2+ = AVOID): dilution > 15%, recent offering/shelf (SEC), short float > 25%, +50% in 5d, press-release-heavy news, social hype with no independent coverage, estimate cuts, broken chart, D/E > 3.
News and social volume decide what gets looked at and feed the pump checks. They never add to the score.
New & rising lists names first ranked in the last 7 days (with where they came from) and the biggest 7-day score gains, so fresh finds don't sit under the same leaders.
Track record (bottom, starts collapsed) replays every saved run: for each name that has made the top 10 or top 20, how long it has held the spot, whether it is still there, and the price move since it got in, since it first scored 70/75/80, and since Pulse first ranked it. The full ranking shows its first 12 rows until expanded.
- Chart — line chart in the style of Apple Stocks, 1D / 1W / 1M / 3M / 1Y / 3Y / 5Y / 10Y. Hover to scrub; click to pin a date and see the move from there to any point (or to now).
- Competitors — the 3 closest US-listed peers by size in the same sub-industry (Finnhub peers), scored with the same Pulse model, with a verdict on which is strongest and why.
- Watchlist — hit ☆ Watch on any stock to file it into a folder. Each one remembers the day, price and rating it was added at, so the watchlist shows what only it can: % since added and rating then → now (with the change), next to price and the day's move. One line per stock, folders collapse, click a row to open it.
| File | What it does |
|---|---|
ranker.py |
discover → gate → research → score → rankings.json |
server.py |
dashboard on :8790, re-ranks every 60 min |
watchlist.py |
watchlist folders and since-added stats → watchlist.json (gitignored) |
dashboard.html |
the UI: aero-shards hero with paper-airplane picks, sector filter, Apple-style price chart (1D–10Y, click to pin a date and measure from it), competitor check, watchlist, track record |
scraper.py |
Reddit (rdt-cli) + X (headless Chrome) → raw_data.json, ~13s |
save_x_session.py |
log in to X once; saves x_session.json (gitignored) |
valid_tickers.txt |
listed US tickers used to validate cashtags |
Setup: pip install -r requirements.txt, install the rdt CLI (rdt-cli) for Reddit and have Google Chrome
installed for X. Run python save_x_session.py once to log in to X.
python ranker.py # one pass → rankings.json (re-runs scraper.py if its data is > 50 min old)
python server.py # dashboard at http://127.0.0.1:8790, re-ranks every 60 minAlways on: com.rytty.pulse.plist → ~/Library/LaunchAgents/, then launchctl load it. Logs: ~/Library/Logs/pulse.log.
Keys in .env (gitignored): MASSIVE_API_KEY, FINNHUB_API_KEY. Optional SEC_USER_AGENT="name email"
turns on SEC EDGAR checks (offerings, delisting notices, late filings, insider filings); set it with
launchctl setenv so it never lands in a file. Tunables: PULSE_MIN_MCAP, PULSE_MAX_MCAP,
PULSE_MIN_DOLLAR_VOL, PULSE_MIN_REVENUE, PULSE_HUNT_CORE, PULSE_HUNT_ROTATE, PULSE_HEAT_DEEP, PULSE_INTERVAL_MIN, PULSE_SCRAPE=0.
Built by @slime2riches · slimecode.tech
A rules-based screen, not a backtested edge and not investment advice.