Fantasy Premier League (FPL) Official API Scraper
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
Fantasy Premier League (FPL) Official API Scraper
Scrapes the official Fantasy Premier League API — all ~700+ players with xG, xA, ICT index, ownership percentage, per-gameweek point history, current season fixtures — delivered as a clean, normalized Apify dataset. Built for FPL analytics tools, content sites, fantasy-data pipelines, and DFS modellers.
What you get
- All active FPL players (~700-840 depending on season) with full stats: goals, assists, clean sheets, expected goals (xG), expected assists (xA), ICT index, form, PPG, ownership percentage, current price, and GW transfer activity.
- Gameweek history (optional): per-GW points, minutes played, price, transfers in/out, and selection count — one timeline per player.
- Fixtures (optional): the full current-season fixture list with home/away teams, scores, kickoff times, and gameweek numbers.
Inputs
| Field | Type | Default | Description |
|---|---|---|---|
maxItems |
integer | 0 (all) | Maximum player records to return. 0 = all ~700+ players. |
includeHistory |
boolean | false | Fetch per-player gameweek history. Adds one API call per player — use for analytics, leave off for a fast bootstrap-only run. |
includeFixtures |
boolean | false | Append fixture records to the dataset after players. |
Output schema
Each player record contains:
| Field | Type | Description |
|---|---|---|
player_id |
integer | FPL element ID |
web_name |
string | Short name (e.g. "Salah") |
first_name / second_name |
string | Full name |
team |
string | Club name |
position |
string | GKP / DEF / MID / FWD |
now_cost |
number | Price in 0.1m units (130 = £13.0m) |
total_points |
integer | Total FPL points this season |
form |
number | Rolling 30-day average points per game |
points_per_game |
number | Season average points per game |
selected_by_percent |
number | Ownership percentage |
minutes |
integer | Minutes played |
goals_scored / assists / clean_sheets |
integer | Season totals |
expected_goals / expected_assists |
number | xG and xA |
ict_index |
number | Influence, Creativity, Threat composite |
transfers_in_event / transfers_out_event |
integer | Current GW transfer activity |
gameweek_history |
string | JSON array of per-GW stats (when includeHistory: true) |
source |
string | Source API endpoint |
Fixture records use position: "FIXTURE" and pack fixture metadata into the gameweek_history field as a JSON object.
Use cases
- FPL analytics dashboards — pull the full player pool into your tool without maintaining your own poller.
- DFS and betting models — xG, xA, ICT index, and ownership in one call, ready for modelling.
- Content automation — generate weekly player rankings, top transfers, value picks.
- Historical analysis — gameweek history gives you the full season-to-date timeline per player.
Performance
The bootstrap-static endpoint returns ~2 MB of JSON in a single call — typically under 1 second. A full run with includeHistory: true for all 700+ players takes a few minutes at the polite 100ms call rate. A bootstrap-only run (default) completes in seconds.
Cost
This actor uses the official open FPL API. Running cost is near zero, and it is priced at the standard pay-per-event rate to match the minimal compute needed.
Notes
- The FPL API is public and official, and needs no authentication.
- Player IDs are stable within a season but may change between seasons as new elements are added.
- The
gameweek_historyfield is a JSON string — deserialize withJSON.parse()in your downstream pipeline. - Fixture records are identifiable by
position: "FIXTURE"in the dataset.
Further reading: Sports Results & Fixtures Data: APIs, Feeds and Bulk Exports