How EasyFPL Works

Every tool on this site, and every model behind it, explained in full. No black boxes — if a number appears on a card, this page tells you where it came from and what it cannot know.

Methodology · 2026/27 season

The one idea behind everything

Almost every mistake a fantasy football model makes comes from the same place: treating a small sample as if it were settled fact. A striker scores twice in his opening match and the model calls him a two-goal-a-game striker. A goalkeeper makes five saves and is projected to make five every week. A £12.0m midfielder has one quiet afternoon and is ranked below a £5.5m one.

EasyFPL is built to refuse that. Every rate it uses is regressed toward a prior — a sensible expectation of what a player like this normally does — and the player's own record only takes over as evidence accumulates.

projection = own_rate × evidence + prior × (1 − evidence) evidence = min(1, matches_played / N)

After one match, evidence for an attacking rate is 0.25, so three quarters of the projection is still the prior. By roughly four or five matches the player's own record has fully taken over and the prior has faded to nothing. Lumpier events — bonus points, cards — regress on a slower ten-match clock, because they arrive in chunks rather than accumulating in fractions.

The prior itself is chosen to carry real information rather than being a flat league average:

  • Price. Across the player pool, price and the official game's own expected-points estimate correlate at +0.89. A single gameweek's expected goal involvements per 90 correlates at +0.32. Price is by far the stronger signal early on, so the attacking prior scales with what a player costs relative to the median at his position.
  • Last season. Where a player has a completed season behind him, his points per game from that season becomes the prior his current form regresses toward. Fewer than ten starts is ignored — a handful of cameos is not evidence.
  • Position baselines. Where neither applies, a per-position baseline measured from the current pool.
Why this matters to you

It means the site will not panic. One bad gameweek will not tell you to tear up your squad, and one good gameweek will not tell you a £4.5m goalkeeper is the best in the game. It also means that early in a season the numbers are deliberately conservative and clustered — that is the model being honest about how little it knows yet, not a bug.

The tools

Nine surfaces, each answering a different question. Everything below runs in your browser against the official Fantasy Premier League data.

Dashboard

index.html

The landing surface. Enter your Team ID once and it is remembered on your device. Gives you the state of the gameweek at a glance — deadline, your rank, price movements, the standout performers and the fixtures that matter — and routes you into whichever tool answers your actual question. The squad snapshot is a live projection and a way in: every card carries its opponent and expected points, and the whole pitch links through to the full analysis.

While matches are being played it switches to a live read: points as they land, how many of your players are still to come, and where you stand against the gameweek average. Projected bonus is shown separately from your confirmed score, because the game does not award bonus until a fixture ends — it is computed from the published BPS table using the game's own tie rules, so it is exact rather than estimated, and it is never folded into the headline number while it is still provisional.

My Team Analysis

fpl-my-team-analysis.html

The deepest tool on the site, and the one most people live in. It loads your actual squad and gives you:

  • The pitch. Your XI and bench laid out with projected points per player, drag-and-drop swapping, captain and vice controls, and a Current GW / Next GW toggle so you can look at what is happening now or what to do next.
  • Squad table. Every player with expected points, form, fixtures, ownership, set-piece duty and a verdict — Star, Hold, Monitor or Sell.
  • Lineup optimiser. Solves the highest-projecting legal XI from your fifteen and shows you exactly which changes it would make and what each is worth.
  • Transfer wizard. Answers the Tuesday question: is there a move worth making, or should you hold? Covered in detail below.
  • Gameweek draft. Plan several gameweeks ahead — transfers, chips, lineups — and see what each plan projects before you commit.
  • Squad health. A single score for the state of your squad, explained below.

Player Analysis

fpl-players-analysis.html
  • Recommendations. Ranked shortlists per position, scored on projected points, value, minutes security, fixtures and set-piece duty.
  • All Players table. Every player in the game, sortable across forty-odd columns, with column presets, heat-map shading, a fixture strip and a frozen name column so you never lose your place scrolling sideways.
  • Routes to Points. For any player, a breakdown of where his points actually come from — appearance, goals, assists, clean sheets, saves, defensive contribution, bonus — plus a reliability read on how repeatable that mix is.
  • Visual analysis. Scatter plots with quadrant shading for spotting value, threat and minutes outliers, with your own squad highlighted.

