# SofaScore Live Scores, Standings & Team Search Data (`vexaloom-labs/sofascore-live-scores-standings-and-team-search`) Actor

Get SofaScore live scores, scheduled fixtures, league standings and team/player/tournament search results across 17 sports including football, basketball and tennis.

- **URL**: https://apify.com/vexaloom-labs/sofascore-live-scores-standings-and-team-search.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** Automation, Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## SofaScore Live Scores, Standings & Match Data

Scrape **SofaScore** live scores, fixtures, league tables, team and player profiles, match statistics, lineups, odds and rankings across 25 sports. Search by name, paste SofaScore URLs, or pull every live and scheduled match. No login, API key or proxy setup.

### What this actor does

- **Nine ways in:** search by name, live events, fixtures by date, team profile, player profile, tournament profile, standings, match detail by ID/URL, and rankings.
- **25 sports:** football, basketball, tennis, ice hockey, cricket, MMA, esports, volleyball, handball, rugby, and more.
- **Match depth on demand:** statistics, lineups with ratings, incidents, odds, crowd votes, head-to-head, shotmap, momentum, average positions, best players, win probability, managers, streaks and commentary.
- **Team and player data:** squad lists, manager, venue, market value, contract, nationality and per-competition season statistics.
- **Leagues and rankings:** overall, home and away tables, group tables, FIFA, UEFA, ATP, WTA, UTR, FIP, rugby, UFC and FNC rankings.
- **Empty fields are omitted** — a field SofaScore does not publish for a record is left out, never filled with `null` or a placeholder.

### Output per record

Every row has a `recordType`, a `sofascoreUrl` where one exists, and `scrapedAt`.

#### `recordType: "event"`

- `eventId`, `slug`, `sport`, `startTime`, `startTimestamp`, `status`, `statusCode`, `statusDescription`, `winnerCode`
- `homeTeam` / `awayTeam` — id, name, slug, shortName, nameCode, logoUrl, teamColors, countryCode, manager
- `homeScore` / `awayScore`, `currentPeriod`, `matchTime`
- `tournamentName`, `tournamentId`, `uniqueTournamentId`, `uniqueTournamentName`, `categoryName`, `country`, `countryCode`
- `seasonName`, `seasonId`, `seasonYear`, `round`, `roundName`
- `venue`, `city`, `venueCapacity`, `venueCoordinates`, `referee`, `refereeCountry`, `attendance`
- `hasStatistics`, `hasXg`, `hasHighlights`
- Optional: `statistics`, `lineups`, `incidents`, `odds`, `votes`, `h2h`, `advanced` (shotmap, momentum, average positions, best players, win probability, managers, team streaks, pre-game form), `comments`

#### `recordType: "team"`

- `teamId`, `name`, `slug`, `shortName`, `fullName`, `nameCode`, `sport`
- `country`, `countryCode`, `category`, `tournamentId`, `tournamentName`, `uniqueTournamentId`
- `manager`, `managerCountry`, `venue`, `venueCapacity`, `venueCity`, `foundationDate`
- `teamColors`, `userCount`, `national`, `gender`, `class`, `primaryTournament`, `pregameForm`
- Optional: `squad`, `events`

#### `recordType: "player"`

- `playerId`, `name`, `slug`, `shortName`, `position`, `positionsDetailed`, `jerseyNumber`, `height`, `preferredFoot`
- `dateOfBirth`, `country`, `countryCode`, `teamId`, `teamName`
- `marketValue`, `marketValueCurrency`, `contractUntil`, `userCount`, `sofascoreId`, `gender`
- Optional: `statistics` (per competition and season)

#### `recordType: "standingsRow"`

- `teamId`, `teamName`, `teamSlug`, `teamLogoUrl`, `teamCountryCode`
- `position`, `wins`, `draws`, `losses`, `points`, `gamesPlayed`, `goalsFor`, `goalsAgainst`, `goalDifference`
- `tournamentName`, `tournamentId`, `seasonName`, `seasonId`, `groupName`, `tableType`, `promotion`, `avgRating`

