# Sports API - Live Scores, Stats & Odds (Soccer, NBA, NHL, NFL) (`akhil_rajesh/sports-scraper`) Actor

Live scores, results and fixtures for soccer, basketball, hockey, American football, baseball, handball and volleyball: statistics, goals and cards, lineups, odds from every bookmaker, head-to-head, league tables and team schedules. Ask by date, league or team; no ids needed.

- **URL**: https://apify.com/akhil_rajesh/sports-scraper.md
- **Developed by:** [Akhil rajesh](https://apify.com/akhil_rajesh) (community)
- **Categories:** Sports, Developer tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Get **live scores, results, fixtures and league tables for soccer (football), basketball, ice hockey, American football, baseball, handball and volleyball** as clean JSON. Each match can come with **statistics, goals and cards, lineups, injured players, odds from every bookmaker with the opening price, and head-to-head**. Ask in plain terms, such as a date, a league ("Premier League", "NBA", "NHL") or a team ("Arsenal", "Lakers"). You don't need to look up or copy any ids.

- **Every match of a day, for several sports in one run.** Live, finished and scheduled matches, 7 days back or forward. The best-known competitions come first: the World Cup, the Champions League, the big five leagues, MLS, the NBA, EuroLeague, the NHL, KHL, NFL and MLB. A small **Max results** keeps the matches that matter most.
- **Soccer stats and match details in the same row.** Expected goals (xG), possession, shots, passes, corners and saves, for the match and each half. Goals with scorers and assists, cards and substitutions. Formations, lineups with player ratings, and missing players.
- **Basketball, hockey, NFL and MLB box-score data.** Shooting percentages, rebounds and assists; shots on goal, power plays and faceoffs; yards and first downs; hits, errors and home runs. Quarter, period and inning scores.
- **Odds that show how the market moved.** Every bookmaker's price with its opening price, the average and the best: 1X2 in soccer, handball and hockey, the money line elsewhere. For finished matches that's the closing price. Turn on **All odds markets** for over/under, both teams to score, handicaps and correct score.
- **League tables.** Overall, home, away and form tables, with conferences, divisions and groups, points, goal difference, form and the zone each place leads to.
- **Seasons and teams.** Every result and fixture of a league or cup season, older seasons included, and any team's latest results and next fixtures.
- **Only what changed.** On a schedule, output only new matches and matches whose score, status, red cards or odds moved.

No login, no API key and no proxy is needed. Runs are fast: a day's first 100 matches take about 2 seconds, 100 matches with every detail about 30 seconds, a whole Premier League season (380 matches) about 5 seconds.

### What you get for each match

| Field | Example |
|---|---|
| `sport`, `country`, `competition` | soccer, England, Premier League |
| `round` | Round 7, Quarter-finals (in Competitions and Teams modes, and for match links) |
| `homeTeam`, `awayTeam`, logos and links | France, Belgium |
| `status`, `statusDetail` | finished, live ("2nd Half", "3rd Quarter", "Half Time", "Break Time"), postponed, cancelled... |
| `homeScore`, `awayScore`, `score` | 4, 1, "4-1"; "1-1 (3-5 pen.)", "2-1 AET", "3-2 OT", "4-3 (1-0 SO)" |
| `periods` | each half, quarter, period, inning or set: `{"period": "1st Half", "home": 0, "away": 1}`, extra time and shoot-outs last |
| `regularTimeHome`, `extraTimeHome`, `shootoutHome` | the score after 90 minutes (what 1X2 bets settle on), after extra time, and the shoot-out |
| `redCardsHome`, `advancing`, `note` | soccer red cards; which side goes through a knockout tie; "First leg result: 1-1. Aggregate: 1-6." |
| `hitsHome`, `errorsHome`, `homePitcher` | baseball hits, errors and the pitchers of record |
| `referee`, `venue`, `city`, `attendance` | Walsh N., Stade de France, Paris - Saint-Denis, 75389 |
| `possessionHome`, `shotsHome`, `expectedGoalsHome`, `reboundsHome`, `shotsOnGoalHome`, `totalYardsHome`... | each sport's main statistics as columns; `statistics` lists them all, for the match and each period |
| `events` | goals (scorer, assists, score after), cards and reasons, substitutions, hockey penalties, touchdowns and field goals, shoot-out attempts |
| `lineups`, `homeFormation`, `missingPlayers` | starting players and substitutes with numbers, captains, goalkeepers and ratings; coaches; injured and suspended players |
| `oddsHome`, `oddsDraw`, `oddsAway`, `oddsOpeningHome`, `oddsBestHome`, `oddsBookmakers`, `odds` | 1.494 (average), 1.506 (opening), 1.55 (best), 20 bookmakers, each bookmaker's price |
| `headToHead`, `homeForm`, `awayForm` | earlier meetings with wins and draws; each team's last 10 results before the match, such as DWWLLWWWWW (newest first) |

Standings rows have `rank`, `team`, `played`, `wins`, `draws`, `losses`, `scoredFor`, `scoredAgainst`, `scoreDifference`, `points`, `winningPercentage`, `form` and `zone`, with `groupLevel` and `group` for conferences, divisions and groups. Hockey tables add overtime and shootout wins and losses. Team rows have the team's `form`, wins, draws and losses, and its next match.

### How to use it

Pick what to get under **What to get** and the **Sports**, then fill in the section for it. Every field has a sensible default.

#### Live scores and results by day

```json
{ "mode": "matches", "sports": ["soccer", "basketball", "hockey"], "date": "yesterday", "includeStatistics": true, "includeOdds": true }
```

`date` accepts `today`, `yesterday`, `tomorrow` or a date like `2026-10-05` (UTC), up to 7 days back or forward. `days` reads several days at once. Filter by `status` (live, finished, scheduled), `competitions` or `teams`. To follow live scores, use `"status": ["live"]`. It reads what's being played now, including matches that began before midnight UTC.

A weekend day can have more than 1,000 soccer matches (1,007 on Sunday 2026-10-04), so raise `maxResults` (100 by default) to get them all. When there are more matches than `maxResults`, it is shared among the sports, and each sport's best-known competitions come first, then live matches, then the rest by start time.

#### One league, one country, one team

```json
{ "mode": "matches", "sports": ["soccer"], "date": "today", "days": 3, "competitions": ["Premier League", "Champions League"] }
```

Write a competition as Flashscore names it ("LaLiga", "Serie A", "NBA", "NHL", "EuroLeague"). Add the country when the name exists in several countries ("England: Championship", "Brazil: Serie A"), or give a country alone ("Spain") for all its competitions. "Premier League" means England's. `teams` keeps the matches of the teams you name. A team name never matches the women's, youth or reserve side unless you write it ("Arsenal W", "Real Madrid B").

#### Exact matches by link

```json
{ "mode": "matches", "matchUrls": ["https://www.flashscore.com/match/EmmmJQ3L/"], "includeStatistics": true, "includeEvents": true, "includeLineups": true }
```

Links work for live and upcoming matches as well as finished ones, of any date.

#### Every match of a season

```json
{ "mode": "competitions", "competitions": ["Premier League"], "seasons": ["2024/2025"], "teams": ["Arsenal"], "maxResults": 100 }
```

Leave `seasons` empty for the current season, with all its fixtures still to come. The latest results come first, then the next fixtures. `"status": ["finished"]` keeps results only, `["scheduled"]` fixtures only. Seasons are written `2024/2025`, or `2025` for leagues played within one year (MLS, MLB, NPB). A link to one season (`…/premier-league-2024-2025/`) reads that season.

#### League tables

```json
{ "mode": "standings", "sports": ["soccer", "basketball", "hockey"], "competitions": ["Premier League", "NBA", "NHL"], "standingsTables": ["overall", "home", "away"] }
```

The NBA and NHL give their conference and division tables, and a cup's group stage gives each group. **Max results** counts rows per table and never cuts a conference, division or group short.

#### A team's results and fixtures

```json
{ "mode": "teams", "sports": ["soccer", "basketball"], "teams": ["Real Madrid", "Los Angeles Lakers"], "maxMatchesPerTeam": 20, "includeStatistics": true }
```

You get a row for each team (form, wins, draws, losses, next opponent), then its latest results and next fixtures, half of each.

### Match details and coverage

Turn on what you need; each detail is fetched only when asked for. Coverage measured on a Sunday's first matches in each sport (2026-10-04):

| Sport | Statistics | Events | Lineups | Odds |
|---|---|---|---|---|
| Soccer (150 matches, top leagues and lower ones) | 59% | 79% | 45% | 82% |
| Basketball (60) | 95% | none in this sport | 97% | 95% |
| Ice hockey (60) | 95% | 95% | 95% | 93% |
| American football (30) | 50% | 100% | none | 100% |
| Baseball (30) | 67% | none in this sport | 70% | 93% |
| Handball and volleyball (30 each) | none | none | rare | 17-43% |

Top competitions have every detail. Lower leagues, youth and women's football have fewer. Head-to-head and form are there for nearly every match. Every row has the score and each period's score.

### Only new or changed matches, on a schedule

Turn on **Only new or changed matches** and schedule the run, for example every 5 minutes for live scores, or every morning for yesterday's results. Each run then outputs only matches that are new since the last run of the same search, or whose status, score, period scores or red cards changed, or whose average odds moved by 5% or more since they were last output (odds that fail to load are no change). Each row is marked `changeType: "new"` or `"updated"`, and unchanged matches are neither output nor charged. When you follow live matches this way, a match that has ended since the last run is delivered once more with its final score, and a match whose details didn't all load comes again once they do. In Teams mode a team's row comes again only when its form, record or next match changed. **Max results** caps what each run outputs, shared among the sports or competitions; on a busy day the rest come in the following runs. Each search keeps its own history automatically. Give several schedules the same **History name** to share one; runs that overlap keep each other's entries.

### Use it as a sports API or from AI agents

Call it from your own code like any Apify Actor. This call waits for the run and returns the rows directly:

```bash
curl -X POST "https://api.apify.com/v2/acts/akhil_rajesh~sports-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "mode": "matches", "sports": ["soccer", "basketball"], "status": ["live"], "includeOdds": true }'
```

Through the [Apify MCP server](https://mcp.apify.com), assistants such as Claude, ChatGPT and Cursor can run this Actor as a tool. Add `https://mcp.apify.com?tools=akhil_rajesh/sports-scraper` as an MCP server, then ask in plain words, for example *"what's the Premier League table, and who plays this weekend?"* or *"show tonight's NBA games with the odds"*. Every input is plain text, such as names, dates or "live", so an agent never has to look up ids.

### Sample output

A finished match with every detail (lists shortened):

```json
{
  "recordType": "match",
  "sport": "soccer",
  "matchId": "EmmmJQ3L",
  "matchUrl": "https://www.flashscore.com/match/EmmmJQ3L/",
  "country": "Europe",
  "competition": "UEFA Nations League - League A",
  "startTime": "2026-10-05T18:45:00Z",
  "status": "finished",
  "statusDetail": "Finished",
  "homeTeam": "France",
  "awayTeam": "Belgium",
  "homeScore": 4,
  "awayScore": 1,
  "score": "4-1",
  "winner": "home",
  "periods": [{"period": "1st Half", "home": 0, "away": 1}, {"period": "2nd Half", "home": 4, "away": 0}],
  "referee": "Walsh N.",
  "venue": "Stade de France",
  "attendance": 75389,
  "expectedGoalsHome": 1.96, "expectedGoalsAway": 0.59,
  "possessionHome": 66, "possessionAway": 34,
  "shotsHome": 23, "shotsAway": 5,
  "cornersHome": 9, "cornersAway": 2,
  "statistics": [{"period": "Match", "group": "Top stats", "name": "Expected goals (xG)", "home": "1.96", "away": "0.59", "homeValue": 1.96, "awayValue": 0.59}],
  "events": [{"period": "1st Half", "time": "35'", "team": "away", "type": "Goal", "player": "Lukebakio D.", "assist": "Lavia R.", "scoreHome": 0, "scoreAway": 1},
             {"period": "2nd Half", "time": "57'", "team": "away", "type": "Yellow Card", "player": "Lavia R.", "detail": "Tripping, misses next match"}],
  "homeFormation": "1-4-3-3",
  "lineups": {"home": {"formation": "1-4-3-3", "rating": 7.2, "players": [{"name": "Akliouche M.", "number": 18, "starter": true, "rating": 7.2}], "coaches": [{"name": "Zidane Z."}]}},
  "missingPlayers": [{"team": "away", "player": "Courtois T.", "reason": "Rest", "club": "Real Madrid"}],
  "oddsMarket": "HOME_DRAW_AWAY",
  "oddsHome": 1.494, "oddsDraw": 4.497, "oddsAway": 5.598,
  "oddsOpeningHome": 1.506, "oddsBestHome": 1.55, "oddsBookmakers": 20,
  "headToHead": {"homeWins": 14, "draws": 6, "awayWins": 5, "meetings": [{"date": "2026-09-28T18:45:00Z", "home": "Belgium", "away": "France", "winner": "away", "score": "0-1"}]},
  "homeForm": "DWWLLWWWWW",
  "awayForm": "WLWLWWWDDW"
}
```

You can download the dataset as JSON, CSV, Excel or HTML. The Output tab has ready-made tables for matches, match details, odds, standings and teams.

### How much does it cost to scrape sports data?

This Actor uses pay-per-event pricing, and platform usage is included, so there's nothing else to pay. You pay for each row returned, plus **$0.001** each time a run starts. A match that comes with details costs **$0.002** more, whatever your plan. That one price covers statistics, events, lineups, odds and head-to-head together. The price per row depends on your Apify plan:

| Your plan | Per 1,000 rows | Per 1,000 matches with details |
|---|---|---|
| Free | $0.25 | $2.25 |
| Starter | $0.20 | $2.20 |
| Scale | $0.15 | $2.15 |
| Business and above | $0.10 | $2.10 |

| Run | Rows | On Free | On Business |
|---|---|---|---|
| Today's first 100 soccer matches, scores only (the default input) | 100 | $0.026 | $0.011 |
| 20 matches of three sports with statistics and odds (the example input) | 20 | $0.046 | $0.043 |
| 100 soccer matches with every detail | 100 | $0.226 | $0.211 |
| A whole Premier League season, results and fixtures | 380 | $0.096 | $0.039 |
| Five league tables (Premier League, LaLiga, NBA, NHL, NFL) | 228 | $0.058 | $0.024 |

Matches your filters leave out, and unchanged matches when **Only new or changed matches** is on, are not charged. To cap spending, set **Max results** or a maximum cost per run in the run options; the Actor stops cleanly at the limit.

### Input

| Field | Default | What it does |
|---|---|---|
| `mode` | `matches` | `matches`, `competitions`, `standings` or `teams` |
| `sports` | `soccer` | `soccer`, `basketball`, `hockey`, `american-football`, `baseball`, `handball`, `volleyball` |
| `date` | `today` | Matches mode: `today`, `yesterday`, `tomorrow` or `YYYY-MM-DD` (UTC), up to 7 days away |
| `days` | 1 | Matches mode: how many days from `date` |
| `status` | all | `live`, `finished`, `scheduled` |
| `competitions` | none | Names, `Country: Name`, countries or Flashscore links: a filter in Matches mode, what to read in Competitions and Standings modes |
| `teams` | none | Names or Flashscore team links: a filter in Matches and Competitions modes, the teams to read in Teams mode |
| `matchUrls` | none | Exact matches by Flashscore link or 8-character id |
| `includeStatistics` | off | Statistics for the match and each period |
| `includeEvents` | off | Goals, cards, substitutions, penalties, touchdowns... |
| `includeLineups` | off | Formations, lineups, coaches and missing players |
| `includeOdds` | off | Match-winner odds from every bookmaker, with opening prices |
| `includeAllOddsMarkets` | off | Also over/under, both teams to score, double chance, handicaps, correct score... |
| `includeHeadToHead` | off | Earlier meetings and each team's last 10 matches |
| `seasons` | current | Competitions and Standings modes: `2024/2025` or `2025` |
| `standingsTables` | `overall` | Standings mode: `overall`, `home`, `away`, `form` |
| `maxMatchesPerTeam` | 20 | Teams mode: latest results and next fixtures per team |
| `onlyChanges` | off | Only matches that are new or changed since the last run of the same search |
| `historyName` | automatic | The store that remembers earlier runs |
| `maxResults` | 100 | Most matches to return (rows per table in Standings mode, whole groups), shared among sports, competitions or teams |
| `proxy` | none | Optional; not needed |

### FAQ

**Where does the data come from?** Flashscore's public data feeds for scores, statistics, events, lineups, head-to-head, standings and season results, and Flashscore's odds comparison for odds.

**How live is "live"?** Each run reads the scores as they stand at that moment. Flashscore serves its day lists from a cache up to five minutes old, so the run applies the site's own live update feeds on top, as the site does: in a check of 41 live matches, every score and status then matched the match's own up-to-the-second feed, against 23 from the list alone. For a running feed, schedule the Actor every few minutes with **Only new or changed matches** on.

**Which sports and leagues are covered?** Seven sports, with every competition Flashscore lists in them, worldwide: one Sunday in October 2026 had 1,007 soccer matches in 287 competitions, from the Nations League to regional leagues. Tennis has its own Actor, the [Tennis API](https://apify.com/akhil_rajesh/tennis-scraper).

**Why is a score "1-1 (3-5 pen.)" and not 1-2?** A penalty shoot-out isn't added to the score in soccer and handball; it's in `shootoutHome` and `shootoutAway`, and `winner` names the side that won it. Hockey writes a shootout win as a goal, as the NHL does: 3-3 and a won shootout is 4-3.

**What are `regularTimeHome` and `regularTimeAway`?** The score at the end of regular time (90 minutes in soccer, 60 in hockey, four quarters), before extra time or overtime. 1X2 bets settle on it.

**Why do some matches have no statistics or lineups?** Lower leagues, youth and many women's competitions aren't covered with them, and basketball, baseball, handball and volleyball have no event list. Their scores, period scores, odds and head-to-head are still there. The coverage table above has the figures.

**What does "home" mean at a neutral ground?** "Home" and "away" are the two sides as the site lists them; `note` says when the ground was neutral.

**Can I get older seasons?** Yes, through Competitions mode with `seasons`. Matches by date reach 7 days back.

**What if Flashscore doesn't answer?** Each request is tried four times. A run that couldn't load anything you asked for fails, says what didn't load and why (for example HTTP 503), and charges nothing for the missing data, so run it again a few minutes later. When only part of it didn't load, you get the rest, and the status message names what to run again. "Not found" always means Flashscore answered and has no such competition, team or match.

**How are competition and team names matched?** With the site's search: the same name first (spaces and case aside, so `La Liga` is `LaLiga`), then a name that holds every word you typed (`Libertadores` is the Copa Libertadores, and one letter off is forgiven). The run says which it read. A name the search doesn't know is "Not found", never swapped for the search's best-known suggestion. A name that exists only in a sport you didn't choose (`NBA` with only soccer chosen) is read anyway, and the run says so.

### Other Actors by this developer

- [Tennis API - Live Scores, Stats & Odds (ATP, WTA, ITF)](https://apify.com/akhil_rajesh/tennis-scraper): tennis scores, statistics, point-by-point, odds and rankings
- [Google Hotels Scraper - Hotel Price Tracker & Comparison](https://apify.com/akhil_rajesh/google-hotels-scraper): hotel prices from Google Hotels, with booking-site rates and price tracking
- [SEEK, JobStreet & JobsDB Jobs Scraper](https://apify.com/akhil_rajesh/seek-jobstreet-jobsdb-scraper): jobs in Australia, New Zealand and six Asian markets
- [Indeed Jobs Scraper - Canada, US, UK, Australia & More](https://apify.com/akhil_rajesh/indeed-jobs-scraper): job listings from Indeed in eight countries
- [Price Tracker Canada - Best Buy, Walmart, Canada Computers](https://apify.com/akhil_rajesh/bot-wall-price-scraper): live price comparison across major Canadian retailers

### Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Flashscore, any league or any team. It reads publicly available data at a modest pace. Use the data in line with the source's terms and the laws that apply to you.

# Changelog

This Actor's version history is a separate document: https://apify.com/akhil_rajesh/sports-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Matches: matches by day (7 days back or forward), live now, or by link. Competitions: every result and fixture of a league or cup season, back many seasons. Standings: league tables, with groups, conferences and divisions. Teams: a team's latest results and next fixtures.

## `sports` (type: `array`):

Which sports to read. Competition and team names are looked up in these sports first; a name only another sport has (NBA with soccer chosen) is read too, and the run says so. Tennis has its own Actor (akhil_rajesh/tennis-scraper).

## `date` (type: `string`):

Matches mode: 'today', 'yesterday', 'tomorrow' or a date such as 2026-10-05 (UTC). Up to 7 days back or forward.

## `days` (type: `integer`):

Matches mode: how many days from the date. 3 with date 'yesterday' reads yesterday, today and tomorrow.

## `status` (type: `array`):

Keep only live, finished or scheduled matches. Empty keeps all. 'Live' alone reads what's being played now, whatever the date says. In Competitions and Teams modes, 'finished' gives results only and 'scheduled' fixtures only.

## `competitions` (type: `array`):

Matches mode: keep only these competitions. Competitions and Standings modes: the competitions to read. Use the name as Flashscore writes it ('Premier League', 'LaLiga', 'NBA', 'Champions League'), with the country when the name exists in several ('England: Championship'), a country alone ('Spain') for all its competitions in Matches mode, or a Flashscore competition link. A link to one season ('…/premier-league-2024-2025/') reads that season.

## `teams` (type: `array`):

Matches and Competitions modes: keep only matches of these teams. Teams mode: the teams to look up. A team name ('Arsenal', 'Lakers', 'Real Madrid') or a Flashscore team link; a name never matches a women's, youth or reserve side unless you write it ('Arsenal W', 'Real Madrid B').

## `matchUrls` (type: `array`):

Matches mode: exact matches by Flashscore match link or 8-character match id, of any date and status. When given, the date and filters are not used.

## `includeStatistics` (type: `boolean`):

Each sport's statistics for the whole match and each period: soccer's expected goals, possession, shots, passes and saves; basketball's shooting, rebounds and assists; hockey's shots on goal and power plays; yards and first downs; hits and home runs. Most professional leagues have them.

## `includeEvents` (type: `boolean`):

What happened, in order: goals with scorer, assists and the score after each, cards, substitutions, hockey penalties, touchdowns and field goals, shoot-out attempts. Basketball, baseball, handball and volleyball list period scores only.

## `includeLineups` (type: `boolean`):

Formations, starting players and substitutes with shirt numbers, captains, goalkeepers and player ratings, the coaches, and injured or suspended players.

## `includeOdds` (type: `boolean`):

The match-winner odds from every bookmaker Flashscore lists, with the opening price: the average, the best and each bookmaker's price (1X2 in soccer, handball and hockey, the money line elsewhere). For finished matches the price is the closing one.

## `includeAllOddsMarkets` (type: `boolean`):

Also over/under, both teams to score, double chance, draw no bet, handicaps, correct score, half time/full time and odd/even, per bookmaker and period. Turns Odds on.

## `includeHeadToHead` (type: `boolean`):

Past meetings of the two teams, and each team's last 10 matches with results, counting only what came before this match.

## `seasons` (type: `array`):

Competitions and Standings modes: seasons to read, written 2024/2025 or, for leagues played in one year, 2025. Empty reads the current season, with its fixtures.

## `standingsTables` (type: `array`):

Standings mode: which tables to read.

## `maxMatchesPerTeam` (type: `integer`):

Teams mode: how many of each team's matches to add, half latest results and half next fixtures (up to about 40 of each are available). 0 returns the team row only.

## `onlyChanges` (type: `boolean`):

For scheduled runs: output only matches that are new since the last run of the same search, or whose status, score, red cards or odds changed. Unchanged matches are not output or charged. Max results caps what each run outputs; the rest come in the next runs. Each search keeps its own history.

## `historyName` (type: `string`):

Optional. Name of the store that remembers earlier runs. Empty gives each search its own; set the same name on several schedules to share one.

## `maxResults` (type: `integer`):

The most matches to return (standings rows per table in Standings mode, where a table split into conferences, divisions or groups is cut only between them). It is shared among the sports, competitions or teams asked for. When a day has more, each sport's best-known competitions come first (World Cup, Champions League, the big leagues, NBA, NHL, NFL, MLB...), then live matches, then by start time; a competition's season gives its latest results first, then its next fixtures.

## `proxy` (type: `object`):

Optional. The sources answer ordinary requests, so no proxy is needed. Residential proxies aren't used.

## Actor input object example

```json
{
  "mode": "matches",
  "sports": [
    "soccer",
    "basketball",
    "hockey"
  ],
  "date": "yesterday",
  "days": 1,
  "status": [],
  "competitions": [],
  "teams": [],
  "matchUrls": [],
  "includeStatistics": true,
  "includeEvents": false,
  "includeLineups": false,
  "includeOdds": true,
  "includeAllOddsMarkets": false,
  "includeHeadToHead": false,
  "seasons": [],
  "standingsTables": [
    "overall"
  ],
  "maxMatchesPerTeam": 20,
  "onlyChanges": false,
  "maxResults": 20
}
```

# Actor output Schema

## `matches` (type: `string`):

No description

## `details` (type: `string`):

No description

## `odds` (type: `string`):

No description

## `standings` (type: `string`):

No description

## `teams` (type: `string`):

No description

## `allData` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sports": [
        "soccer",
        "basketball",
        "hockey"
    ],
    "date": "yesterday",
    "includeStatistics": true,
    "includeOdds": true,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("akhil_rajesh/sports-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sports": [
        "soccer",
        "basketball",
        "hockey",
    ],
    "date": "yesterday",
    "includeStatistics": True,
    "includeOdds": True,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("akhil_rajesh/sports-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sports": [
    "soccer",
    "basketball",
    "hockey"
  ],
  "date": "yesterday",
  "includeStatistics": true,
  "includeOdds": true,
  "maxResults": 20
}' |
apify call akhil_rajesh/sports-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,akhil_rajesh/sports-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eebbqKtQdktvCtcIu/builds/DtVWPzQhWkqhQkmDt/openapi.json