Teams Analysis

fpl-teams-analysis.html
  • Team rankings. Attack and defence ratings for all twenty clubs, split by home and away, built from actual goals and expected goals rather than reputation.
  • Fixture swings. Finds the clubs whose schedule is about to turn — the ones worth buying into before everyone else notices, and the ones to leave before a hard run.
  • Fixture calendar. A draggable window over the run of fixtures so you can ask "who is best over the next six?" and get an answer for the window you care about.

League Rivals

fpl-league-rivals.html

Mini-league intelligence. Live standings during a gameweek, a projected table showing where you will finish if the current gameweek plays out as expected, a threat matrix of which rivals are closing, and a captaincy swing calculator for working out how much a differential armband is actually worth against the people you are trying to beat.

The Scout's Desk

fpl-scouts-desk.html · articles/

Long-form written analysis, generated from the dataset at the moment of publication and then never edited. A gameweek debrief, fixture watch, data deep-dives, market movement and differential hunting. Each piece is archived as a real page, so the numbers in it stay a record of what was true that week rather than being quietly rewritten later.

PL News Hub

fpl-news.html

Premier League headlines aggregated from public feeds, filtered for team and player news that changes FPL decisions — injuries, rotation, press-conference lines.

FAQ & How it Works

fpl-faq.html · fpl-how-it-works.html

The short answers. The FAQ covers getting started, privacy, accuracy and troubleshooting; How it Works is the three-step tour. This page is the long version of both.

The expected-points engine

One model produces every projected-points figure on the site. The squad pitch, the squad table, the lineup optimiser, the gameweek draft and the transfer wizard all call the same function — so two screens can never quietly disagree about the same player.

It is built from the actual scoring rules rather than fitted as a black box, which means every number can be decomposed into the route that produced it:

xP = appearance + attack + clean sheet + saves + defensive contribution + bonus − goals conceded − cards

Minutes: the term that gates everything else

A player who does not play scores nothing, so every other term is scaled by how likely he is to start and how long he is likely to last. Minutes alone cannot tell a starter from a substitute — ninety minutes across one start and ninety across three cameos look identical, and the second player is not a 92% starter. The official data publishes a starts count, so the model uses that rate directly and lets minutes per game refine it.

p_start = w × (starts / games) + (1 − w) × minutes_signal w = min(1, games / 3) a player with zero starts is capped at 0.22 however many minutes he has expected minutes = p_start × 82 + (1 − p_start) × 12

Appearance points then follow the rules directly: 2 points for sixty minutes or more, 1 otherwise.

Attacking returns

Goals and assists are projected from expected goals and expected assists per 90 — regressed as described above — multiplied by expected minutes and adjusted for the opponent.

attack = (xG90 × goal_points + xA90 × 3) × minutes90 × fixture_adjustment goal_points = 6 (GK/DEF) · 5 (MID) · 4 (FWD)

Penalties. Expected goals already contains the penalties a player has actually taken, so adding a flat bonus on top would count them twice. Instead, published spot-kick order feeds the prior: a first-choice taker carries roughly 0.10 expected penalty goals per 90 before he has taken one. That fades out as his own record fills in. It exists to catch the newly appointed taker who has the job but no history of it yet.

Clean sheets and goals conceded

A clean sheet is simply no goals conceded, which makes it the zero bucket of a Poisson distribution at the expected goals against for that specific match:

P(clean sheet) = e^(−xGA)

The expected goals against comes from the opponent model — your club's defensive rating at that venue against that opponent's attacking rating at the opposite venue, blended with what has actually been conceded once there is a sample worth blending. Goals conceded uses the same figure, so facing the best attack in the division and facing the worst no longer carry the same deduction.

Saves are regressed hard for the same reason as everything else: a keeper with five saves in his opening match is not a five-saves-a-game keeper. One point per three saves, on the regressed rate.

