Introduction

I have a problem. For 16 weeks of the year, I check this little purple app on my phone an inhuman amount. I recently redownloaded it ahead of this year's fantasy football season (briefly, I'd like to acknowledge the absurdity of calling the NFL season "fantasy football season." I'm aware some people value the NFL higher than their fantasy football interests. I am not one of those people until the NFL playoffs.) That purple app is Yahoo! Fantasy Sports, and it will consume me. I have found over the years that the only thing worse than being consumed by a fantasy football team is being consumed by a bad fantasy football team. In service of avoiding that, I have spent the past week building and refining a deeply bespoke fantasy football engine — hyper-tuned to one league and just one person in that league: me.

I have scraped our Yahoo league for every bit of historical data I have access to: each year's draft, completed trades, trades I rejected, rejected trades I proposed, successful waiver bids and unsuccessful waiver bids, weekly scores and standings, yearly winners and losers.

I have built a platform to leverage that data to firstly win the draft and secondly win the season.

Start With the History

Our league has been going since our senior year of college — now 4 years — and is aptly named after our shared backyard. Last year's loser recorded an album and posted it publicly, under his full name. Thankfully, no one remembers who he played in the loser's game (it was me) or how close it was. I am not particularly keen to find myself in that game again, so I've decided to take a hard look at the data.

Four years of friendship creates a lot of data. I was able to rather quickly group my friends into categories: who trades a lot? Who auto-drafts? Who takes a lot of RBs or WRs in the early rounds? Who is actually good at this game and who is just paying an entry fee to be in a group chat with their buddies every year? All of this information allows me to better understand the draft landscape. Last year, some members of this league took four quarterbacks. No mock draft tool in the world can possibly understand that context. My starting quarterback right after the draft was Anthony Richardson, who did not record a point all year. That cannot happen. And it won't, now that I recognize the trend.

Draft Against the People You Know

Normal mock drafts all have the same problem: other teams follow consensus ADP (average draft position) and neglect the randomness caused by my friends who do not know Mike Evans switched teams this offseason (Jack, that's free knowledge for you). Armed with four years of data on what each player values during a draft, I am able to account for that lunacy. My mock draft tool randomly puts me and my 11 league-mates on the board and I can draft against realistic bots as much as I want. The bots obey sensible roster rules (maybe they won't take 4 quarterbacks..), but their choices tilt toward their manager profile. My program randomizes the most likely options, weighted by live ADP, Yahoo's xRank (against which Yahoo auto-drafts), and managers' historical preferences.

Meanwhile, I can get a feel for how a draft will play out — which players do I need to reach to get? Who is more likely to slip?

Fantasy Hub mock draft seating real league managers and simulating their draft tendencies
Figure 1 — The mock draft seats real league managers and weighs each bot's picks using that manager's historical tendencies.

My Picks Are Data Too

The mock draft began as a way to model everyone else, but I also collect the data from my own mock drafts to model my own behavior. After enough mock drafts (and trust me, I've been active enough), I have been able to build a personal draft board that lines up with my own revealed preferences. If I repeatedly take someone above their ADP, they move up my board. If I always pass, they move down. The gaps expose which players I like more than the field and by how much. Last year, this would have revealed Bucky Irving and Kenneth Walker as my favorite picks. I ended up with both, which may help explain my appearance in the loser's game.

Maybe armed with the knowledge that I preferred those players so much higher than consensus, I would have made better choices. That's the thought this year, at least – take fewer, higher-conviction shots during the draft. ADP is generally quite good. You'll see that reflected by your friends' auto-drafted teams starting the year 7-3. Scoping out which of those bets I want to make and when is essential to winning this part of the fantasy football season.

Grading trades

Some of the most valuable information I had on hand was all of my trade history. My software compares accepted and rejected packages to estimate the bar for trading with each manager. It is untested, but in-season this should give me a clean answer to whether a trade is worth proposing or not.

I grade trades on two measures - one at the time of the trade and one retrospective on the rest of the season. Both are graded by value above replacement: how many points this player is expected to score or did score compared to someone off the bench. My goal is not to find the most lopsided offer I can sneak through. It is to identify mutually useful deals sooner and frame them in a way that can realistically close.

Fantasy Hub trade analyzer comparing how completed trades looked at the time with their eventual results
Figure 2 — Every deal gets one grade for the information available at the time and another for what happened afterward.

Am I Doing Too Much?

Across four seasons, I made 419 roster moves and submitted 95 waiver claims.

That is a shocking amount.

That is more than 5 moves per week, every week of the year. A move, for reference, is any transaction – an add/drop, a singular add, a singular drop, or a completed trade. The league average is closer to 20 moves per year.

If this article and the work behind it are any indication, it should be clear I am an active fantasy football user. That activity can be an advantage, but it can also be a detriment as I tend to give up on players too soon. Who can forget my shrewd DeVon Achane draft pick that ended up on the waiver wire just one week into the year? Putting context behind those roster moves can help me decide whether I really need to lead the league in adds, or if a close second is good enough.

Who Has My Number?

I also built a few vanity features so I knew who was OK to trash talk and who to avoid. That includes a head-to-head record book which shows every manager's results against every other manager, inclusive of the playoffs. Rivalries start to become clear. For example, I know I can take the week off when I see either of the 2 Jacks on the schedule.

Fantasy Hub head-to-head matrix showing every manager's record against every league opponent
Figure 3 — Four years of rivalries, including the playoffs, in one head-to-head matrix.

The Building Process

This build would not have been possible without AI. For better or worse, modern tools enable creative ventures to be built in days rather than months. In this case, a Ryan-specific fantasy football tool with almost zero business logic was stood up within a few hours and optimized over a week. I say this to encourage my friends to push the boundaries of their thinking from "I couldn't build that" to "that'll take a few hours tonight."

In years past, something like this could be sold as a $20/month subscription service. Today, a $10 Claude subscription can build it exactly as I want. Code is increasingly cheap, which means ideas, rather than time, are becoming the barrier. My Fantasy Hub does not need millions of users, a subscription model, or a roadmap for an average customer. It only needs to help me understand one league better than I did before. And if it helps me win the league again, that would be useful too.