fantasyfbFantasy football league simulation and optimization toolkit. Pulls projections from nflverse data, syncs roster state from a Yahoo Fantasy league, and runs Monte Carlo season simulations to value pickups, trades, and draft picks. |
Docs: https://tefirman.github.io/fantasyfb/
Install
pip install fantasyfb
For local development:
git clone https://github.com/tefirman/fantasyfb.git
cd fantasyfb
pip install -e ".[dev]"
Python 3.10+ is required.
Quickstart
import fantasyfb as fb
league = fb.League(name="My Team")
schedule_sim, standings_sim = league.season_sims(postseason=True)
print(standings_sim[["team", "wins_avg", "playoffs", "winner"]])
fb.League(name=...) reads from the Yahoo Fantasy API, so you'll need
oauth2.json (and .env with CONSUMER_KEY / CONSUMER_SECRET) set
up alongside the script. See the
yahoo_oauth docs for a
walkthrough.
Command-line tools
After install, four entry points are on your PATH:
| Command | Source | Use |
|---|---|---|
fantasyfb |
fantasyfb.league:main |
Weekly projections + lineup analysis |
snake-draft |
fantasyfb.drafts.snake:main |
Live snake-draft cockpit |
salary-cap-draft |
fantasyfb.drafts.salary_cap:main |
Live salary-cap draft tool |
draft-prep |
fantasyfb.drafts.prep:main |
Pre-draft tiers / VORP / mocks |
# Weekly run for a team
fantasyfb --team "My Team" --sims 1000 --adds --drops
# Same run, as a self-contained interactive HTML report (or --format both)
fantasyfb --team "My Team" --sims 1000 --adds --drops --format html
# Pre-draft analytics
draft-prep tiers --team "My Team"
draft-prep mock --team "My Team" --adp ADP.csv --my-pick 7 --sims 50
# Draft-day cockpit
snake-draft --team "My Team" --adp ADP.csv
salary-cap-draft --team "My Team"
Run any command with --help for the full option list.
NFL data (stats, schedules, rosters) is cached to disk for 24 hours, so
repeated runs within that window work offline. The fantasyfb weekly
CLI shortens that to 30 minutes on game days (September through
January, every day except Wednesday and Friday), so reruns pick up
finished games. Past the cache window you'll need a live connection
again to refresh it — see
nflreadpy caching for details
and the --refresh-cache flag.
Public API
from fantasyfb import (
League, # main entry point
FantasyScorer, # scoring rules -> points
MatchupModel, ProjectionEngineV2, # projection internals
LineupOptimizer,
SeasonSimulator, ScheduleManager,
NflreadpyProvider, # default data backend
)
Lower-level utilities live in submodules and can be imported directly:
from fantasyfb.drafts.tools import compute_vorp, assign_tiers, MockDraft
from fantasyfb.drafts.snake_cockpit import build_board, view_best
from fantasyfb.sim.backtest import run_backtest, evaluate
from fantasyfb.io.excel_exporter import FantasyExcelExporter
| Subpackage | Purpose |
|---|---|
fantasyfb.league |
Top-level League class |
fantasyfb.configs |
League / scoring presets |
fantasyfb.drafts |
Snake, salary-cap, prep, shared draft math |
fantasyfb.data |
Yahoo client + nflverse providers |
fantasyfb.scoring |
Scoring, lineup optimization, matchups |
fantasyfb.projections |
V2 projection engine, walk-forward fitter |
fantasyfb.sim |
Season simulation, backtests, schedule |
fantasyfb.analysis |
WAR, move analysis |
fantasyfb.io |
Excel and HTML report export |
Development
pip install -e ".[dev]"
pytest # full test suite
python -m build # produce sdist + wheel under dist/
The tests/ directory pulls a small slice of nflverse parquet data on
first run; subsequent runs are cached locally.
License
MIT. See LICENSE.
Metadata
Release files for fantasyfb 0.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fantasyfb-0.10.0.tar.gz | 235.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fantasyfb-0.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 406.2 kB
Release files / fantasyfb-0.10.0.tar.gz
| Download URL | fantasyfb-0.10.0.tar.gz |
|---|---|
| Size | 235.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2fd0b0158e64849fcca3dc206af84eaf0e2a730994bef69b00ff1ed0c31bcb4e
|
|
BLAKE2b-256 checksum How to use checksums |
c1f28e358cc487a72736e5048c53e8a7da5ff7a46da71d0d4948b178f578669e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency logRelease files / fantasyfb-0.10.0-py3-none-any.whl
| Download URL | fantasyfb-0.10.0-py3-none-any.whl |
|---|---|
| Size | 170.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c313ec1d4c90b60728d0f294730d6c23f9ec9f56af97e34459ba8dec97cf8ab5
|
|
BLAKE2b-256 checksum How to use checksums |
bc5cf7c831c1e250f4a9b3da917c601fbfe03a855ee530b73e2b74fbde50efce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency log