soccer data hub

The Soccer Data API for developers ballers.

Every soccer competition we serve behind one envelope and one key: live scores, pre-match and in-play odds, confirmed lineups, and stats down to xG. Same field names for each competition, so the parser you write once reads the next without a change. When you need one competition in depth — its season, its table, its fixtures — that competition has its own page.

Aggregate sport hub · choose a league before league-specific detail calls

250 req/day free (500 with GitHub). No credit card.

Soccer · one cross-competition envelope · a dedicated page per competition

US developers usually search "soccer"; elsewhere it is "football". See the Football Data API →

Featured league example · not aggregate coverage

Premier League

single-league example · response shape, not coverage

1home · away
2score · status
3kickoff_utc · league
Open the Premier League authority →

Leagues in this sport

13
seasons in the archive
21,866 finished games, back to 2014-15

How far back the soccer archive goes

13 seasons are on record, back to 2014-15 — 21,866 finished games you can query today. One route serves the full span. These figures are measured from the customer-facing routes listed below, so this page cannot silently drift from the product.

ArchiveRouteSeasonsReaches back toFinished games
English Premier League/v1/matches132014-15 – 2026-274,610
La Liga/v1/matches132014-15 – 2026-274,629
Serie A/v1/matches132014-15 – 2026-274,611
Bundesliga/v1/matches132014-15 – 2026-273,724
Ligue 1/v1/matches132014-15 – 2026-274,292

What each plan reaches

Edge & Pro
all 13 seasons
Solo & Trio
5 seasons
Free
the current season

Edge and Pro reach everything listed above. Solo and Trio reach five seasons. Free covers the current season.

Unified schema

One soccer envelope. League context stays explicit.

Canonical IDs, league keys, status and timestamps travel with the row. The hub describes shared fields; each league authority documents its own depth.

football
sport
selected key
league
canonical
id
served
status

No featured-league field is promoted to a sport-wide guarantee.

Event surface

League-native events inside the soccer hub.

Event granularity differs by competition. Discover a match and league first, then use that authority’s event contract rather than assuming one featured feed applies everywhere.

  1. 1/v1/matches/:id/odds?sport=footballPre-match + in-play odds across 16+ booksedge
  2. 2/v1/stored/matches/:id/lineupsStarting XI + bench when publishedfree
  3. 3/v1/stored/matches/:id/statsPossession, shots, passesfree
  4. 4/v1/matches/:id/statisticsPer-team match stats incl. expected goals (xG); the route is Free, the expected_goals field is Solo+free

League directory

Choose the soccer competition you are actually building.

League pages own seasons, participants, examples and measured depth. This hub owns discovery across them.

League authorityRoleNext step

Coverage strength

What the aggregate soccer surface connects.

Counts below describe published route rows on this hub, not a promise that every league fills every field.

0

League authorities

11

Published routes

6

Build patterns

5

FAQ answers

Endpoints

On the gateway at api.bigballsdata.com. Authenticate with the bearer token from /dashboard/keys.

MethodPathReturnsPlan
GET/v1/leagues?sport=footballEvery soccer league key you can filter byFree
GET/v1/matches?sport=football&league=eplLive + scheduled fixtures (swap the league key)Free
GET/v1/standings?sport=football&league=eplLeague table for any competitionFree
GET/v1/matches/:id/odds?sport=footballPre-match + in-play odds across 16+ booksEdge
GET/v1/stored/matches/:id/lineupsStarting XI + bench when publishedFree
GET/v1/stored/matches/:id/statsPossession, shots, passesFree
GET/v1/matches/:id/statisticsPer-team match stats incl. expected goals (xG); the route is Free, the expected_goals field is Solo+Free
GET/v1/players/:id/stats?sport=footballPer-season player stats (goals, assists)Free
GET/v1/leagues/:id/xg-leadersSeason xG, xA and npxG leaderboard for the big five leaguesSolo
GET/v1/matches/:id/events?sport=footballGoals, cards, substitutionsFree
GET/v1/players/:id/club-formClub season stats: appearances, goals, assists, minutes (top 5 leagues, 2025-26). The season-average match rating is Solo and up.Free

Stats included

Every soccer stat field the API returns today — 82 in total, grouped by how they are produced. Each group carries its own freshness, because a sport is rarely uniformly current.

Season player stats

Post-game

Written after the game ends — not a live in-game feed. Last ingested 2026-09-15.

Endpoint
/v1/players/:id/stats
Last updated
2026-09-15

Fields (42)

Shooting
Dribbles Attempted, Shots on Target, Shots, Npxg, XG, XG Buildup, XG Chain
Scoring
Match Rating, Goals, Npg
Passing
Assists, Pass Accuracy, Key Passes, Passes, Xa
Possession
Dribbled Past, Dribbles Completed
Defending
Duels, Duels Won, Blocks, Interceptions, Tackles
Goalkeeping
Goals Conceded, Saves
Discipline
Red Cards, Yellow Cards, Second Yellow (red), Fouls Committed, Fouls Drawn, Penalties Conceded, Penalties Missed, Penalties Saved, Penalties Scored, Penalties Won
Appearances
Appearances, Starts, Minutes Played, Unused Substitute, Substituted On, Substituted Off, Games, Minutes

