Open data

Every projection we make, as a file you can download

Before each Premier League deadline we simulate the gameweek 50,000 times and score every player on the official FPL points table. This page publishes all of it — every player we simulated, not the ones we wrote about — as JSON and CSV. Free, no key, no account, no rate limit. 1 gameweek published so far.

Last updated 26 August 2026.

The licence

CC BY 4.0. Use these numbers for anything — a blog post, a spreadsheet, a podcast, a model of your own, a commercial product. The single condition is that you credit evmax and link back. That is the whole deal, and it is the deal on purpose: we would rather be cited than hidden.

Full terms: creativecommons.org/licenses/by/4.0/

Paste this credit line:

Data: evmax (https://evmax.ai), CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/

The files

One file per gameweek in both formats, plus a cumulative file covering every gameweek we have ever published. Past gameweeks are never rewritten — a projection published before a deadline stays exactly as it was published.

Gameweek 2JSONCSV
Every gameweekJSONCSVCumulative — every gameweek we have published.
Indexindex.jsonWhat exists right now, plus the column schema. Read this first.

Try it

# 1. What is published right now curl -s https://evmax.ai/api/fpl/dataset/index.json | jq '.gameweeks'
# 2. One gameweek, flat CSV curl -s https://evmax.ai/api/fpl/dataset/gw2.csv -o evmax-gw2.csv
# 3. Every gameweek, top 10 midfielders by projected points curl -s https://evmax.ai/api/fpl/dataset/all.json | \ jq '[.players[] | select(.position=="MID")] | sort_by(-.x_points) | .[:10]'

What the columns mean

The CSV header is stable: columns are only ever added at the end, never reordered or removed, so a script that reads it by position keeps working. A cell can be empty when we could not compute that number for that player — an empty cell is never a zero.

ColumnTypeWhat it means
gameweekintegerPremier League gameweek the projection is for.
idintegerThe official FPL element id — the stable join key against the FPL API. Empty if we could not match the player to the bootstrap feed.
namestringPlayer name as our model carries it, disambiguated when two players share a surname.
teamstringThree-letter club code (ARS, MUN, ...).
positionstringGK, DEF, MID or FWD.
pricefloatFPL price in millions at the time of the build.
ownership_pctfloatPercent of FPL managers owning the player at build time.
x_pointsfloatOur projection: mean FPL points across 50,000 simulations of this gameweek. The headline number.
captain_evfloatExpected points if captained (2 x x_points).
ceilingfloatTail mean — the average of the player's best 15% of simulations. The realistic good week, not a cap.
valuefloatx_points per million of price.
bonusfloatExpected bonus points, per match.
defconfloatExpected defensive-contribution points, per match.
p_defconfloatProbability of hitting the defensive-contribution threshold, per match (defcon = 2 x p_defcon).
cs_pointsfloatExpected clean-sheet points, per match.
start_probfloatProbability the player starts, from the priors (research notes can override it).
kickoffstringISO-8601 UTC kickoff of the player's fixture.
verdict_tierstringS / A / B / C / D — the player's band this gameweek by projected points.
verdict_callstringbuy / hold / pass — the tier read as a call.
p10float10th-percentile outcome (the floor). Empty for gameweeks published before we stored distributions.
medianfloatMedian simulated points. Empty for gameweeks published before we stored distributions.
modefloatMost likely single point total. Empty for gameweeks published before we stored distributions.
p90float90th-percentile outcome. Empty for gameweeks published before we stored distributions.
p_haulfloatProbability of 10 or more points. Empty for gameweeks published before we stored distributions.
p_blankfloatProbability of 2 or fewer points. Empty for gameweeks published before we stored distributions.
distributionobjectJSON only — the sparse point-mass function over integer FPL points, {"points": count} across the 50,000 simulations. Omitted for gameweeks published before we stored it.

How the numbers are made

Market odds (de-vigged) to Dixon-Coles scorelines to 50,000 Monte-Carlo simulations per gameweek, scored on the official Fantasy Premier League points table. Projections are frozen before the deadline and graded publicly afterwards. We publish the grading too: see our accuracy page for per-gameweek error against realized official points, and the track record for the full history. Nothing on this site is graded by us in private.

Cite us

For a paper, a README or a footnote:

evmax. "FPL projections dataset." https://evmax.ai/data/ Licensed CC BY 4.0.

Building an agent? There is an MCP server for this data — see the repository. Questions, corrections or a reuse you want us to know about: about evmax.