Soccer Fixtures, Live Scores & Results Scraper avatar

Soccer Fixtures, Live Scores & Results Scraper

Pricing

from $1.00 / 1,000 saved fixtures

Go to Apify Store
Soccer Fixtures, Live Scores & Results Scraper

Soccer Fixtures, Live Scores & Results Scraper

Get football fixtures, live scores and results from 219 soccer leagues: Premier League, LaLiga, Serie A, Bundesliga, Champions League, MLS, Liga MX and more. Goalscorers, cards, team form, venues and betting odds. Export to JSON, CSV or Excel.

Pricing

from $1.00 / 1,000 saved fixtures

Rating

0.0

(0)

Developer

Harish Garg

Harish Garg

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

4 days ago

Last modified

Categories

Share

Soccer Fixtures, Live Scores & Results Scraper — 219 Football Leagues

Get soccer fixtures, live scores and final results from 219 football competitions around the world. Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League, MLS, Liga MX, Brasileirão, Argentine Primera, J.League, Saudi Pro League, the World Cup, every major women's league, and many more.

Each row is one match, with the kick-off time in your timezone, the score, the result, goalscorers and cards with the minute, team form, the venue, attendance, TV channels and betting odds. Download the data as JSON, CSV, Excel or HTML, or read it from the API.

No API key. No login. No coding needed.

What does Soccer Fixtures & Results Scraper do?

  • Fixtures — upcoming matches with kick-off time, venue, recent form and broadcasters.
  • Live scores — matches in play right now, with the match clock and the current score.
  • Results — final scores, the winner, and how the match was decided (normal time, extra time or penalties).
  • Goals and cards — every goal and every yellow or red card, with the minute and the player. Penalties and own goals are marked.
  • Team statistics — possession, shots, shots on target, corners and fouls.
  • Betting odds — moneyline (home, draw, away), over/under total and spread, where available.
  • Whole seasons — a complete season of one league or of many leagues in one run.
  • Your timezone — "today" and "this weekend" mean your today and your weekend, not a US one.

Supported leagues and competitions

219 competitions from every confederation.

RegionCompetitionsExamples
Europe (UEFA)86Premier League, Championship, LaLiga, Serie A, Bundesliga, Ligue 1, Eredivisie, Primeira Liga, Süper Lig, Scottish Premiership, Champions League, Europa League, Conference League, FA Cup, Copa del Rey, DFB-Pokal
South America (CONMEBOL)38Brasileirão Série A and B, Argentine Primera, Copa Libertadores, Copa Sudamericana, Colombian, Chilean, Peruvian, Uruguayan and Ecuadorian leagues
North and Central America (CONCACAF)32MLS, Liga MX, NWSL, USL Championship, Canadian Premier League, CONCACAF Champions Cup, Leagues Cup, Gold Cup
Asia and Oceania (AFC)18J.League, Saudi Pro League, Chinese Super League, Indian Super League, A-League, AFC Champions League Elite
Africa (CAF)8Africa Cup of Nations, CAF Champions League, CAF Confederation Cup, South African Premiership
International (FIFA)37FIFA World Cup and qualifiers, Club World Cup, Olympic football, international friendlies, club friendlies

39 of the 219 are women's competitions, such as the WSL, NWSL, Liga F, Frauen-Bundesliga, UEFA Women's Champions League and the Women's World Cup.

Search the full list in the Leagues field of the input form. You can also pick a League Group or a Country.

Why use this soccer data scraper?

  • Fixture and results feeds — Schedule a daily run and publish an up-to-date fixture list for any league, with kick-off times in your users' timezone.
  • Betting and prediction models — Get complete seasons with results, scorelines, goal minutes, team form and odds. The retrievedAt timestamp on each row lets you compare snapshots over time.
  • Live score widgets — Turn on In-Play Only and run every few minutes.
  • Club trackers — Filter by one club and get its league, cup and European matches together.
  • Player goal logs — Filter by player name to list every match in which a player scored or was booked.
  • Historical research and fantasy football — Download past seasons for analysis in Excel, Google Sheets, Python or R.

