Football Stats API: Football Data For Developers (2026)
Get goals, assists, possession, shots, player ratings and xG via the GOAL API football stats API. REST + WebSocket. 5 SDKs. Free tier — no card required.
GOAL API
If you are building a sports app, analytics dashboard, fantasy platform, or betting product, the quality of your football statistics layer determines everything. Not just goals and scores — formations, progressive passes, xG, defensive actions, physical metrics, and player ratings all live inside a well-structured football stats API.
This guide covers exactly what football statistics are available through GOAL API, which endpoints to call, what fields come back, and how to use them across common developer use cases in 2026.
GOAL API provides match statistics, player statistics, team statistics, standings with form data, top scorers, and head-to-head records — all via REST, with official SDKs in JavaScript, Python, Go, Dart and PHP. Free tier available at goal-api.com/signup — no credit card required.
What "Football Stats API" Actually Means
Football statistics data splits into four categories, each served by different endpoints:
- Match statistics — possession, shots, corners, fouls, offsides, saves, big chances (per fixture)
- Player statistics — goals, assists, minutes, ratings, passes, tackles, cards (per match or per season)
- Team statistics — season-level aggregates: form, goals per game, clean sheets, average possession
- League statistics — standings tables, top scorers, top assisters, form guides
A complete integration typically pulls from two or three of these categories depending on your product type.
Match Statistics Endpoints
GET /v1/results
Returns per-match statistics for both teams. Fields returned include:
| Stat Field | Description | Example Value |
|---|---|---|
| Ball Possession | Percentage share of possession | 58% / 42% |
| Total Shots | All attempts on goal including blocked | 14 / 9 |
| Shots on Target | Attempts requiring save or resulting in goal | 6 / 3 |
| Blocked Shots | Attempts blocked by outfield player | 3 / 2 |
| Shots off Target | Attempts wide or over the bar | 5 / 4 |
| Corner Kicks | Corners awarded in the match | 7 / 4 |
| Offsides | Offside decisions against each team | 2 / 1 |
| Fouls | Total fouls committed | 11 / 14 |
| Yellow Cards | Bookings issued | 1 / 2 |
| Red Cards | Dismissals issued | 0 / 1 |
| Goalkeeper Saves | Saves made by keeper | 3 / 5 |
| Total Passes | All passes attempted | 487 / 332 |
| Pass Accuracy | Percentage of passes completed | 89% / 81% |
Example call:
curl "https://api.goal-api.com/v1/fixtures/cmt63it4jf96dt107junqu2m0/statistics" \
-H "Authorization: Bearer YOUR_API_KEY"
Python SDK:
from goal_api import GoalAPI
goal = GoalAPI(api_key="YOUR_KEY")
stats = goal.fixtures.statistics("cmt63it4jf96dt107junqu2m0")
for s in stats["data"]["match"]["fullTime"]:
print(f"{s['type']}: {s['home']} / {s['away']}")
GET /v1/results/today
Returns goals, cards, substitutions and VAR decisions in chronological order. Each event includes minute, player ID, player name, team, and event type. Use this to power live event feeds, timeline visualisations, and auto-generated match reports.
Player Statistics Endpoints
GET /v1/players/search?q=ronaldo
Returns season-level statistics for a single player across all competitions they have appeared in. Fields include:
| Category | Fields Available |
|---|---|
| Attacking | Goals, assists, shots total, shots on target, dribbles attempted/succeeded |
| Passing | Total passes, key passes, pass accuracy, crosses |
| Defensive | Tackles, interceptions, blocks, clearances, duels won/total |
| Discipline | Yellow cards, red cards, fouls committed, fouls drawn |
| Goalkeeping | Saves, goals conceded, clean sheets, penalties saved |
| Physical | Minutes played, appearances, starts, substitutions on/off |
| Ratings | Average match rating (where available from data source) |
GET /v1/leagues/:id/top-scorers
Returns the top goalscorers for any league and season. Each entry includes player name, team, goals, assists, penalties scored, and appearances. This endpoint is commonly used for golden boot trackers, fantasy league scoring tables, and editorial statistics pages.
curl "https://api.goal-api.com/v1/leagues/cmr77dvkr005nrx06lp7rvp49/top-scorers?season=2025-2026" \
-H "Authorization: Bearer YOUR_API_KEY"
GET /v1/players/top/:stat
Returns the top-performing players across all tracked leagues for a given statistic. The :stat parameter accepts values including goals, assists, rating, and saves. Use this to build cross-league leaderboards or compare performers across competitions.
goal.players.top("goals", limit=20) # Python SDK
GET /v1/players/compare?ids=
Accepts two player IDs and returns a side-by-side statistical comparison. Useful for player profile pages, transfer analysis tools, and editorial content generators.
Team Statistics Endpoints
GET /v1/teams/:id/statistics
Returns season-level team statistics. Includes goals scored and conceded, clean sheets, average possession, form (last 5 results), wins/draws/losses split home and away, and average shots per game.
curl "https://api.goal-api.com/v1/teams/cmr7fp1wp2n8yrx061vxmb1a5/statistics?season=2025-2026" \
-H "Authorization: Bearer YOUR_API_KEY"
Pass ?season= to get historical data. The season parameter accepts the format YYYY-YYYY (e.g. 2024-2025).
Standings and Form Statistics
GET /v1/leagues/:id
Returns the full league table with all standard standing columns: position, team, played, won, drawn, lost, goals for, goals against, goal difference, points. Also includes:
- Recent form — last 5 result string (e.g. W W D L W)
- Home and away record split
- Promotion and relegation zone flags
GET /v1/leagues/:id/standings
Returns teams ranked by current form rather than points total. Useful for form-guide widgets, tipster tools, and "in-form team" editorial sections.
GET /standings/:leagueId/home and /away
Returns separate home and away league tables — commonly used in betting analytics to identify teams who perform significantly differently at home versus away.
Head-to-Head Statistics
GET /h2h/:team1Id/:team2Id
Returns a summary of all historical matches between two teams: total matches, wins for each side, draws, goals scored. Includes the most recent fixtures.
GET /v1/h2h/:team1Id/:team2Id/stats
Returns aggregated H2H statistics: average goals per game, clean sheet rate, both-teams-to-score rate, and form in head-to-head fixtures specifically. Use this for pre-match analytics pages and betting insight tools.
Use Cases by Product Type
| Product Type | Primary Endpoints | Key Stats Used |
|---|---|---|
| Live score app | /fixtures/:id/events, /fixtures/live | Goals, cards, match status |
| Fantasy football | /fixtures/:id/statistics, /players/:id/statistics | Goals, assists, minutes, ratings |
| Betting analytics | /fixtures/:id/statistics, /h2h/:id/:id/stats | Shots, possession, H2H form |
| Sports media / editorial | /leagues/:id/top-scorers, /players/compare | Leaderboards, player comparisons |
| ML / prediction models | /teams/:id/statistics, /standings/:id/form | Season aggregates, form strings |
| Football analytics dashboard | /fixtures/:id/statistics, /players/top/:stat | Full match and player data |
Python Example: Build a Top Scorers Table
from goal_api import GoalAPI
from tabulate import tabulate
goal = GoalAPI(api_key="YOUR_KEY")
scorers = goal.leagues.top_scorers("cmr77dvkr005nrx06lp7rvp49", limit=20) # Premier League
rows = [
[
i + 1,
p["playerName"],
p["teamName"],
p.get("goals", 0),
p.get("assists", 0),
p.get("penaltyGoals", 0),
]
for i, p in enumerate(scorers["data"])
]
print(tabulate(rows, headers=["#", "Player", "Club", "G", "A", "Pens"]))
JavaScript Example: Match Statistics Widget
import { GoalApi } from "@goalapi/sdk";
const goal = new GoalApi({ apiKey: process.env.GOAL_API_KEY });
async function getMatchStats(fixtureId) {
const stats = await goal.fixtures.statistics(fixtureId);
const home = {};
const away = {};
for (const s of stats.data.match.fullTime) {
home[s.type] = s.home;
away[s.type] = s.away;
}
return { home, away };
}
Frequently Asked Questions
| Question | Answer |
|---|---|
| Does GOAL API provide xG (expected goals)? | Check Goal API Coverage — xG availability depends on the data provider for each competition. Not all leagues carry advanced metrics. |
| Are player ratings included? | Yes, where the data provider publishes them. Not all leagues carry per-match ratings; major leagues (EPL, La Liga, UCL) typically do. |
| How far back does historical stats data go? | Historical seasons are available — the exact range per league is listed on goal-api.com/coverage. |
| Can I get half-time statistics? | Yes. The /fixtures/:id/statistics endpoint accepts a half parameter: ?half=1half or ?half=2half for split-period stats. |
| Is there a rate limit on the stats endpoints? | All endpoints share your plan allowance. See goal-api.com/pricing for request limits per plan. |


