
Can AI pick my Fantasy Premier League (FPL) team? This is the question that's intrigued me for the last few years.
Every August I go through the same ritual: scan the fixtures, read the hints and tips, sketch a balanced squad that looks strong on paper and then progressively drift back to the same handful of premium assets that everyone else ends up owning. At some point during that mildly tedious process, the thought creeps in: why am I doing this? Surely a machine could.
It seems like a natural fit. There are rules, prices, plenty of data and a clear objective. Machines today can summarise documents, write code and beat humans at complex games. Picking a team once a week ought to be trivial.
In practice, though, it isn't. The obvious experiment - asking a model straight up to pick a team - usually produces something that looks right until you try to submit it and discover it violates one of the rules of the game. Making a model give answers that are not only good, but valid, turns out to be the real challenge.
A Very Brief Primer on Fantasy Premier League (FPL)
If you're familiar with FPL, you can skip over this, but I'm aware not everyone is.
Fantasy Premier League is a game played over the Premier League season: you select a 15-player squad within a fixed budget, pick 11 starters each Gameweek and nominate a captain who scores double points. You get one free transfer per week (extra transfers cost points), plus a few limited-use 'chips' - such as Wildcard, Free Hit, Bench Boost and Triple Captain - that temporarily bend the rules in your favour for a single gameweek, helping to boost points. Points are awarded based on real Premier League matches: goals, assists and clean sheets earn rewards, and deadlines and price changes mean the world of FPL is very much alive. You're the manager of a team, your goal is to pick the players that will perform best each week.
What's the Best Way to Do This?
I toyed with the idea of building predictive models directly - regressions or ML trained on historical data. That's a perfectly logical path and might yield slightly better point forecasts (and would be interesting to try), but it feels like a long, incremental slog: lots of data engineering and glue code for modest marginal gains in performance.
Aside from bespoke predictive models, there is now another way: general models. Instead of training a targeted model to predict points or minutes, you start with a model that already knows a lot about the world and can reason across many information dimensions at once.
This is where LLMs come in. Over the past few years we've seen enormous progress and they've become more and more capable. Ask one to build a team right now and you get a mostly logical, explainable output without an enormous, complex modelling pipeline. It's a very approachable first experiment.
LLMs now come with built-in knowledge of football, an understanding of rules and constraints, and the ability to reason over trade-offs in a way that looks surprisingly human. Crucially, they're also very good at turning messy inputs into structured outputs - lists, rankings, explanations, JSON - and they can be connected to live data sources via web search for fixtures, prices, injuries and hints and tips.
Why now though - we've had LLMs for a while? Simply the models are better, cheaper and easier to integrate than a year ago. Tool use, web search and reasoning turn them from generic next token predictors into systems that can work with current information and deliberate. That makes them a natural starting point: we can just ask them to build teams, see where they succeed or fail, and figure out how to guide them to meet the rules while still chasing maximum points. There is so much low-hanging fruit to explore in these models, it's the perfect place to begin.
A Very Simple Experiment - Let's Just Ask It
The simplest thing to try is also the laziest: write a single prompt and ask a model to build the team. Nothing special, just a straightforward instruction.
Prompt:
Build me a fantasy premier league team
Result:
Here’s a balanced, high-upside Fantasy Premier League squad (3-5-2 formation) built around proven premiums and value picks.
🧤 Goalkeepers
Jordan Pickford (Everton) – Reliable save points, nailed starter
Alphonse Areola (West Ham) – Budget rotation option
🛡 Defenders
William Saliba (Arsenal) – Clean sheets + bonus potential
Kieran Trippier (Newcastle) – Assist threat from set pieces
Pedro Porro (Tottenham) – Attacking full-back
Pervis Estupiñán (Brighton) – High attacking upside
Jarrad Branthwaite (Everton) – Budget starter
🎯 Midfielders
Mohamed Salah (Liverpool) – Captaincy option every week
Bukayo Saka (Arsenal) – Consistent returns
Phil Foden (Man City) – Explosive hauls
Cole Palmer (Chelsea) – Penalties + talisman role
Eberechi Eze (Crystal Palace) – Creative focal point
⚽ Forwards
Erling Haaland (Man City) – Essential premium
Ollie Watkins (Aston Villa) – Consistent goals + assists
João Pedro (Brighton) – Budget attacker with pens
🔥 Suggested Starting XI (3-5-2)
GK: Pickford
DEF: Saliba – Trippier – Porro
MID: Salah (C) – Saka – Foden – Palmer – Eze
FWD: Haaland (VC) – Watkins
Bench: Areola, Estupiñán, Branthwaite, João Pedro
If you’d like, tell me:
💰 Your exact budget
🏆 Mini-league strategy (safe vs differential)
📅 Target gameweek
And I’ll tailor a more aggressive or differential squad for you.
And for a moment, it looks like it works. You get a list of familiar names. A team structure that resembles something a human might actually submit. It's tempting to stop there.
But as soon as you look more closely, things start to fray and there are hallucinations all over the place. Some players don't even play for the clubs the model confidently assigns them to (João Pedro is now at Chelsea, Eze is at Arsenal and Estupiñán no longer plays in the Premier League). The team is well over budget too, costing £112.2m - £12.2m over budget - and that's with only 14 players as Estupiñán can't be added! The team might look ok on paper, but it's far from FPL ready.
Granted this prompt is very basic and doesn't search the web for the latest information, which would likely fix the player club issues, but even addressing these issues the generated teams fall short.
Prompt:
Build me a fantasy premier league team for Gameweek 25 of the 2025/26 season using the latest player information. Search the web to pull in the top players and ensure it meets the budget constraints and rules of fantasy premier league.
Result:
Here’s a Fantasy Premier League (FPL) Gameweek 25 (2025/26) suggested team based on the latest available stats, predicted points and trending picks ahead of the deadline. I’ve kept it within the typical £100m budget and followed standard FPL rules (15-man squad, max 3 per club). This is data-informed, but you should always check final prices and minutes before deadline.
🧠 Summary – Top GW25 Picks
Captaincy candidates: Bruno Fernandes, Gabriel Magalhães – excellent expected returns.
Arsenal defenders are in great form, and midfield creativity from United/Chelsea is strong.
Differential and value picks like Mateus Mané or budget defenders can help free funds.
🧤 Goalkeepers
David Raya (Arsenal) – Clean sheet potential from the best defensive team. £5.9m
Budget backup GK – Starter from a team with a decent defensive run (e.g., £4.0–£4.5m).
🛡️ Defenders
Gabriel Magalhães (Arsenal) – Bonus and goal threat plus clean sheet appeal. £7.0m
Jurriën Timber (Arsenal) – Attacking returns from defence and good fixture. £6.3m
William Saliba (Arsenal) – Solid clean sheet potential (differential). £6.0m
Budget Defender – e.g., rotation-proof £4.5m defender from lower table with attacking threat.
⚙️ Midfielders
Bruno Fernandes (Man Utd) – Top creative threat, strong underlying stats. £9.6m
Declan Rice (Arsenal) – Goals + assists and central to team’s chances. £7.5m
Bryan Mbeumo (Man Utd) – Getting goal returns as a forward/midfield hybrid. £8.5m
Cole Palmer (Chelsea) – Differential forward-thinking midfielder. £10.4m
Budget Midfielder – £5.0–£6.5m starter with minutes (Palace/Forest type).
⚽ Forwards
Erling Haaland (Man City) – Premium anchor if fully fit. £15.0m
Hugo Ekitiké (Liverpool) – Form and finishing threat. £8.9m
Mateus Mané (Wolves) – Budget forward with double fixtures benefit & enabler. £4.6m
📊 Suggested Starting XI (4-3-3)
| GK | Raya
| DEF | Gabriel, Timber, Saliba
| MID | Bruno, Rice, Mbeumo
| FWD | Haaland (C), Ekitiké, Palmer
| Bench | Budget GK, Budget DEF, Budget MID, Mané |
Captain: Haaland (if fit) or Bruno Fernandes / Gabriel based on your preference and fixture updates.
💡 Bench & Budget Notes
Make sure your bench players are guaranteed starters in case of rotation.
If Haaland is questionable, downgrade and swap in another premium forward or upgrade a midfielder.
Budget defenders and midfielders from teams with favourable fixtures help balance the £100m constraint.
📌 Key Things to Check Before GW25 Deadline
🔹 Final confirmed prices for all players
🔹 Line-ups and confirmed minutes (especially for Haaland & Palmer)
🔹 Any late injury or rotation news (e.g., Man City & Arsenal updates)
Even with a marginally better prompt, the returned team is not valid, featuring 5 Arsenal players, 2 more than is allowed for a single club. It's also not budget compliant, with the 11 named players costing £90.0m, leaving only £10.0m in the bank for the remaining 4 players, which is impossible. It also failed to name a full 15, leaving placeholders for the remaining 4 players.
Of course we could refine the prompt and make it much stronger, but there are limitations to what we can do just via a single prompt with access to web search.
The problem isn't that the model is "wrong". It's doing exactly what it's designed to do: produce something that sounds reasonable. In a game like FPL, sounding right and being valid are very different things.
That gap between - "sounds right" - and "is right" - is exactly what I'm trying to close.
The Rules That Matter
That gap between "sounds right" and "is right" exists for a reason. FPL is not just "pick the best players". It's pick the best players subject to a surprisingly long list of constraints. That's what makes it interesting.
You can't just load up on expensive attackers. You can't ignore positions. You can't quietly sneak in a fourth player from a top side. The game enforces structure.
Here is the compact set of rules a valid FPL team must satisfy.
- Squad size - Exactly 15 players. No more, no fewer.
- Position breakdown - 2 goalkeepers, 5 defenders, 5 midfielders and 3 forwards.
- Initial budget - The total squad cost must not exceed the available budget (£100.0m at the start of the season).
- Club limit - No more than three players from the same Premier League club.
- Starting XI size - Exactly 11 starters must be selected each Gameweek.
- Valid formation - The starting XI must include 1 goalkeeper and at least 3 defenders, 2 midfielders and 1 forward.
- Bench composition and order - Four substitutes are nominated, with an order that determines automatic substitutions.
- Captain and vice-captain - One starting player is the captain and scores double points; the vice-captain takes over if the captain does not play.
- Transfers per Gameweek - 1 free transfer per Gameweek; additional transfers cost points (typically -4 per move).
- Transfer carry-over - Unused free transfers can roll into the next Gameweek, subject to seasonal caps.
- Wildcard - Unlimited transfers for a Gameweek, without points penalties.
- Free Hit - Unlimited transfers for one Gameweek, after which the squad reverts to its previous state.
- Other chips - Bench Boost (substitutes points count) and Triple Captain (captain scores triple points) modify scoring for a single Gameweek.
- Edge cases and seasonal exceptions - Occasionally FPL introduces temporary rules. For example, extra free transfers may be awarded around international tournaments to help managers reshape disrupted squads.
None of these rules are individually complicated. The difficulty is that they all apply at once.
The World Is Not Static
Rules are only half the problem. Prices change, injuries, managers rotate players and fixtures shuffle. Multiply that volatility across ~600 players and you have the complex space the model must navigate.
A single, unconstrained prompt (in 2025) was never going to be enough.
Where This Leaves Us
A single prompt will often produce a plausible-looking team, but a plausible-looking team is not the same as a valid team - and these teams typically fail the moment you try to enter them.
They fail because the model is fitting a probability distribution over text, not solving a constrained optimisation problem. The model generates something that sounds like a sensible squad, but it is not explicitly reasoning over every rule, every price, every limit, all at once.
The fact that these models can generate plausible teams in the correct structure is promising - it shows they can be used. We just need to guide them better. Rather than wallop them with one big ask, we should setup a cleaner system: narrow the candidate set, feed up-to-date context, make the constraints explicit, demand structured output and validate automatically.
Next time: the pipeline I built that helps guide the model to building valid teams.