Discover/FootyStats API
live

FootyStats APIfootystats.org

Access football league standings, team stats, live scores, player stats, and head-to-head match data from FootyStats via 8 structured endpoints.

Endpoint health
verified 7h ago
get_leagues
get_match_stats
get_league_overview
get_team_stats
get_livescores
7/8 passing latest checkself-healing
Endpoints
8
Updated
21d ago

What is the FootyStats API?

The FootyStats API exposes 8 endpoints covering football league standings, team performance metrics, live scores, player statistics, and head-to-head match data sourced from footystats.org. Use get_league_overview to pull full standings tables, or get_match_stats to retrieve possession, shots, xG, cards, and corners for a specific fixture. A search endpoint ties everything together by resolving team, league, or match names into paths for the detail endpoints.

Try it
Search keyword (e.g. 'arsenal', 'premier league', 'barcelona').
api.parse.bot/scraper/da1a4a9a-3c0f-46fb-9c3b-79796e0bb203/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/da1a4a9a-3c0f-46fb-9c3b-79796e0bb203/search_teams_leagues?query=arsenal' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 footystats-org-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.

"""FootyStats SDK walkthrough — bounded, re-runnable; every call capped."""
from parse_apis.footystats_api import FootyStats, TeamNotFound

client = FootyStats()

# Search for teams/leagues/matches by keyword
result = client.searchresults.search(query="arsenal", limit=3).first()
if result:
    print(f"Found: {result.name} ({result.category}) at {result.path}")

# List all available leagues, take one and drill into its overview
league = client.leagues.list(limit=1).first()
if league:
    overview = league.overview()
    print(f"\n{overview.league_name} standings (top 3):")
    for standing in overview.standings[:3]:
        print(f"  {standing.rank}. {standing.team} — {standing.pts} pts, {standing.ppg} ppg")

    # Get player stats for that league
    players = league.players()
    print(f"\nTop scorer in {players.league_name}:")
    if players.top_scorers:
        top = players.top_scorers[0]
        print(f"  {top.name}: {top.value} goals")

# Fetch detailed team stats via the teams collection
try:
    team = client.teams.get(path="/clubs/arsenal-fc-59")
    print(f"\n{team.team_name} stats:")
    wins = team.stats.get("wins")
    if wins:
        print(f"  Win rate — overall: {wins.overall}, home: {wins.home}, away: {wins.away}")
except TeamNotFound as exc:
    print(f"Team not found: {exc.path}")

# Live scores — always returns at least scheduled matches
for match in client.livematches.list(limit=3):
    print(f"  Match {match.match_id}: {match.team_a_score}-{match.team_b_score} ({match.minute})")

print("\nExercised: searchresults.search / leagues.list / league.overview / league.players / teams.get / livematches.list")
All endpoints · 8 totalmissing one? ·

Full-text search across teams, leagues, and matches by keyword. Returns mixed results categorized as 'club', 'league', or 'match', each carrying a path usable with the corresponding detail endpoint (get_team_stats, get_league_overview, get_match_stats). Results are not paginated — one request returns all matches.

Input
ParamTypeDescription
queryrequiredstringSearch keyword (e.g. 'arsenal', 'premier league', 'barcelona').
Response
{
  "type": "object",
  "fields": {
    "items": "array of search result objects each with name (str), url (str), path (str), and category (str: 'club', 'league', or 'match')"
  },
  "sample": {
    "data": {
      "items": [
        {
          "url": "https://footystats.org/clubs/arsenal-fc-59",
          "name": "Arsenal",
          "path": "/clubs/arsenal-fc-59",
          "category": "club"
        }
      ]
    },
    "status": "success"
  }
}

About the FootyStats API

What the API Covers

The API provides structured football data across eight endpoints. get_leagues returns every league tracked on FootyStats — including name, country, slug, and a path field you pass directly into three other endpoints. get_league_overview uses that path to return the full standings table: rank, team, matches played, wins, draws, losses, goals for/against, goal difference, points, and points-per-game. get_league_player_stats returns top scorers, top assist leaders, and clean-sheet leaders for any league. get_league_detailed_stats narrows to a rolling 6-match form table with the same W/D/L/GF/GA/GD/PTS/PPG structure.

Team and Match Detail

get_team_stats takes a /clubs/ path (obtainable from search_teams_leagues) and returns per-stat breakdowns split across overall, home, and away — covering win/draw/loss percentages, goals, possession, shots, and fouls, plus season totals. get_match_stats takes a path ending in -h2h-stats and returns the match score, both team names, and a stats dict mapping stat labels (possession, xG, corners, cards, fouls) to per-team values. Stat keys vary by fixture.