Team stats (per game)

Post-game

Written after the game ends — not a live in-game feed. Last ingested 2026-09-16.

Endpoint
/v1/matches/:id/statistics
Last updated
2026-09-16

Fields (40)

Shooting
Shot %, Shots on Target, Total Shots
Scoring
Final Score Ft Away, Final Score Ft Home, Final Score, Tournament Topscorers
Passing
Accurate Crosses, Accurate Long Balls, Accurate Passes, Cross Accuracy %, Long-Ball Accuracy %, Pass Accuracy %, Total Crosses, Total Long Balls, Total Passes
Possession
Momentum, Possession %, Team Form, Team Match Stats, Won Corners
Defending
Blocked Shots, Effective Clearances, Effective Tackles, Interceptions (defensive), Tackle %, Total Clearance, Total Tackles
Goalkeeping
Saves (goalkeeper)
Discipline
Fouls Committed, Offsides, Penalty Goals, Penalty Shots, Red Cards, Yellow Cards
Appearances
Average Positions, Best Players, Away Lineup, Home Lineup, Player Match Stats

Not included

  • Not shown here — team_per_game_advanced: advanced team stats that no route currently serves.
  • Not shown here — injuries: injury reports — reference data with its own endpoint.

Missing a stat?

We build what people actually ask for. If a field you need is not on this page, tell us — requests are how we decide what to add next.

Name the field or the endpoint shape. Specifics help more than categories.

Goes straight to the team as a product signal. No newsletter, no account, nothing else done with your address.

Player availability

soccer availability is league-scoped.

Injury, lineup and participant availability vary by league and season. Missing rows stay missing; the hub does not borrow another league’s records.

Nullable by design

Check the selected league authority and response timestamp before presenting a status as current.

Next up

Schedules across soccer competitions.

Each league publishes its own schedule and its own season boundaries. Call the league you selected and read the status and kickoff on the rows it returns, rather than inferring a season from this hub.

DiscoverGET /v1/leagues

Choose a real league key

Schedule/v1/leagues?sport=football

Keep league + season

DetailGET /v1/matches/{id}

Traverse canonical IDs

From response to product

A featured league example, rendered and raw.

This is visibly scoped to Premier League, single-league example · response shape, not coverage; it demonstrates the shared envelope without claiming that league represents all soccer.

Featured league example

Premier League

single-league example · response shape, not coverage

home · awayscore · statuskickoff_utc · league
{
  "data": [
    {
      "id": "canonical-id-from-response",
      "sport": "football",
      "league": "selected-league-key",
      "status": "finished",
      "home": {
        "name": "Home participant"
      },
      "away": {
        "name": "Away participant"
      },
      "score": {
        "home": null,
        "away": null
      }
    }
  ],
  "meta": {
    "example_scope": "Premier League · single-league example · response shape, not coverage",
    "note": "Shape example; request the API for current values."
  }
}

soccer resources

Docs, comparisons and build guides.

Every card is a real destination. League authorities remain separate from supporting product and documentation routes.

Real API example

Start at aggregate soccer discovery.

The request deliberately omits a featured league when the route supports sport-wide discovery. Select a returned league key before league-specific calls.

curl -H "Authorization: Bearer $BBS_API_KEY" "https://api.bigballsdata.com/v1/leagues?sport=football"
{
  "data": [
    {
      "id": "canonical-id-from-response",
      "sport": "football",
      "league": "selected-league-key",
      "status": "finished",
      "home": {
        "name": "Home participant"
      },
      "away": {
        "name": "Away participant"
      },
      "score": {
        "home": null,
        "away": null
      }
    }
  ],
  "meta": {
    "example_scope": "Premier League · single-league example · response shape, not coverage",
    "note": "Shape example; request the API for current values."
  }
}

Integrate in a few lines

Node.js, @bigballsdata/sdktypescript
import { BigBallSportsClient } from '@bigballsdata/sdk';

const client = new BigBallSportsClient(process.env.BBS_API_KEY!);

// Live matches across every soccer league in one call. Returns an empty array
// when nothing is in play — that is a valid answer, not an error.
const matches = await client.matches.list({ sport: 'football', status: 'live' });
if (matches.data.length === 0) console.log('No soccer matches in play right now.');
for (const m of matches.data) {
  // Score lives on m.score ({home, away}), not m.scores.value.
  console.log(m.league, m.home.name, 'v', m.away.name, m.score ? `${m.score.home}-${m.score.away}` : '-');
}

MCP

Connect an agent. Choose scope first.

An agent should discover soccer leagues, select one explicitly, then traverse matches and players by returned canonical IDs.

