About this project
Sellside Research Engine is an open-source Python pipeline plus static web dashboard that automates a core equity research loop. It pulls audited fundamentals from SEC EDGAR XBRL, prices and consensus estimates from Yahoo Finance (via yfinance), the 2-year Treasury from FRED and EUR/USD from the ECB, then screens 21 US stocks and values the top 10. No API keys are required.
Coverage and outputs
- Universe: 21 US stocks across 8 sectors, configurable via DEFAULT_US_TICKERS in trg_workbench/config.py. The dashboard shows the top 10 by research score, re-ranked each refresh; comps, factor heatmap and scatters cover all 21.
- Valuation: bear/base/bull FCF DCF with a 5-year fading forecast and Gordon terminal value, reverse DCF (the growth the current price implies), residual income and justified P/B for banks, brokers and insurers, a football field of ranges, and peer multiples.
- Risk: historical VaR and CVaR (95%, 1 day), 21D/63D volatility, beta vs the S&P 500, Sharpe, Sortino, max drawdown and a correlation matrix.
- Sentiment and positioning: EPS revisions, earnings surprises, recommendation trend, short interest and insider activity.
- Sector and macro: 10 SPDR sector ETFs vs the S&P 500, rotation view, live 10Y, 2Y, 3M bill, VIX, DXY, WTI and EUR/USD.
- Outputs: dashboard_data.json for the dashboard, an HTML research note (navy/gold template), PDF via WeasyPrint with HTML fallback, a Markdown note and 150 DPI PNG charts.
How it works
A CLI (main_v2.py) exposes fetch-all, build-report and build-all, with --dry-run, --quiet and --formats options. Data is normalized under data/normalized, exported to dashboard_data.json, and rendered by a single-file index.html that loads the JSON at runtime. A GitHub Actions workflow runs weekdays at 22:00 UTC, commits the JSON only when it changed, and the Vercel Git integration redeploys on each push. A two-step build (fetch-all then export_dashboard_data.py --skip-fetch) is also supported.
Methodology notes
- FCF proxy = SEC net income (Yahoo fallback) x 0.80; WACC uses a CAPM build with a Blume-adjusted beta and a fixed D/E of 0.30; the risk-free rate is the live 10Y Treasury with a 5.3% fallback.
- Growth defaults to consensus +1y revenue growth, trailing growth as fallback, 5% when neither exists, clamped to -20% to 50%.
- Ratings are mechanical from consensus target upside: BUY above +10%, SELL below -10%, HOLD otherwise.
- Missing values are written as null and render as n/a; known gaps include FRED lagging Yahoo by a day and occasional single-day Yahoo gaps.
- Management commentary is a keyword heuristic over SEC 8-K earnings exhibits, not an LLM; it shows n/a on the live site because CI has no cached transcripts.
Setup and customization
Quick start: clone, pip install -r requirements.txt (Python 3.12), run python export_dashboard_data.py, then serve locally with python -m http.server 8000. SEC asks API users for contact details via SEC_USER_AGENT. A fork plus a Vercel import deploys a personal copy; forks must keep the NOTICE file and credit the original repository. Customization points include the ticker universe, factor weights in build_research_dataset, DCF assumptions in valuation.py, and analyst overlays via data/analyst_views.csv (v1 reports only). A pytest suite covers SEC XBRL extraction, ECB normalization, screening, DCF inputs and scenarios, reverse DCF, residual income, comps, return windows, TTM/DuPont, sentiment, JSON export, commentary extraction, templates and charts; there is no pytest CI yet.
The project is licensed Apache 2.0 and is positioned as a research and education tool, not investment advice. A roadmap lists planned work such as 10-K/10-Q intelligence, Monte Carlo DCF, historical multiple bands, Piotroski and Altman scores, tearsheets, PowerPoint export, Docker and pytest CI.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.