#### `recordType: "tournament"`

- `tournamentId`, `name`, `slug`, `sport`, `category`, `country`, `countryCode`, `userCount`
- `seasons`, `standings` (when requested), `currentRound` (when standings are requested)

#### `recordType: "searchResult"`

- `type`, `id`, `name`, `slug`, `sport`, `sportSlug`, `country`, `countryCode`
- `score`, `teamColors`, `imageUrl`, `teamId`, `playerId`, `tournamentId`, `eventId`
- Event fields when the result is a match; position, shirt number and market value when it is a player.

#### `recordType: "rankingRow"`

- `rankingTypeId`, `rankingTypeName`, `position`, `previousPosition`, `bestPosition`
- `id`, `name`, `teamId`, `teamName`, `teamSlug`, `country`, `countryCode`
- `points`, `previousPoints`, `year`, `tournamentsPlayed`, `playingTeams`, `totalTeams`, `updatedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search`, `live`, `scheduled`, `team`, `player`, `tournament`, `standings`, `event`, `rankings` |
| `searchQueries` | array | – | Names to resolve (mode=search) |
| `searchType` | string | `all` | `all`, `team`, `player`, `tournament`, `event` |
| `sports` | array | `["football"]` | Sports for live/scheduled modes |
| `date` | string | – | Start date for fixtures, `YYYY-MM-DD`; defaults to today UTC (mode=scheduled) |
| `daysAhead` | integer | `0` | Extra days after `date` (0–31) |
| `teamIds` | array | – | Team IDs or URLs (mode=team) |
| `playerIds` | array | – | Player IDs or URLs (mode=player) |
| `tournamentIds` | array | – | Tournament IDs or URLs (modes tournament, standings) |
| `eventIds` | array | – | Match IDs or URLs (mode=event) |
| `seasonId` | integer | – | Optional season for standings/tournament |
| `tableType` | string | `total` | `total`, `home`, `away` |
| `rankingType` | string | `fifa` | FIFA, UEFA, ATP, WTA, UTR, FIP, rugby, UFC or FNC table. SofaScore publishes at most 500 rows per table. |
| `includeStatistics` | boolean | `true` | Match statistics |
| `includeLineups` | boolean | `true` | Lineups and player ratings |
| `includeIncidents` | boolean | `true` | Goals, cards and substitutions |
| `includeOdds` | boolean | `false` | Pre-match odds markets |
| `includeVotes` | boolean | `false` | Crowd prediction polls |
| `includeH2h` | boolean | `false` | Head-to-head tallies |
| `includeAdvanced` | boolean | `false` | Shotmap, momentum, positions, best players, win probability, managers, streaks, pre-game form |
| `includeComments` | boolean | `false` | Text commentary (large payload) |
| `includeSquad` | boolean | `false` | Full squad on team records |
| `includePlayerStats` | boolean | `false` | Per-competition season stats on player records |
| `includeStandings` | boolean | `false` | League table on tournament records |
| `includeEvents` | boolean | `false` | Recent/upcoming events on team records |
| `maxItems` | integer | `50` | Record cap; `0` means no user limit (hard cap 10,000) |

#### Example: live football and basketball

```json
{
  "mode": "live",
  "sports": ["football", "basketball"],
  "maxItems": 30
}
```

#### Example: a day of fixtures

```json
{
  "mode": "scheduled",
  "sports": ["football", "tennis"],
  "date": "2026-10-28",
  "daysAhead": 1,
  "maxItems": 100
}
```

#### Example: a match with all detail

```json
{
  "mode": "event",
  "eventIds": ["13981670"],
  "includeStatistics": true,
  "includeLineups": true,
  "includeIncidents": true,
  "includeOdds": true,
  "includeH2h": true,
  "includeAdvanced": true
}
```

#### Example: Premier League table