Defensive contribution

The scoring route added for 2025/26. The game totals tackles, clearances, blocks, interceptions and recoveries into one figure and pays a flat 2 points once a per-match threshold is met. The thresholds used here were read off the official live endpoint's own explain blocks rather than assumed — in the gameweek they were derived from, the highest-scoring defender who earned nothing had 9 and the lowest who earned 2 points had 10.

PositionThresholdPoints
Goalkeepernever qualifies
Defender102
Midfielder122
Forward122

Because it is a threshold event rather than an accumulating one, it is projected as a survival probability — the chance of clearing the bar at that player's regressed rate over his expected minutes — not as an average.

Bonus and cards

Bonus gets a slower ten-match clock rather than the usual five, for two reasons. It is far lumpier — a player either takes all three or none, where expected goals accrues in fractions. And it is partly double-counted: the bonus points system is driven by the clean sheets, saves, goals and assists the model has already projected, so leaning on past bonus pays a good game twice. Left on the fast clock, a single three-bonus night was enough to make a £4.5m goalkeeper the highest-projecting keeper in the game, ahead of every established number one.

Cards are charged at −1 for a yellow and −3 for a red, on the same slow clock. Leaving them out quietly favoured habitual bookings — and those are mostly the defensive midfielders and centre-backs the defensive-contribution rule now rewards, so the term that paid them was in the model while the term that charged them was missing.

The opponent model

Fixture difficulty as published by the game is a single integer from 1 to 5. It is a reasonable shorthand and a poor model: it puts twelve different defences into the same bucket and treats them as identical. EasyFPL builds its own continuous ratings instead.

Each club gets an attacking and a defensive power rating, split by venue, derived from actual goals scored and conceded blended with the official strength ratings. Those feed both sides of the projection:

xGA = league_average × own_defence_factor (at this venue) × opponent_attack_factor (at the opposite venue) × venue_factor then blended with what the club has actually conceded, weighted by how many matches are behind it

The attacking side is adjusted by the opponent's defensive rating on the same principle. Only the opponent's quality is applied there: a player's own per-90 rate already reflects how good his team is at creating chances, so folding in his club's attack rating would count it twice.

Worked example

Two fixtures both rated difficulty 3 by the official ratings. Against a defence rated 85, the attacking adjustment is ×0.69. Against one rated 20, it is ×1.38 — a hundred per cent spread between two fixtures the published number calls identical. Where the opponent is unknown, such as a blank gameweek, the model falls back to the published difficulty rather than guessing.

The decision tools

Lineup optimiser

Solves for the highest-projecting legal starting eleven from your fifteen — one goalkeeper, at least three defenders, at least one forward, eleven in total — then orders your bench by who is most likely to be needed. It shows the change it would make and what it is worth, rather than silently rearranging your team.

Transfer wizard: "should I transfer?"

This one deserves detail, because a naive version of it gives bad advice confidently.

It scores what reaches your score, not what reaches your squad

A player's expected points are not the points you receive. Only eleven of your fifteen score in a normal gameweek, and exactly one goalkeeper plays. Upgrading your second goalkeeper from 16 projected points to 23 looks like a seven-point gain and is worth almost nothing. So every candidate move is scored by rebuilding the squad, re-solving the best eleven, and measuring the change in what the eleven actually delivers — with bench players carrying a small weight for the cover they provide.

It evaluates two moves as a pair, not as two singles

Two transfers are not independent. If both promote a player into the same eleven, adding their separate gains double-counts the same improvement. Two goalkeeper upgrades priced individually summed to +56.1 when the pair is genuinely worth +29.5, because only one keeper ever starts. A pair is also checked for legality as a pair: two swaps each affordable against your full bank may not be affordable together, and two players from one club can breach the three-per-club limit jointly while each looks fine alone.

It counts the free transfers you actually have

The official API does not publish your free-transfer count, so it is replayed from your real transfer history. Exceeding it costs 4 points, and the wizard shows that cost rather than hiding it. Taking a hit is legitimate — but the gain has to clear the hit with margin to spare before it is recommended.

