How this was built
Every transaction from two Fantrax EPL draft leagues in 25/26, pulled from Fantrax's own transaction history. Both run 12-team divisions on broadly the same settings, which is what makes them comparable.
| League | Teams | Divisions | Transactions |
|---|---|---|---|
| International Genie League | 144 | 12 | 41,300 |
| DraftPL Community League | 72 | 6 | 27,633 |
Player scoring comes from Togga's per-gameweek Fantrax data, joined on Fantrax player id — a 100% match, no name matching anywhere. Kickoff times come from the FPL fixture list, joined on the ordered club pair rather than the gameweek, because a postponed match can sit in a different gameweek for each source. All 380 fixtures matched.
Every bucket is measured against the kickoff of the player's next real fixture after the add. Lineups are announced at KO−75.
| Bucket | Definition |
|---|---|
| Waivers | Added more than 75 minutes before kickoff — before the team sheet |
| Snipe | Added between KO−75 and KO−70, the five minutes after the announcement |
| Late add | Added between KO−70 and kickoff |
Only executed claims count as pickups. A failed claim moved no player; 15,108 of them are excluded from every value figure and used separately as a record of demand.
Each of these was found by checking, and each would have produced plausible-looking numbers if it had not been:
Fantrax labels the transaction clock "Date (EST)", but the same league's scoring periods come back at −0400 in September and −0500 in January. It is US Eastern wall time, daylight saving and all. Reading the label literally would have shifted every add by an hour for most of the season, which would have destroyed a five-minute bucket. Timestamps carry minutes, never seconds.
Asking Fantrax for a league's draft returns a single division's picks and does not say so. Taken at face value, 3,264 drafted players across the other divisions would have looked like free agents all season.
A player rostered in one division is still free in every other. Ownership is therefore reconstructed separately for each of the 18 divisions, and "contested auctions" are grouped by division too — pooling them across divisions invents competition that never happened.
In rescheduled weeks a player has two rows under one gameweek number. Timing is matched to a single fixture; value is summed across the whole gameweek.
Everything runs on a laptop with no credentials: Fantrax answers these leagues' transaction history without a login.
python scraper/pull.py # transactions, drafts, metadata python analysis/events.py # buckets and the comparison pools python analysis/metrics.py # headline tables python analysis/build_site_data.py # the rest of this site's data