A pipeline that turns a multi-hour daily baseball-analytics routine into a one-click run from a spreadsheet.
Problem
A daily fantasy baseball player spent hours every day collecting MLB stats from several websites and scoring players by hand. The work repeated every day and had to be redone when lineups changed.
Solution
- Trigger
- A menu in the client's Google Sheet. Apps Script starts the run
- Orchestration
- GitHub Actions, with a controller that decides whether to scrape or only re-score, based on what is already in the Sheet and whether lineups are confirmed
- Collection
- Python scrapers (Playwright) for several sources, run in parallel, including pages behind bot protection
- Matching
- Fuzzy name matching, because the sources share no player IDs
- Scoring
- A 150-point model that ranks players within each day's games
- Output
- Ranked results written back to several tabs in the Sheet
Result
Each run takes 3 to 5 minutes, twice a day, in place of a multi-hour routine the client did by hand.