How to scrape soccer fixtures and results

  1. Click Try for free and sign in to Apify. A free account is enough.
  2. In Leagues, pick one or more competitions. Or pick a League Group, such as top5 or womens.
  3. In Date Range, pick the dates, for example Today, Next 7 days or A whole season.
  4. Optional: set your Output Timezone and add filters, such as a team, a player or a match status.
  5. Click Start. The run usually finishes in seconds.
  6. Open the Output tab. Download the data as JSON, CSV, Excel or HTML, or view it as a table.

Input

All fields are optional. With an empty input, you get the next 7 days of fixtures in the Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, MLS and the Argentine Liga Profesional.

FieldTypeDefaultDescription
leaguesstring[]top 5 European leagues, MLS, Argentina (only when no league, group or country is selected)Competitions by code, such as eng.1 (Premier League), esp.1 (LaLiga), ita.1 (Serie A), ger.1 (Bundesliga), fra.1 (Ligue 1), uefa.champions or usa.1 (MLS). The input form shows the name of every competition
leagueGroupsstring[][]Named bundles of leagues. See the table below
countriesstring[][]Every competition of a country, by name (England, Brazil) or by code (eng, esp, ita, ger, fra, bra, arg, usa, mex, jpn, ksa)
dateModestringnext7Daystoday, tomorrow, yesterday, thisWeek, thisWeekend, next7Days, last7Days, next30Days, last30Days, thisMonth, single, range, season
datestringtodayFor single. Format YYYYMMDD or YYYY-MM-DD
startDate, endDatestringtoday, today + 6 daysFor range. Format YYYYMMDD or YYYY-MM-DD. Up to 400 days
seasonYearintegercurrent seasonFor season. The year the season starts in: 2025 is 2025-26 in Europe and the 2025 season in Brazil or MLS
teamsstring[][]Only matches of these teams. A club name or part of one (liverpool), an abbreviation (LIV) or a team ID
homeAwayFilterstringallWith a team filter: home, away or all
matchStatusstring[]allpre (scheduled), in (in play), post (finished)
resultsstring[][]Only finished matches with these results: home, away, draw
liveOnlybooleanfalseOnly matches in play right now
startingWithinHoursinteger—Only matches that kick off within this many hours
minGoalsinteger—Only matches with at least this many goals
playersstring[][]Only matches in which one of these players scored or was booked
includeMatchEventsbooleantrueAdd the goals and cards timeline
includeTeamStatsbooleanfalseAdd possession, shots, corners and fouls
includeOddsbooleanfalseAdd moneyline, total and spread odds
maxMatchesinteger—The maximum number of rows
timezonestringUTCIANA timezone, such as Europe/London, America/New_York or Asia/Tokyo. It sets the local kick-off time and the calendar day of each match

leagues, leagueGroups and countries add together. For example, you can select the Premier League, all women's competitions and all Brazilian football in one run.

League groups

GroupLeaguesContents
top55Premier League, LaLiga, Serie A, Bundesliga, Ligue 1
europeTop16The top five plus the Netherlands, Portugal, Belgium, Turkey, Scotland, Austria, Greece, Sweden, Norway, Denmark and Russia
englishPyramid5Premier League down to the National League
uefaClub4Champions League, Europa League, Conference League, Super Cup
domesticCups13FA Cup, Carabao Cup, Copa del Rey, Coppa Italia, DFB-Pokal, Coupe de France and more
americasTop16MLS, Liga MX, Brasileirão, Argentine Primera, Libertadores, Sudamericana and more
asiaTop7J.League, Saudi Pro League, Chinese Super League, Indian Super League, A-League, AFC Champions League
africaTop4AFCON, CAF Champions League, CAF Confederation Cup, South African Premiership
internationalMen15World Cup and qualifiers, Euros, Copa América, Gold Cup, AFCON, Asian Cup, friendlies
womens39Every women's competition
uefa, conmebol, concacaf, afc, caf86 / 38 / 32 / 18 / 8Every competition of that confederation
all219Every competition

Input examples

Today's matches in the top five European leagues

{
"leagueGroups": ["top5"],
"dateMode": "today",
"timezone": "Europe/London"
}

A full Premier League season with every goal

{
"leagues": ["eng.1"],
"dateMode": "season",
"seasonYear": 2025,
"timezone": "Europe/London"
}