```json
{
  "mode": "standings",
  "tournamentIds": ["17"],
  "seasonId": 76986,
  "tableType": "total",
  "maxItems": 30
}
```

#### Example: FIFA rankings

```json
{
  "mode": "rankings",
  "rankingType": "fifa",
  "maxItems": 200
}
```

### Use cases

- **Live scoreboards** — poll live matches and push score/status updates to a dashboard or alerting pipeline.
- **Fixture calendars** — build daily or multi-day schedules across several sports.
- **Betting research** — combine odds, votes, head-to-head and match statistics in one row per game.
- **Team and player scouting** — pull squads, market values, contracts and season statistics.
- **League monitoring** — track overall, home and away tables over time.
- **Ranking trackers** — follow FIFA, UEFA, ATP, WTA, UTR, FIP, rugby and UFC standings.

### FAQ

#### Do I need a SofaScore account, API key or proxy?

No. The actor handles access automatically and needs no login, API key or proxy setup.

#### Which sports are supported?

Football, basketball, tennis, American football, Australian rules, ice hockey, handball, rugby, futsal, minifootball, floorball, volleyball, badminton, table tennis, padel, snooker, baseball, cricket, esports, darts, MMA, cycling, motorsport, water polo and bandy. Live coverage varies by time of day.

#### Why does `live` return no rows?

There may simply be no match in progress for the selected sports. Use `scheduled` with today's date or `search` to confirm a team exists.

#### How do I find a team, player or tournament ID?

Run `mode=search` with the name and use the `id` from the result, or paste the SofaScore page URL directly into `teamIds`, `playerIds`, `tournamentIds` or `eventIds`.

#### Why do ranking tables stop at 500 rows?

SofaScore publishes at most 500 rows per ranking table, so `maxItems` above 500 cannot add more. A row's `position` is its place in that table.

#### Why are some fields missing?

SofaScore does not publish every field for every match, competition or sport. Missing fields are omitted; they are not replaced with nulls or placeholders.

#### Are scores live?

`live` returns the current score and status at the moment the actor runs. It polls SofaScore; it is not a push/streaming feed.

#### Can I get historical fixtures?

Yes. Use `scheduled` with a past `date` and `daysAhead: 0`.

#### Why do season IDs change?

SofaScore creates a new season ID each year. The actor resolves the latest season automatically for standings and tournaments; pass `seasonId` only when you need a specific historical season.

#### Is this affiliated with SofaScore?

No. This is an independent third-party actor that reads publicly available SofaScore data. It is not affiliated with, endorsed by or sponsored by SofaScore.

# Actor input Schema

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

What to fetch from SofaScore.

## `searchQueries` (type: `array`):

Team, player, tournament or match names to resolve (mode=search).

## `searchType` (type: `string`):

Restrict search results to one entity type (mode=search).

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

Sports for live and scheduled modes. Supported: football, basketball, tennis, american-football, aussie-rules, ice-hockey, handball, rugby, futsal, minifootball, floorball, volleyball, badminton, table-tennis, padel, snooker, baseball, cricket, esports, darts, mma, cycling, motorsport, waterpolo, bandy.

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

Start date for fixtures (mode=scheduled), format YYYY-MM-DD. Defaults to today UTC.

## `daysAhead` (type: `integer`):

Number of extra days after Date to include (mode=scheduled).

## `teamIds` (type: `array`):

SofaScore team IDs or team page URLs (mode=team).

## `playerIds` (type: `array`):

SofaScore player IDs or player page URLs (mode=player).

## `tournamentIds` (type: `array`):

SofaScore unique-tournament IDs or tournament page URLs (modes tournament, standings).

## `eventIds` (type: `array`):

SofaScore match IDs or match page URLs (mode=event).

## `seasonId` (type: `integer`):

Optional season ID for standings or tournament mode. If omitted, the latest season with a table is used.

## `tableType` (type: `string`):

Standings table to fetch (modes standings, tournament).

