FMDataLab APIfmdatalab.com ↗
Access Football Manager 2024 top-rated players across 117 playable roles. Filter by position code or player name via the FMDataLab API.
What is the FMDataLab API?
The FMDataLab API exposes Football Manager 2024 player ratings across all 117 playable roles through a single endpoint, get_top_role_scores. Each response includes role scores, biographical details, club, division, nationality, wage, and transfer value drawn from the start of an FM24 save. You can narrow results by position code or player name substring to quickly find the top-rated player for any given role.
curl -X GET 'https://api.parse.bot/scraper/c4503e1a-5944-419e-8ad8-57955edd82a6/get_top_role_scores?name=Messi&position=GK' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace fmdatalab-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: FMDataLab SDK — bounded, re-runnable; every call capped."""
from parse_apis.fmdatalab_com_api import FMDataLab, ParseError
client = FMDataLab()
# List top-rated players across all roles, capped at 5
for player in client.players.list(limit=3):
print(player.name, player.role_code, player.role_score, player.club)
# Filter by position — only goalkeepers
for gk in client.players.list(position="GK", limit=3):
print(gk.name, gk.age, gk.role_score)
# Search by player name
item = client.players.list(name="Messi", limit=1).first()
if item:
print(item.name, item.position, item.role_score, item.club, item.nationality)
# Error handling around a fallible call
try:
results = client.players.list(position="ST", limit=2)
for striker in results:
print(striker.name, striker.role_code, striker.wage, striker.transfer_value)
except ParseError as e:
print(f"error: {e}")
print("exercised: players.list")
Returns the highest-scoring Football Manager 2024 player for each of 117 playable roles. Each entry includes the player's role score, biographical details, club, and transfer value from the start of an FM24 save. Results can be filtered by position code or player name substring.
| Param | Type | Description |
|---|---|---|
| name | string | Filter by player name substring (case-insensitive). Returns all roles where the matching player is the top-rated. |
| position | string | Filter by position code substring (e.g. 'GK', 'DM', 'ST'). Matches against the position field or role_code. |
{
"type": "object",
"fields": {
"total": "integer count of returned players",
"players": "array of player objects with role_code, name, uid, role_score, age, position, height, weight, club, division, nationality, wage, transfer_value"
},
"sample": {
"data": {
"total": 117,
"players": [
{
"age": 31,
"uid": "18026122",
"club": "R. Madrid",
"name": "Thibaut Courtois",
"wage": 250000,
"height": "200 cm",
"weight": "96 kg",
"division": "Spanish First Division",
"position": "GK",
"role_code": "gk_de",
"role_score": 16.18,
"nationality": "BEL",
"transfer_value": "Not for Sale"
},
{
"age": 36,
"uid": "7458500",
"club": "Inter Miami",
"name": "Lionel Messi",
"wage": 325000,
"height": "169 cm",
"weight": "67 kg",
"division": "Major League Soccer",
"position": "AM (RC), ST (C)",
"role_code": "tre_at_st",
"role_score": 17.59,
"nationality": "ARG (ESP)",
"transfer_value": "Not for Sale"
}
]
},
"status": "success"
}
}About the FMDataLab API
What the API Returns
The get_top_role_scores endpoint returns an array of player objects — one per role — each representing the highest-scoring Football Manager 2024 player for that role. The response includes a total count and a players array. Each player object carries fields for role_code, name, uid, role_score, age, position, height, weight, club, division, nationality, wage, and transfer value (t prefix field), all sourced from the opening state of an FM24 save.
Filtering
Two optional query parameters let you slice the full 117-role dataset. Pass a name substring (case-insensitive) to retrieve every role where a specific player ranks first — useful when you want to see the breadth of roles a single player dominates. Pass a position substring such as GK, DM, or ST to filter by position code or role_code, which narrows results to a positional group.
Data Scope and Freshness
The dataset reflects Football Manager 2024 specifically and covers the initial state of a new save — not mid-season updates or real-world transfers after the game's database snapshot. The 117 roles map to FM24's full set of playable tactical roles. Each record's role_score is a numeric rating indicating how well a player's attributes suit that particular role, making it directly comparable across players within the same role.
The FMDataLab API is a managed, monitored endpoint for fmdatalab.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fmdatalab.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official fmdatalab.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Identify the best-rated goalkeeper across all GK roles at the start of an FM24 save using the
positionfilter. - Look up all roles where a named player (e.g. a specific striker) ranks first by filtering on the
nameparameter. - Compare
role_scorevalues across defensive midfield roles to shortlist DM candidates by club or division. - Build a scouting dashboard that displays top players per role alongside their
wageand transfer value fields. - Cross-reference
nationalityanddivisionfields to find top-rated players within a specific league or country. - Generate a ranked list of the highest
role_scoreentries across all 117 roles for FM24 meta analysis. - Filter by attacking position codes to produce a shortlist of forwards sorted by role score for team-building tools.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does FMDataLab have an official developer API?+
What does the `role_code` field represent and how does it relate to the `position` filter?+
role_code identifies the specific FM24 tactical role (e.g. a particular variant of a central midfielder role), while position is a broader positional category. The position query parameter matches against both fields, so filtering on 'DM' can surface role codes that belong to the defensive midfield positional group.