One club in every competition, next 30 days

{
"countries": ["eng"],
"leagues": ["uefa.champions"],
"dateMode": "next30Days",
"teams": ["liverpool"],
"timezone": "Europe/London"
}

Live scores from every league

{
"leagueGroups": ["all"],
"dateMode": "today",
"liveOnly": true
}

Upcoming fixtures with betting odds

{
"leagueGroups": ["top5", "uefaClub"],
"dateMode": "next7Days",
"matchStatus": ["pre"],
"includeOdds": true
}

High-scoring matches from the last 30 days

{
"leagueGroups": ["europeTop"],
"dateMode": "last30Days",
"minGoals": 5
}

A player's goals and cards in one season

{
"leagues": ["eng.1", "uefa.champions"],
"dateMode": "season",
"seasonYear": 2025,
"players": ["haaland"]
}

Output

You get one row per match. The Output tab has four table views: All Fixtures, Results, Upcoming Fixtures and Goals & Cards. Every run also saves a Run Summary.

{
"matchId": "401884790",
"sport": "soccer",
"league": "ger.1",
"leagueName": "German Bundesliga",
"leagueShortName": "Bundesliga",
"leagueCode": null,
"country": "Germany",
"confederation": "UEFA",
"season": {
"year": 2026,
"displayName": "2026-27 German Bundesliga",
"slug": "2026-27-german-bundesliga"
},
"date": "2026-09-18T18:30Z",
"dateLocal": "2026-09-18T19:30:00.000+01:00",
"dayLocal": "2026-09-18",
"name": "1. FC Union Berlin at Bayern Munich",
"shortName": "FCU @ MUN",
"status": {
"state": "post",
"name": "STATUS_FULL_TIME",
"completed": true,
"description": "Full Time",
"detail": "FT",
"clock": 5400,
"displayClock": "90'+3'",
"period": 2,
"decidedBy": "regulation",
"isPostponed": false,
"isCanceled": false,
"isAbandoned": false,
"playedOut": true
},
"result": "home",
"winner": "Bayern Munich",
"scoreline": "7-0",
"homeTeam": {
"id": "132",
"name": "Bayern Munich",
"shortName": "Bayern",
"abbreviation": "MUN",
"logo": "https://a.espncdn.com/i/teamlogos/soccer/500/132.png",
"score": 7,
"aggregateScore": null,
"shootoutScore": null,
"form": "WWWDW",
"record": "3-1-0",
"advanced": null
},
"awayTeam": {
"id": "598",
"name": "1. FC Union Berlin",
"shortName": "Union Berlin",
"abbreviation": "FCU",
"logo": "https://a.espncdn.com/i/teamlogos/soccer/500/598.png",
"score": 0,
"form": "LLLDW",
"record": "0-1-3"
},
"venue": {
"id": "1935",
"name": "Allianz Arena",
"city": "München",
"country": "Germany"
},
"attendance": 75000,
"leg": null,
"notes": [],
"broadcasts": ["Fandango"],
"headline": "Michael Olise scored his first Bayern Munich hat trick as the German champions romped to a 7-0 demolition of visiting Union Berlin.",
"url": "https://www.espn.com/soccer/match/_/gameId/401884790",
"retrievedAt": "2026-09-22T14:25:51.787Z",
"matchEvents": [
{
"type": "Goal",
"minute": "18'",
"teamSide": "home",
"playerName": "Jamal Musiala",
"isGoal": true,
"isOwnGoal": false,
"isPenalty": false,
"isYellowCard": false,
"isRedCard": false
},
{
"type": "Penalty - Scored",
"minute": "39'",
"teamSide": "home",
"playerName": "Harry Kane",
"isGoal": true,
"isPenalty": true
}
]
}

With Include Betting Odds on, each row also has an odds object:

{
"odds": {
"provider": "DraftKings",
"details": "MNC +135",
"overUnder": 2.5,
"homeMoneyline": "+175",
"awayMoneyline": "+135",
"drawMoneyline": "+260",
"overOdds": "-175",
"underOdds": "+130",
"homeSpread": "+0.5",
"homeSpreadOdds": "-190",
"awaySpreadOdds": "+125"
}
}