1get_leaguessport: football
2get_matchesleague: selected key
3get_match_detailsmatch_id: returned UUID

Data freshness

Freshness belongs to the selected league and dataset.

The hub never turns a single-league example into a current sport-wide claim, and it states no season of its own.

Scoped

Schedules

Current when populated

Source: League response

Scoped

Scores

Event-driven

Source: Match response

Scoped

Stats

Category-specific

Source: Dataset response

Scoped

Example

single-league example · response shape, not coverage

Source: Static label

Plan decision

Choose by endpoint, not by the hub headline.

Each row preserves its league or sport scope and resolves against the endpoint plan registry when that route has a canonical entry.

EndpointScopeMinimum plan
/v1/leagues?sport=footballSport/sharedfree
/v1/matches?sport=football&league=eplLeague-specificfree
/v1/standings?sport=football&league=eplLeague-specificfree
/v1/matches/:id/odds?sport=footballSport/sharededge
/v1/stored/matches/:id/lineupsSport/sharedfree
/v1/stored/matches/:id/statsSport/sharedfree
/v1/matches/:id/statisticsSport/sharedfree
/v1/players/:id/stats?sport=footballSport/sharedfree
/v1/leagues/:id/xg-leadersSport/sharedsolo
/v1/matches/:id/events?sport=footballSport/sharedfree
/v1/players/:id/club-formSport/sharedfree

Founder pricing

Start with soccer. Add depth as the product grows.

Prices and included dimensions come from the shared billing manifest; league coverage remains documented on each authority page.

Free

$0
  • ✓ 1 sport
  • ✓ 250 requests / day (500 with GitHub)
  • ✓ Current season
  • ✓ Scores, schedules, fixtures
Get a key

Solo

$19per month
  • ✓ Everything in Free, plus
  • ✓ 1 sport
  • ✓ 10,000 requests / day
  • ✓ Up to 5 seasons
Choose Solo

Trio

$49per month
  • ✓ Everything in Solo, plus
  • ✓ 3 sports
  • ✓ 25,000 requests / day
  • ✓ Up to 5 seasons
Choose Trio

Edge

$149per month
  • ✓ Everything in Trio, plus
  • ✓ All sports
  • ✓ 100,000 requests / day
  • ✓ All available history
Choose Edge

Pro

$299per month
  • ✓ Everything in Edge, plus
  • ✓ All sports
  • ✓ 200,000 requests / day
  • ✓ All available history
Choose Pro

Start on the free tier

100 requests per minute and 250 per day, free — the highest per-minute burst of any free sports API we checked. Burst is what matters when something asks several questions in a row and waits on each answer.

  • Every sport and league we cover — the paid tiers add history depth and premium fields, not more leagues.
  • Calls are counted one for one — no credit weighting, no markets-times-regions arithmetic.
  • Link GitHub and the daily cap goes to 500.
  • No credit card.
Get a key →

Or ask your AI tool directly

Connect your account to Claude, ChatGPT, Cursor, Perplexity or any other MCP-compatible tool and ask for soccer data in conversation — scores, standings, player stats and Elo ratings, with no API key to paste and no code to write. Your plan and limits carry over exactly as they do here.

Connect your AI tool →

Free covers a real app. Scale when you need to.

250 req/day free (500 with GitHub). Production starts at $49/mo. Live WebSocket push on Pro+.

Frequently asked

Answers before you choose a league.

Does the API include La Liga and Ligue 1?

Yes, La Liga and Ligue 1, plus the Premier League, Bundesliga, Serie A, MLS, the Champions League, and the FIFA World Cup 2026. Call /v1/leagues?sport=football for the full, current list of league keys.

Is there a free soccer data API?

Yes. It covers scores, lineups, stats, standings, and scoring events. There is a free tier; pricing lists what each plan covers. The full minute-by-minute stream is Pro; odds require the Edge plan ($149/mo) or higher. Free keys get 250 req/day (500 with GitHub). No credit card.

Does it include xG?

Yes, on the Solo plan and above. /v1/matches/:id/statistics returns per-team expected goals (the route is Free; the expected_goals field is Solo+, so Free keys get the rest of the team stats without it), and /v1/leagues/:id/xg-leaders returns the player-season xG leaderboard (Solo+). /v1/stored/matches/:id/stats does not carry xG.

Does this soccer API cover the World Cup 2026?

Yes. All 104 World Cup 2026 matches are part of the same soccer surface, with final odds, Elo-based match predictions, and final group standings from the completed tournament (June 11 - July 19, 2026). See the dedicated World Cup 2026 API page.

Can I get soccer player statistics through this API?

Yes, on a free key. Club season stats for the top 5 European leagues are available via GET /v1/players/:id/club-form. Returns appearances, goals, assists and minutes for the 2025-26 season; the season-average match rating is included from Solo up. WC2026 squad players are linked automatically.

Get an API key in 30 seconds