StatsHub APIstatshub.com ↗
Access xG, xGA, possession, player shot stats, league standings, and head-to-head data from StatsHub across 120+ football leagues via 10 endpoints.
What is the StatsHub API?
The StatsHub API exposes 10 endpoints covering football match statistics, season-level team performance, and player-level shot data across 120+ leagues worldwide. The get_match_stats endpoint returns per-match xG and xGA values alongside individual player shot totals, while get_league_standings surfaces season-level expected goals and possession for every team in a competition. IDs returned by get_fixtures_by_date wire the endpoints together.
curl -X GET 'https://api.parse.bot/scraper/e1f0e079-0946-4b6c-9e3c-9227eddaa64a/get_fixtures_by_date?date=2026-10-08' \ -H 'X-API-Key: $PARSE_API_KEY'
Get all football fixtures/matches for a specific date. Returns match IDs, teams, scores, tournament info, and status. Each fixture includes event_id, home_team.id, and away_team.id needed to query match-level xG stats via get_match_stats. Covers 120+ leagues worldwide.
| Param | Type | Description |
|---|---|---|
| date | string | Date in YYYY-MM-DD format. If omitted, defaults to today's date (UTC). |
{
"type": "object",
"fields": {
"date": "string in YYYY-MM-DD format",
"fixtures": "array of fixture objects with event_id, home_team, away_team, scores, tournament, status",
"total_fixtures": "integer count of fixtures returned"
},
"sample": {
"data": {
"date": "2025-05-25",
"fixtures": [
{
"slug": "bournemouth-vs-leicester-city-mebxgg",
"round": 38,
"status": "finished",
"country": "England",
"event_id": 12436536,
"away_team": {
"id": 31,
"name": "Leicester City",
"short_name": "Leicester"
},
"home_team": {
"id": 60,
"name": "Bournemouth",
"short_name": "Bournemouth"
},
"away_score": 0,
"has_lineup": false,
"home_score": 2,
"tournament": {
"id": 1,
"name": "Premier League",
"unique_id": 17,
"unique_name": "Premier League"
},
"internal_id": 8676,
"winner_code": 100,
"start_timestamp": 1748185200
}
],
"total_fixtures": 131
},
"status": "success"
}
}About the StatsHub API
Fixtures and Match-Level xG
get_fixtures_by_date returns every football fixture for a given date (UTC), including event_id, home_team.id, away_team.id, scores, tournament info, and match status across 120+ leagues. Pass those IDs directly to get_match_stats to retrieve home_xg, away_xg, home_xga, and away_xga for the match, plus per-player arrays (home_players, away_players) each containing name, expected_goals, goals, shots, and shots_on_target. Note that get_match_stats only returns data for matches that have shotmap coverage — fixtures without it return no xG values. A parallel endpoint, get_football_fixtures_by_date, filters the daily feed to football-only rows and reports the count of excluded non-football fixtures in excluded_fixtures.
Team and League Statistics
get_team_statistics returns one season's aggregated stats for a team — attack, defence, possession, duels, cards, corners, and an overview block — in a single call. Optional parameters competition_id, season_id, period, home_away, and half let you slice the data. get_team_stats is the richer variant: it adds a players array with per-player goals, assists, xG, passes, tackles, cards, and average rating, plus a fixtures array of recent results. get_league_standings returns every team's position, points, xg_for, xg_against, and possession for a full season, automatically resolving the latest season when season_id is omitted.
Head-to-Head and Batch Comparisons
get_head_to_head returns the most recent finished meetings (up to 10) between two teams, with full-time scores, unix timestamps, and a streaks array highlighting runs of consecutive unanswered goals within individual matches. Summary objects for each side include wins, goals_scored, goals_conceded, meetings_scoring_2_plus, and longest_goal_run. get_batch_head_to_head accepts up to 15 team pairs in a single request — either as "Team A vs Team B" strings or numeric IDs — and resolves team names automatically. Set compact=true to receive score-only results without streak details.
Player History and Squad Rosters
get_team_current_players returns the current squad for a team with player_id, player_name, and position (G/D/M/F), providing a cheap roster discovery step before calling get_player_props_history. That endpoint returns match-by-match stats for a single player — goals, assists, shots, xG, minutes played, and match result — for up to 15 finished matches, newest first. Filter by team_id to restrict history to appearances for a specific club.
The StatsHub API is a managed, monitored endpoint for statshub.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when statshub.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 statshub.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?+
- Track xG vs actual goals per match to identify over- and under-performing teams using
get_match_stats. - Build season-long xG tables by pulling
xg_forandxg_againstfromget_league_standingsfor all teams in a competition. - Aggregate player shot and expected-goals data across recent matches via
get_player_props_historyfor betting prop research. - Compare two teams' historical head-to-head scores and goal streaks before a fixture using
get_head_to_head. - Populate a pre-match dashboard with current squad rosters using
get_team_current_playersbefore fetching per-player stats. - Filter team stats by home/away splits using the
home_awayparameter inget_team_statisticsto assess venue performance. - Batch-resolve multiple fixture matchups at once with
get_batch_head_to_headfor same-day multi-match previews.
| 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 StatsHub have an official public developer API?+
What does `get_match_stats` return, and are xG values available for every match?+
home_xg, away_xg, home_xga, away_xga, and per-player arrays with expected_goals, goals, shots, and shots_on_target for both teams. xG data is only present for matches that have shotmap coverage on StatsHub — matches without shotmaps return no xG figures.Does the API cover live in-play match statistics or only finished matches?+
get_match_stats and player history from get_player_props_history cover finished matches. get_fixtures_by_date returns matches of any status including scheduled and live, but live in-play stat updates are not a documented feature of the API. You can fork it on Parse and revise to add a polling or live-status endpoint.Is historical season data available beyond the current season?+
get_league_standings and get_team_statistics accept an optional season_id parameter, so you can query past seasons if you know the season ID. The endpoints default to the latest available season when season_id is omitted. There is no endpoint that enumerates all available season IDs for a given tournament. You can fork the API on Parse and revise to add a season-discovery endpoint.