Search and Live Scores

search_teams_leagues accepts a free-text query and returns mixed results typed as club, league, or match, each with a path ready to feed into the appropriate detail endpoint. Results are not paginated, so broad queries return everything in a single response. get_livescores requires no inputs and returns all currently active matches with team_a_score, team_b_score, and a minute field that handles numeric values, stoppage-time strings like '90+1', and status strings including 'HT', 'FT', 'Soon', and 'INTERRUPTED'.

Scope and Limitations

Stat keys in get_team_stats and get_match_stats are open-ended and vary by team, league, and season — callers should not assume a fixed schema. search_teams_leagues results are not paginated. Live score coverage depends on FootyStats indexing the match; the 'AWAITING_UPDATES' minute value indicates a match is tracked but data has not yet refreshed.

Reliability & maintenanceVerified

The FootyStats API is a managed, monitored endpoint for footystats.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when footystats.org 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 footystats.org 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.

Last verified
7h ago
Latest check
7/8 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a league table dashboard using get_league_overview standings fields (rank, pts, ppg, gd).
  • Track top scorers and assist leaders per competition with get_league_player_stats.
  • Display live match scores and in-progress minutes using get_livescores with status-aware minute parsing.
  • Compare home vs. away form for any club by reading home and away splits from get_team_stats.
  • Resolve a user-typed team or league name to a structured path via search_teams_leagues before calling detail endpoints.
  • Analyze recent team form by pulling the 6-match rolling table from get_league_detailed_stats.
  • Build a head-to-head fixture preview using xG, possession, and shot data from get_match_stats.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does FootyStats have an official developer API?+
Yes. FootyStats offers an official API at https://footystats.org/api. It requires a paid subscription and exposes JSON endpoints for leagues, teams, and matches. The Parse API is an independent alternative that structures the same publicly visible data.
What does `get_team_stats` return, and how does the home/away split work?+
It returns a stats dict where each key is a stat label (e.g. win percentage, shots per game, fouls) and each value is an object with overall, home, and away sub-keys. The exact stat keys present vary by team and season, so callers should iterate over whatever keys appear rather than expecting a fixed list.
Does the API return historical match results or fixture schedules?+
Not currently. The API covers live scores via get_livescores, head-to-head stats for specific fixtures via get_match_stats, and current-season standings and form tables. Historical result sequences and upcoming fixture schedules are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting those data pages.
Are `search_teams_leagues` results paginated?+
No. The endpoint returns all matching results in a single response regardless of result count. For very generic queries this may return a large array mixing club, league, and match category entries, so filter by the category field in your application.
Does the API expose player-level stats beyond top scorers and assists?+
The get_league_player_stats endpoint covers top scorers, top assist leaders, and clean-sheet leaders at the league level. Individual player profiles, per-match player ratings, and passing or defensive metrics per player are not currently included. You can fork this API on Parse and revise it to target player profile pages and return that additional data.
Page content last updated . Spec covers 8 endpoints from footystats.org.
Related APIs in SportsSee all →
soccerstats.com API
Access comprehensive soccer statistics including live league tables, match details, team performance metrics, and form rankings across multiple football leagues. Search for specific teams and analyze their season statistics, head-to-head records, and competitive standings to stay informed on the latest soccer data.
football-data.org API
Get live match scores, team standings, and player statistics across football competitions worldwide. Search for teams, view head-to-head matchups, track top scorers, and explore detailed information about competitions and geographical areas.
fotmob.com API
Get live football scores, detailed match results, and comprehensive league statistics across multiple competitions. Access player and team performance data, browse upcoming fixtures by date, and dive into in-depth analytics for your favorite leagues and matches.
livescore.com API
Track live scores and detailed statistics across football, hockey, basketball, tennis, and cricket with the ability to filter by date, sport, and league. Access match summaries, team overviews, standings, fixtures, and results to stay updated on your favorite competitions and teams.
whoscored.com API
Search for players and teams, then dive deep into their performance metrics, match statistics, and detailed passing data to analyze football games and player abilities. Get comprehensive insights on team performance, individual player stats, and play-by-play event information to power your football analysis and decision-making.
statshub.com API
Access detailed football match statistics including xG, xGA, and possession metrics across multiple leagues, plus retrieve fixtures by date and current league standings. Get comprehensive season-level and match-level performance data to analyze team and player statistics in depth.
flashscore.com API
Search teams and competitions, pull daily fixtures and live scores, and retrieve match details including events, statistics, and league standings from FlashScore.
afl.com.au API
Access live AFL match scores, team standings, player statistics, and fixture schedules directly from official sources. Search player profiles, view news updates, and track competition rounds and seasons all in one place.