Thank you for your interest in contributing! This project welcomes contributions from equity researchers, quants, data engineers, and Python developers.
- Getting Started
- How to Contribute
- Development Setup
- Pull Request Guidelines
- Issue Labels
- Code Standards
- Good First Issues
- Fork the repository via the GitHub UI
- Clone your fork locally:
git clone https://github.com/<your-username>/sellside-research-engine.git cd sellside-research-engine
- Create a virtual environment and install dependencies:
python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt
- Set your SEC user agent:
export SEC_USER_AGENT="Your Name your_email@example.com"
- Run the test suite to confirm everything works:
pytest
Open an issue using the Bug Report template. Include:
- Python version and OS
- Full stack trace
- Minimal reproducible example (ticker, date, command)
Open an issue using the Feature Request template. Describe:
- The problem you're solving (e.g., "CCA currently uses trailing multiples; forward multiples would improve accuracy")
- Your proposed approach
- Any financial / data-sourcing constraints
See Pull Request Guidelines below.
sellside-research-engine/
├── trg_workbench/
│ ├── sources/ ← Data connectors (SEC, Yahoo, ECB, macro)
│ ├── analytics/ ← Screening, valuation, risk, catalyst
│ └── reporting/ ← Charts, PDF renderer, Jinja2 templates
├── tests/ ← pytest test suite
├── main_v2.py ← CLI entry point
└── requirements.txt
Each module is intentionally self-contained. A contribution to valuation.py should not require changes to sec_client.py.
- Branch naming:
feature/<short-description>,fix/<short-description>,docs/<short-description> - Keep PRs focused — one logical change per PR
- Write tests for any new analytics or data-pipeline logic (under
tests/) - Run the full test suite before opening your PR:
pytest
- Update the README if you add a new CLI flag, data source, or output format
- PR description should include:
- What changed and why
- How to test it manually (ticker + date + command)
- Any known limitations
| Label | Meaning |
|---|---|
good first issue |
Self-contained, well-scoped — ideal for new contributors |
help wanted |
We'd love external input on this |
bug |
Confirmed defect |
enhancement |
New feature or improvement |
data-source |
Relates to a specific API integration |
analytics |
Screening, valuation, or risk logic |
reporting |
HTML/PDF/Markdown output layer |
llm |
LLM reasoning / narrative generation |
- Python 3.10+, typed where practical (
from __future__ import annotations) - Black formatting (line length 100)
- Descriptive variable names — financial models are read more than written
- No hardcoded tickers, dates, or magic numbers in module-level code (use constants or CLI args)
- External API calls must be rate-limited and respect the service's Terms of Service
Not sure where to start? Look for issues tagged good first issue. Suggestions currently on the roadmap that are contributor-friendly:
- Add a new CLI flag to filter by sector in the screener
- Improve the Markdown daily note formatting
- Add unit tests for
catalyst.py - Document the
analyst_views.csvcolumn schema in the README - Add a
--dry-runflag that validates inputs without hitting live APIs
Open a Discussion or comment on an existing issue. Financial domain questions (e.g., "what WACC convention should we use?") are welcome.