Open data
The projections, in full, for anyone
Every player’s expected points for the next gameweek, free for anyone to use with a credit. I publish the model’s accuracy on the settled gameweeks with them, which is how you’d check whether they’re any good.
Currently published
Gameweek 9 (669 players, generated 2026-10-27T03:34:58Z)
- https://sidelinequant.com/data/gw/9/projections.json (every player and column)
- https://sidelinequant.com/data/gw/9/projections.md (ranked extracts, easy to quote)
- https://sidelinequant.com/data/latest.json (redirects to the current gameweek’s own address)
What makes this different
- Every player. All of them, with the FPL id on every row so you can join it straight onto the official game’s data or your own.
- Floor, ceiling and haul chance. Each comes from that player’s own simulations, which is why a nailed defender and a rotation-risk striker on the same xP can get very different ranges.
- Start probability. Every row has one. Plenty of low-owned players are low-owned because they aren’t starting.
- How it’s gone so far. The payload carries the model’s error on the settled gameweeks and links to the full record.
- One address per gameweek. Each gameweek has its own URL and latest redirects to the current one. I only keep the current gameweek. Once the feed moves on, the old address returns a 404, so you can’t end up pulling this week’s numbers thinking they’re last week’s.
Columns
Every field the feed publishes, and what it means. Rows are at fixture grain: a player with two fixtures in the gameweek has two rows.
| Field | Meaning |
|---|---|
| player_id | FPL element id. Stable across the season; join key to the official game. |
| fixture_id | FPL fixture id. Rows are at fixture grain, so a double gameweek is two rows. |
| gameweek | FPL gameweek number. |
| name | Full player name. |
| web_name | Short display name, as FPL renders it. |
| club | Player's club. |
| team | Player's club (same value as `club`). |
| position | GK, DEF, MID or FWD. |
| price_tenths | Current FPL price in tenths of a million (96 = £9.6m). |
| kickoff_time | Fixture kickoff, ISO 8601 UTC. |
| opponent | Opposition club in this fixture. |
| was_home | True when the player's club is at home. |
| xP | Expected FPL points for this fixture. An expectation over simulated minutes states, not a per-90 rate scaled by expected minutes. |
| sigma | Standard deviation of this fixture's simulated points. |
| gw_sigma | Standard deviation of the player's gameweek points total, summed across their fixtures in the gameweek. |
| gw_p10 | 10th percentile of the simulated gameweek points total (a realistic floor). |
| gw_p90 | 90th percentile of the simulated gameweek points total (a realistic ceiling). |
| horizon_sigma | Standard deviation of the player's points total summed over every gameweek the model currently covers (not just this one). |
| horizon_p10 | 10th percentile of the simulated points total over the whole horizon. |
| horizon_p90 | 90th percentile of the simulated points total over the whole horizon. |
| xp_cond_start60 | Expected points if the player starts and plays 60+ minutes. |
| xp_cond_start_lt60 | Expected points if the player starts but goes off before 60 minutes. |
| xp_cond_cameo | Expected points if the player comes off the bench. |
| e_mins | Expected minutes. |
| p_start | Probability the player starts. |
| p_start60 | Probability the player starts and plays at least 60 minutes. |
| p_start_sub | Probability the player starts but is substituted before 60 minutes. |
| p_cameo | Probability the player appears as a substitute. |
| p_unused | Probability the player does not appear at all. |
| startsub_mean | Model's fitted average minutes for a start that ends before 60 minutes (this export's own estimate). |
| cameo_mean | Model's fitted average minutes for an appearance off the bench. |
| status | FPL's own availability flag (a available, d doubtful, i injured, s suspended, …). |
| chance_of_playing_next_round | FPL's own percentage chance of playing the next round, when FPL has set one. |
| news | FPL's own news text for the player, when there is any. |
| p_goal | Probability of scoring at least one goal. |
| p_goals_2plus | Probability of scoring two or more goals. |
| p_assist | Probability of at least one assist. |
| p_cs | Probability of a clean sheet for this player (conditional on playing 60+ minutes). |
| p_return | Probability of a goal or an assist. |
| p_defcon | Probability of hitting the defensive-contribution points threshold. |
| p_ge_6 | Probability the gameweek points total is 6 or more. |
| p_ge_10 | Probability the gameweek points total is 10 or more (a haul). |
| bonus_mean | Expected bonus points. |
| xbps_mean | Expected BPS (the score bonus points are awarded from). |
| xg_mean | Expected goals for the player in this fixture (mean over the simulation). |
| xa_mean | Expected assists for the player in this fixture (mean over the simulation). |
| total_points | FPL points actually scored so far this season. |
| xp_appearance | Expected points from minutes played (the appearance points). |
| xp_goals | Expected points from goals scored. |
| xp_assists | Expected points from assists. |
| xp_clean_sheet | Expected points from clean sheets. |
| xp_conceded | Expected points lost to goals conceded (zero or negative). |
| xp_saves | Expected points from saves. |
| xp_penalty_save | Expected points from penalty saves. |
| xp_penalty_miss | Expected points lost to missed penalties (zero or negative). |
| xp_defcon | Expected points from defensive contributions. |
| xp_cards | Expected points lost to yellow and red cards (zero or negative). |
| xp_own_goal | Expected points lost to own goals (zero or negative). |
| p_card | Probability of at least one yellow or red card. |
| form | Mean points over the player's last four gameweeks. Not FPL's own 30-day form. |
| l4_gws | How many gameweeks form and the other last-four fields cover (four or fewer). |
| starts_l4 | Starts over those gameweeks (a double gameweek can count two). |
| mins_l4 | Minutes played over those gameweeks. |
| xp_l4_gws | How many of those gameweeks have the model's last pre-deadline prediction. |
| xp_l4 | The model's pre-deadline expected points summed over those covered gameweeks. |
| pts_vs_xp_l4 | FPL points actually scored minus xp_l4, over the same covered gameweeks. |
| owned_pct | Percentage of all FPL managers owning the player. |
| elite_10k_owned_pct | Percentage of a stratified sample of overall top-10k managers owning the player. |
| elite_10k_eo_pct | Effective ownership in that top-10k sample: owned plus captained, as a percentage. A triple captain counts as a captain: the chip was played in the sampled gameweek, not this row's. |
| elite_10k_captain_pct | Percentage of that top-10k sample captaining the player. |
| elite_1k_owned_pct | Percentage of the sampled overall top-1k managers owning the player. |
| elite_1k_captain_pct | Percentage of the sampled overall top-1k managers captaining the player. |
| elite_delta_pct | elite_10k_owned_pct minus owned_pct, in percentage points. |
| price_change_percent | FPL's own progress towards the player's next price change, as a signed percent. |
| price_change_as_of | When that price state was captured, ISO 8601 UTC. |
| price_change_direction | Which way the counter is heading: rise or fall. |
| price_change_expected | True when the counter is past the change threshold tonight. |
| price_change_locked | True when FPL has price-locked the player (new to the game). |
| price_change_season_tenths | Price change since the season started, in tenths of a million. |
| price_change_per_hour_pct | Captured net-transfer rate, in the same percent units as price_change_percent, per hour. |
| price_change_projected_pct | Where the counter is projected to stand at tonight's change point, assuming the current rate holds (FPL's own assumption). |
| price_change_projected_tenths | The model's expected price change over the next three change points, in tenths of a million. An expectation, so fractional. |
| lambda_home | Model expected goals for the home side in this fixture. |
| lambda_away | Model expected goals for the away side in this fixture. |
| p_cs_home | Model clean-sheet probability for the home side. |
| p_cs_away | Model clean-sheet probability for the away side. |
| d_lambda_home | Change in lambda_home over the odds-drift window. |
| d_lambda_away | Change in lambda_away over the odds-drift window. |
| d_p_cs_home | Change in p_cs_home over the odds-drift window. |
| d_p_cs_away | Change in p_cs_away over the odds-drift window. |
| drift_from_ts | Start of the odds-drift window, ISO 8601 UTC. |
| drift_to_ts | End of the odds-drift window, ISO 8601 UTC. |
| pen_taker | True when the player is first-choice penalty taker. |
| corner_taker | True when the player is first-choice corner / indirect free-kick taker. |
| fk_taker | True when the player is first-choice direct free-kick taker. |
| rates_source | Where this fixture's team rates came from: market odds, or the team model. |
| has_unseen_team | True when a club in this fixture has no played matches to fit on yet. |
| shrinkage_weight | How much the player's scoring rates lean on the prior rather than his own minutes: near 1 is mostly prior (little data), near 0 his own record. |
Licence and use
Licensed CC BY 4.0. Free to use, quote and redistribute, including commercially, with attribution to Sideline Quant and a link to https://sidelinequant.com. Please cache rather than poll: the payload carries an ETag, which only changes when a model refresh lands.
Everything the model predicts is free on the site, for every player and gameweek it covers, along with the whole-season view. This feed is the next gameweek of that, with all the columns, in a form a script can read. The optimiser’s free with an account, and supporters help pay for the site (see support).