Odds are American odds. When there is both an opening and a closing price, you get the closing price.

Main output fields

FieldDescription
league, leagueName, country, confederationThe competition
seasonSeason year and name, such as 2026-27 German Bundesliga
date, dateLocal, dayLocalKick-off in UTC, kick-off in your timezone, and the calendar day in your timezone
status.statepre (scheduled), in (in play) or post (finished)
status.displayClock, status.periodThe match clock and the half, for live matches
resulthome, away, draw, or null if the match has no result yet
winnerThe name of the winning team. null for a draw
scorelineThe score, home team first, such as "2-1"
status.decidedByregulation, extraTime or penalties
status.playedOutfalse for postponed, cancelled and abandoned matches
homeTeam, awayTeamName, abbreviation, logo, score, form (last five results, newest first) and season record (wins-draws-losses)
venue, attendance, broadcastsStadium, crowd and TV channels
headline, urlMatch report headline and a link to the match page
matchEventsGoals and cards, with the minute, player and team
teamStatsPossession, shots, shots on target, corners and fouls, for each team
oddsMoneyline, total and spread
retrievedAtWhen the data was collected. The same value for every row of one run

Results after extra time and penalties

A match that is level after extra time is a draw in result, whoever wins the shootout. The shootout score is in homeTeam.shootoutScore and awayTeam.shootoutScore, and advanced shows which team went through.

Two-legged ties

leg is 1 or 2. aggregateScore on each team is the aggregate score, and advanced shows which team went through. result is always the result of the single match, not of the tie.

Use the scraper with the Apify API

You can run the scraper and read the results from any programming language with the Apify API. Get your API token in Apify Console under Settings → API & Integrations, and replace <YOUR_API_TOKEN> below.

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('hgservices/soccer-fixtures-scraper').call({
leagueGroups: ['top5'],
dateMode: 'next7Days',
timezone: 'Europe/London',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const match of items) {
console.log(match.dateLocal, match.homeTeam.name, 'v', match.awayTeam.name);
}

Python (apify-client 3.0 or later)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("hgservices/soccer-fixtures-scraper").call(run_input={
"leagues": ["eng.1"],
"dateMode": "season",
"seasonYear": 2025,
})
if run is None:
raise RuntimeError("The run was not found.")
for match in client.dataset(run.default_dataset_id).iterate_items():
print(match["dayLocal"], match["name"], match["scoreline"])

cURL — run the scraper and get the results in one call:

curl -X POST "https://api.apify.com/v2/acts/hgservices~soccer-fixtures-scraper/run-sync-get-dataset-items?format=json" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "leagues": ["eng.1", "esp.1"], "dateMode": "thisWeekend", "timezone": "Europe/London" }'

Change format=json to format=csv or format=xlsx to get a spreadsheet. The one-call endpoint waits up to 300 seconds. For a very large run, start it with POST /v2/acts/hgservices~soccer-fixtures-scraper/runs, and read the dataset when the run finishes, or use a webhook.

Use soccer data in Claude, ChatGPT and other AI assistants

This scraper works as a tool for AI assistants through the Apify MCP server. Your assistant can find the scraper, read its input options, run it, and use the match data in its answer.

Claude (claude.ai or Claude Desktop) — Go to Settings → Connectors, add a custom connector, and enter https://mcp.apify.com. Sign in to Apify when Claude asks.

Claude Code

$claude mcp add --transport http apify https://mcp.apify.com

ChatGPT — Turn on Developer mode in Settings → Apps & Connectors → Advanced settings. Then create a connector with the MCP server URL https://mcp.apify.com.

Cursor, VS Code and other MCP clients — Add https://mcp.apify.com as a remote MCP server. To give the assistant only this scraper, use https://mcp.apify.com?tools=hgservices/soccer-fixtures-scraper.

Then ask in plain language:

Use the Soccer Fixtures Scraper to list this weekend's Premier League and LaLiga matches with kick-off times in New York time.

Get Arsenal's results in all competitions this season and tell me their home and away record.

Which Serie A matches in the last 30 days had five or more goals, and who scored?

For the best results, tell the assistant the league, the dates and your timezone. This keeps the run fast and the cost low.

Integrations and scheduling