## `rankingType` (type: `string`):

Ranking table to fetch (mode=rankings).

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

Add team and player statistics to match records.

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

Add lineups, formations and player ratings to match records.

## `includeIncidents` (type: `boolean`):

Add goals, cards and substitutions to match records.

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

Add pre-match odds markets to match records.

## `includeVotes` (type: `boolean`):

Add crowd prediction polls to match records.

## `includeH2h` (type: `boolean`):

Add head-to-head win/draw tallies to match records.

## `includeAdvanced` (type: `boolean`):

Add shotmap, momentum, average positions, best players, win probability, managers, streaks and pre-game form.

## `includeComments` (type: `boolean`):

Add the text commentary feed to match records. This is a large payload.

## `includeSquad` (type: `boolean`):

Add the full squad to team records (mode=team).

## `includePlayerStats` (type: `boolean`):

Add per-competition season statistics to player records (mode=player).

## `includeStandings` (type: `boolean`):

Add the league table to tournament records (mode=tournament).

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

Add recent and upcoming events to team records (mode=team).

## `maxItems` (type: `integer`):

Maximum number of records to return. 0 means no user limit (hard cap 10,000).

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "Real Madrid"
  ],
  "searchType": "all",
  "sports": [
    "football"
  ],
  "daysAhead": 0,
  "tableType": "total",
  "rankingType": "fifa",
  "includeStatistics": true,
  "includeLineups": true,
  "includeIncidents": true,
  "includeOdds": false,
  "includeVotes": false,
  "includeH2h": false,
  "includeAdvanced": false,
  "includeComments": false,
  "includeSquad": false,
  "includePlayerStats": false,
  "includeStandings": false,
  "includeEvents": false,
  "maxItems": 3
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing all scraped SofaScore records.

# 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 = {
    "mode": "search",
    "searchQueries": [
        "Real Madrid"
    ],
    "searchType": "all",
    "sports": [
        "football"
    ],
    "daysAhead": 0,
    "tableType": "total",
    "rankingType": "fifa",
    "includeStatistics": false,
    "includeLineups": false,
    "includeIncidents": false,
    "includeOdds": false,
    "includeVotes": false,
    "includeH2h": false,
    "includeAdvanced": false,
    "includeComments": false,
    "includeSquad": false,
    "includePlayerStats": false,
    "includeStandings": false,
    "includeEvents": false,
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/sofascore-live-scores-standings-and-team-search").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 = {
    "mode": "search",
    "searchQueries": ["Real Madrid"],
    "searchType": "all",
    "sports": ["football"],
    "daysAhead": 0,
    "tableType": "total",
    "rankingType": "fifa",
    "includeStatistics": False,
    "includeLineups": False,
    "includeIncidents": False,
    "includeOdds": False,
    "includeVotes": False,
    "includeH2h": False,
    "includeAdvanced": False,
    "includeComments": False,
    "includeSquad": False,
    "includePlayerStats": False,
    "includeStandings": False,
    "includeEvents": False,
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/sofascore-live-scores-standings-and-team-search").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 '{
  "mode": "search",
  "searchQueries": [
    "Real Madrid"
  ],
  "searchType": "all",
  "sports": [
    "football"
  ],
  "daysAhead": 0,
  "tableType": "total",
  "rankingType": "fifa",
  "includeStatistics": false,
  "includeLineups": false,
  "includeIncidents": false,
  "includeOdds": false,
  "includeVotes": false,
  "includeH2h": false,
  "includeAdvanced": false,
  "includeComments": false,
  "includeSquad": false,
  "includePlayerStats": false,
  "includeStandings": false,
  "includeEvents": false,
  "maxItems": 3
}' |
apify call vexaloom-labs/sofascore-live-scores-standings-and-team-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/sofascore-live-scores-standings-and-team-search"
        }
    }
}
```

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/6CGFPyX8guKwUQVkG/builds/q6GdIjB6lSnB3zonj/openapi.json
