> football-data
Football (soccer) data across 13 leagues — standings, schedules, match stats, xG, transfers, player profiles. Zero config, no API keys. Covers Premier League, La Liga, Bundesliga, Serie A, Ligue 1, MLS, Champions League, World Cup, Championship, Eredivisie, Primeira Liga, Serie A Brazil, European Championship. Use when: user asks about football/soccer standings, fixtures, match stats, xG, lineups, player values, transfers, injury news, league tables, daily fixtures, or player profiles. Don't us
curl "https://skillshub.wtf/machina-sports/sports-skills/football-data?format=md"Football Data
Before writing queries, consult references/api-reference.md for endpoints, ID conventions, and data shapes.
Setup
Before first use, check if the CLI is available:
which sports-skills || pip install sports-skills
If pip install fails (package not found or Python version error), install from GitHub:
pip install git+https://github.com/machina-sports/sports-skills.git
The package requires Python 3.10+. If your default Python is older, use a specific version:
python3 --version # check version
# If < 3.10, try: python3.12 -m pip install sports-skills
# On macOS with Homebrew: /opt/homebrew/bin/python3.12 -m pip install sports-skills
No API keys required.
Quick Start
Prefer the CLI — it avoids Python import path issues:
sports-skills football get_daily_schedule
sports-skills football get_season_standings --season_id=premier-league-2025
Python SDK (alternative):
from sports_skills import football
standings = football.get_season_standings(season_id="premier-league-2025")
schedule = football.get_daily_schedule()
CRITICAL: Before Any Query
CRITICAL: Before calling any data endpoint, verify:
- Season ID is derived from
get_current_season(competition_id="...")— never hardcoded. - Team ID is verified via
search_team(query="...")if only a name is provided. get_event_xgandget_event_players_statistics(with xG) are only called for top-5 leagues (EPL, La Liga, Bundesliga, Serie A, Ligue 1).get_season_leadersandget_missing_playersare only called for Premier League seasons (season_id must start withpremier-league-).
Choosing the Season
Derive the current year from the system prompt's date (e.g., currentDate: 2026-02-16 → current year is 2026).
- If the user specifies a season, use it as-is.
- If the user says "current", "latest", or doesn't specify: Call
get_current_season(competition_id="...")to get the active season_id. Do NOT guess or hardcode the year. - Season format: Always
{league-slug}-{year}(e.g.,"premier-league-2025"for the 2025-26 season). The year is the start year of the season, not the end year. - MLS exception: MLS runs spring-fall within a single calendar year. Use
get_current_season(competition_id="mls").
Commands
| Command | Description |
|---|---|
get_current_season | Detect current season for a competition |
get_competitions | List available competitions with current season info |
get_competition_seasons | Available seasons for a competition |
get_season_schedule | Full season match schedule |
get_season_standings | League table for a season |
get_season_leaders | Top scorers/leaders (Premier League only) |
get_season_teams | Teams in a season |
search_team | Search for a team by name |
search_player | Search for a player by name |
get_team_profile | Basic team info (no squad/roster) |
get_daily_schedule | All matches for a date across all leagues |
get_event_summary | Match summary with scores |
get_event_lineups | Match lineups |
get_event_statistics | Match team statistics |
get_event_timeline | Match timeline (goals, cards, subs) |
get_team_schedule | Schedule for a specific team |
get_head_to_head | UNAVAILABLE — returns empty |
get_event_xg | xG data (top 5 leagues only) |
get_event_players_statistics | Player-level match stats with optional xG |
get_missing_players | Injured/doubtful players (Premier League only) |
get_season_transfers | Transfer history via Transfermarkt |
get_player_season_stats | Player season stats via ESPN |
get_player_profile | Player profile (FPL and/or Transfermarkt) |
See references/api-reference.md for full parameter lists, return shapes, and data coverage table.
Examples
Example 1: Premier League table User says: "Show me the Premier League table" Actions:
- Call
get_current_season(competition_id="premier-league")to get the current season_id - Call
get_season_standings(season_id=<season_id from step 1>)Result: Standings table with position, team, played, won, drawn, lost, GD, points
Example 2: Match report User says: "How did Arsenal vs Liverpool go?" Actions:
- Call
get_daily_schedule()orget_team_schedule(team_id="359")to find the event_id - Call
get_event_summary(event_id="...")for the score - Call
get_event_statistics(event_id="...")for possession, shots, etc. - Call
get_event_xg(event_id="...")for xG comparison (EPL — top 5 only) Result: Match report with scores, key stats, and xG
Example 3: Team deep dive User says: "Deep dive on Chelsea's recent form" Actions:
- Call
search_team(query="Chelsea")→ team_id=363, competition=premier-league - Call
get_team_schedule(team_id="363", competition_id="premier-league")→ find recent closed events - For each recent match, call in parallel:
get_event_xg,get_event_statistics,get_event_players_statistics - Call
get_missing_players(season_id=<season_id>)→ filter Chelsea's injured/doubtful players Result: xG trend across matches, key player stats, and injury report
Example 4: Player market value User says: "What's Saka's market value?" Actions:
- Call
get_player_profile(tm_player_id="433177")for Transfermarkt data - Optionally add
fpl_idfor FPL stats Result: Market value, value history, and transfer history
Example 5: Non-PL club User says: "Tell me about Corinthians" Actions:
- Call
search_team(query="Corinthians")→ team_id=874, competition=serie-a-brazil - Call
get_team_schedule(team_id="874", competition_id="serie-a-brazil")for fixtures - Pick a recent match and call
get_event_timeline(event_id="...")for goals, cards, subs Result: Fixtures, timeline events (note: xG, FPL stats, and season leaders NOT available for Brazilian Serie A)
Commands that DO NOT exist — never call these
— the correct command isget_standingsget_season_standings(requiresseason_id).— not available. Useget_live_scoresget_daily_schedule()for today's matches./get_team_squad—get_team_rosterget_team_profiledoes NOT return players. Useget_season_leadersfor PL player IDs, thenget_player_profile.— the correct command isget_transfersget_season_transfers(requiresseason_id+tm_player_ids)./get_match_results— useget_matchget_event_summarywith anevent_id.— useget_player_statsget_event_players_statisticsfor match-level stats, orget_player_profilefor career data./get_scores— useget_resultsget_event_summarywith anevent_id.— useget_fixturesget_daily_schedulefor today's matches orget_season_schedulefor a full season.— useget_league_tableget_season_standingswith aseason_id.
If a command is not in the Commands table above, it does not exist. Do not try commands not listed.
Error Handling
When a command fails (wrong event_id, missing data, network error, etc.), do not surface the raw error to the user. Instead:
- Catch it silently — treat the failure as an exploratory miss.
- Try alternatives — if an event_id returns no data, call
get_daily_schedule()orget_team_schedule()to discover the correct ID. - Only report failure after exhausting alternatives — use a clean message (e.g., "I couldn't find that match — can you confirm the teams or date?").
Troubleshooting
Error: sports-skills command not found
Cause: Package not installed
Solution: Run pip install sports-skills. If not on PyPI, install from GitHub: pip install git+https://github.com/machina-sports/sports-skills.git
Error: ModuleNotFoundError: No module named 'sports_skills'
Cause: Package not installed or path issue
Solution: Install the package. Prefer the CLI over Python imports to avoid path issues
Error: get_season_leaders or get_missing_players returns empty for a non-PL league
Cause: These commands only work for Premier League; they silently return empty for other leagues
Solution: Check the Data Coverage table in references/api-reference.md. For other leagues, use get_event_players_statistics for player data
Error: get_team_profile returns no players
Cause: This command does not return squad rosters — this is expected behavior
Solution: For PL teams, use get_season_leaders to find player FPL IDs, then get_player_profile(fpl_id="...")
Error: Wrong season_id format
Cause: Season ID must follow the {league-slug}-{year} format
Solution: Use get_current_season(competition_id="...") to discover the correct format. Example: "premier-league-2025", not "2025-2026" or "EPL-2025"
Error: No xG data for a recent match
Cause: Understat data may lag 24-48 hours after a match ends
Solution: If get_event_xg returns empty for a recent top-5 match, retry later. Only available for EPL, La Liga, Bundesliga, Serie A, Ligue 1
Error: Team or event ID unknown
Cause: ID was guessed instead of looked up
Solution: Use search_team(query="team name") to find team IDs, or get_daily_schedule / get_season_schedule to find event IDs. Never guess IDs.
> related_skills --same-repo
> wnba-data
WNBA data via ESPN public endpoints — scores, standings, rosters, schedules, game summaries, play-by-play, win probability, injuries, transactions, futures, team/player stats, leaders, and news. Zero config, no API keys. Use when: user asks about WNBA scores, standings, team rosters, schedules, game stats, box scores, play-by-play, injuries, transactions, betting futures, team/player statistics, or WNBA news. Don't use when: user asks about NBA (use nba-data), college basketball (use cbb-data),
> volleyball-data
Dutch volleyball data (Eredivisie, Topdivisie, Superdivisie, and the full Dutch pyramid) via the Nevobo API. Standings, schedules, results, clubs, tournaments, and news. Zero config, no API keys. Use when: user asks about Dutch volleyball, Eredivisie volleyball, Nevobo, volleyball standings, volleyball match results, volleyball schedules, or Dutch volleyball clubs. Don't use when: user asks about other sports — use football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-da
> tennis-data
ATP and WTA tennis data via ESPN public endpoints — tournament scores, season calendars, player rankings, player profiles, and news. Zero config, no API keys. Use when: user asks about tennis scores, match results, tournament draws, ATP/WTA rankings, tennis player info, or tennis news. Don't use when: user asks about other sports — use football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), golf-data (golf), cfb-data (college football), cbb-data
> sports-news
Sports news via RSS/Atom feeds and Google News. Fetch headlines, search by query, filter by date. Covers football news, transfer rumors, match reports, and any sport via Google News. Use when: user asks for recent news, headlines, transfer rumors, or articles about any sport. Good for "what's the latest on [team/player]" questions. Supports any Google News query and curated RSS feeds (BBC Sport, ESPN, The Athletic, Sky Sports). Don't use when: user asks for structured data like standings, score