Connect the scraper to the tools you already use with Apify integrations: Google Sheets, Slack, Zapier, Make, n8n, Airbyte, Keboola, GitHub and more. You can also use webhooks to call your own endpoint when a run finishes.

Use Schedules in Apify Console to run the scraper automatically:

Use caseCronInput
Tomorrow's fixtures, every morning0 6 * * *dateMode: tomorrow
Weekend results, every Sunday night0 23 * * 0dateMode: thisWeekend, matchStatus: ["post"]
Live scores, every 5 minutes*/5 * * * *liveOnly: true
Next week's fixtures with odds, every Monday0 9 * * 1dateMode: next7Days, includeOdds: true
Season archive, every July0 3 1 7 *dateMode: season

Run summary

Every run saves a SUMMARY record in the key-value store. It tells you how many matches the run found, how many are scheduled, live or finished, and which leagues had no matches in your dates.

{
"totalMatches": 1304,
"scheduled": 0,
"inPlay": 0,
"finished": 1304,
"matchesBeforeFilters": 1304,
"leaguesRequested": 3,
"leaguesWithMatches": 3,
"emptyLeaguesCount": 0,
"emptyLeagues": [],
"dateMode": "season",
"window": { "season": 2025 },
"timezone": "Europe/London",
"retrievedAt": "2026-09-22T14:26:47.022Z"
}

How much does it cost to scrape soccer fixtures?

See the Pricing tab for the current price. Every Apify account gets free monthly platform credit, which is enough to try the scraper on real matches.

To keep the cost low:

  • Select only the leagues you need, or use a small League Group instead of all.
  • Use the shortest date range that gives you the data.
  • Set Maximum Fixtures to limit the number of rows.

The default memory of 512 MB is enough for most runs, including a full season of 20 leagues. A run over all 219 competitions for a whole season returns more than 30,000 rows and takes about 20 minutes. For a run of that size, set Memory to 1024 MB in the run options.

Data notes

  • No substitutions, line-ups or assists. The match timeline has goals and cards only.
  • Shootout kicks are not in the timeline. Read the shootout from each team's shootoutScore.
  • Odds are not available for every match. Odds are mostly available for upcoming matches in the larger leagues. Other rows have odds: null.
  • Team statistics start at kick-off. Scheduled matches have no teamStats, and the set of statistics changes from league to league.
  • Lower divisions have less detail. Attendance, venue, TV channels and headlines are less common below the top division.
  • Some tournaments are not played every year. World Cup qualifiers, the Olympics and the Copa América have matches only in their own years. A run for another year returns no rows for them.

FAQ

Do I need an API key or an account on a sports website? No. You need only an Apify account.

How far back can I get results? Many leagues have results for many past seasons. Use dateMode: season with a seasonYear, or a range of up to 400 days.

Why did my run return no rows? Usually there were no matches in your dates, for example during an international break or the off-season, or your filters matched nothing. The run log and the SUMMARY record show the leagues with no matches.

Can I get live scores? Yes. Set dateMode to today and turn on In-Play Only. Schedule the run every few minutes for a live feed.

What does "today" mean? Today in the Output Timezone you choose. A match at 02:00 in Tokyo is on a different day in London, and the scraper puts it on the correct day for your timezone.

Can I get fixtures for one team only? Yes. Put the club name in Team Filter, for example real madrid. Add the club's country in Countries and its European competition in Leagues to get every match it plays. A name also matches the club's women's and youth teams, for example "Liverpool" also finds Liverpool Women and Liverpool U21. To get only one team, select only the leagues it plays in.

Can I combine this data with other sports data? Yes. The ESPN Sports Scores & Schedules scraper covers the NFL, NBA, MLB, NHL and college sports. The league, team and player fields have the same names in both datasets. leagueCode (epl, laliga, ucl, mls) is the same key that scraper uses for those competitions.

Is it legal to scrape soccer fixtures and results? This scraper collects only public match information and never signs in. You are responsible for how you use the data, and for the terms of use of the data source.

Support

Did you find a bug, or do you need a field or a competition that is not here? Open an issue on the Issues tab. Custom solutions are available on request.

This scraper uses public data from ESPN. It is not affiliated with, endorsed by, or sponsored by ESPN.