It treats holding as a real answer

A free transfer has option value: banked, it becomes two next week. So a marginal edge is not a reason to spend one. A move must clear a meaningful margin over the whole five-gameweek horizon, not merely beat zero. "No move worth making" is a result the wizard is happy to return.

A note on freed money

Selling an expensive player for a cheap one banks money the recommender does not then spend. It reports the cash as a fact, not a benefit — money in the bank buys nothing until it is used, and a plan that leaves it idle is not the upgrade it appears to be.

Gameweek draft

Plans several gameweeks forward with transfers, chips and lineups, tracking your budget, free transfers and hit costs across the whole plan and projecting what each gameweek delivers. Double gameweeks are summed; blanks return zero, which is the honest answer — a player with no fixture scores nothing, and averaging that away is how a planner quietly lies to you.

Squad health

A single 0–100 read on the state of your squad. It starts from the average quality of your starting eleven — weighted at 88%, with the bench at 12%, because a bench player scores nothing in a normal gameweek and counts as cover rather than as a fifth of the answer — and then charges explicitly for the things that need attention:

FactorChargeNotes
Injured starter−8 eachCannot play at all
Doubtful starter−3 eachScaled by published chance of playing
Out-of-form starter−3 eachOn the regressed form reading, not one afternoon
Hard fixtures−1.5 each, capped −6Prevents one bad run dominating
Captain quality+3 / −5Depending on the armband's verdict

Each factor is charged exactly once. The availability and form components are stripped out of the base average before the explicit penalties are applied, so an injured starter is not docked twice — once through the average and once through the subtraction.

Why your score will not collapse after one bad week

The official form figure is average points over the last thirty days, so one gameweek into a season it is that one gameweek. Judged raw, 52% of every player who got on the pitch counted as "out of form" after the opening round — which is not a form reading, it is "did not score three points once". A defender who played the full ninety and conceded a goal has a form of 2.0 and was being charged for it.

Form is now regressed toward the player's own points per game last season, reaching the raw figure at four gameweeks. The thresholds keep exactly the meaning they always had; they simply stop firing before anything has been demonstrated. While the sample is short, the score says so underneath the ring.

Data and refresh

Everything comes from the official Fantasy Premier League API. There is no scraping, no private feed and no hand-entered data.

  • Refresh cadence. The core dataset is rebuilt every four hours, timed to catch overnight price changes and Thursday/Friday press-conference news.
  • Live gameweeks. During a gameweek, points, bonus and provisional standings are read live so the squad pitch and league tables reflect what is happening on the pitch.
  • Freshness. The footer of every page shows how long ago the data was last updated. If it is stale, you will see it there.
  • Your squad. Fetched on demand from the public endpoint for your Team ID. Nothing about it is stored anywhere but your own browser.

Because gameweek state is genuinely ambiguous — a round can be under way, provisionally finished, or fully settled — the site distinguishes those states explicitly rather than assuming a round is over the moment the last whistle goes.

What this cannot do

A tool that only tells you its strengths is not being straight with you. These are the real limits.

  • It cannot see team news before it is published. Rotation, a manager's press conference an hour before the deadline, a late fitness test — none of it reaches the model until the official data reflects it. Always check the news before you confirm a transfer.
  • It is weakest exactly when you most want certainty. Early in a season, and after a player transfers clubs or changes role, the sample is thin and the projection leans on priors. It will tell you when this is the case; it will not pretend otherwise.
  • Expected goals is not goals. Finishing quality, penalties awarded, deflections and luck all move real scores away from the model. Over a season the gap narrows; over one gameweek it can be enormous.
  • It does not know your league. Projected points are the best guess at the highest score. That is not always the right target — chasing a rival with three gameweeks left is a different problem, and one you should solve with the League Rivals tools and your own judgement.
  • It is not a substitute for you. Every recommendation on this site is a starting point for a decision, not the decision. You know things the model does not.
Found something that looks wrong?

Tell us. If a number on this site does not match what you would expect, that is worth knowing — several of the models described above are the way they are because someone pointed out that the output looked wrong. Get in touch.