# Flashscore Teams & Players: Squads, Transfers (`incognito_mode/flashscore-team-player-scraper`) Actor

Scrape Flashscore team and player profiles: squads with season stats, full match history, transfers with fees, market values, contracts, career stats per season, last-match ratings and injury history. Football, basketball, hockey and more. Search by name. No API key.

- **URL**: https://apify.com/incognito\_mode/flashscore-team-player-scraper.md
- **Developed by:** [Elena Vance](https://apify.com/incognito_mode) (community)
- **Categories:** Sports, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.55 / 1,000 player profiles

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

## Flashscore Teams & Players: Squads, Transfers

Scrape **team and player profiles** from Flashscore for football,
basketball, hockey and every other team sport it covers. For a team you get
the squad with season stats, the full match history, upcoming fixtures and
transfers with fees. For a player you get club, market value, contract
expiry, career stats for every season, the last 10 matches with ratings,
transfers and injury history.

- **Search by name.** Type "Real Madrid" or "Bukayo Saka". You don't need
  to find Flashscore URLs.
- **A team's whole history** if you want it. Arsenal's 5,077 results go
  back more than a century, and every transfer since the 1970s comes too,
  in under two minutes.
- **Market values and contracts.** These are the header fields Flashscore
  shows for footballers: market value (`€113.9m` plus a number),
  contract expiry and date of birth.
- **One switch for the whole squad.** Turn on full profiles for every squad
  member and a single team URL returns about 30 complete player profiles.
- **No API key, no browser, no proxy.** Runs are fast and cheap.

***

### What can it scrape?

| Data | What you get |
| --- | --- |
| **Team profile** | Name, sport, country, logo, stadium, city, capacity, FIFA ranking (national teams), coach, squad size, current competitions, size of the match archive |
| **Squad** | Every player and coach: shirt number, position group, nationality, age, current injury or suspension, and season stats (matches, minutes, goals, assists, cards; points, save % and goals-against average for hockey). One table for all competitions, or one per competition |
| **Results** | Past matches newest first, from the team's side: competition, venue, opponent, W/D/L, score, half-time and period scores, extra time and penalties |
| **Fixtures** | Every scheduled match |
| **Transfers (team)** | Arrivals and departures: date, player, nationality, from/to club, type (transfer, loan, return, free agent) and fee as a number |
| **Player profile** | Club, position, age, date of birth, market value, contract expiry, height, photo, current injury, career totals |
| **Career** | One row per season, club and competition (league, domestic cup, international cup, national team): matches, goals, assists, cards, rating, clean sheets. Basketball rows are per-game averages |
| **Last matches** | The 10 most recent matches with Flashscore rating, minutes, goals, assists, saves (or points, rebounds and steals), and why the player missed a match |
| **Transfers (player)** | Every career move with fee |
| **Injuries** | Injury history with dates, flagging any current injury |

Sports: football, basketball, hockey, handball, volleyball, American
football, baseball, rugby, futsal and any other team sport with team pages
on Flashscore. Tennis and other individual-sport players use a different
page type and are skipped, with a free note in the dataset.

***

### Output example

Each row has a `recordType`: `team`, `squadPlayer`, `match`, `transfer`,
`player`, `careerSeason`, `playerMatch` or `injury`. The dataset has one view
for each.

```json
{
  "recordType": "player",
  "player": "Bukayo Saka",
  "playerId": "08NLEo06",
  "sport": "football",
  "position": "Forward",
  "team": "Arsenal",
  "teamUrl": "https://www.flashscore.com/team/arsenal/hA1Zm19f/",
  "nationality": "England",
  "age": 25,
  "dateOfBirth": "2001-09-05",
  "marketValue": "€113.9m",
  "marketValueAmount": 113900000,
  "marketValueCurrency": "EUR",
  "contractExpires": "2030-06-30",
  "careerTotals": {
    "league": { "matchesPlayed": 255, "goals": 73, "assists": 50, "yellowCards": 28, "redCards": 0 },
    "national-team": { "matchesPlayed": 73, "goals": 21, "assists": 13 }
  },
  "url": "https://www.flashscore.com/player/saka-bukayo/08NLEo06/"
}
```

```json
{
  "recordType": "squadPlayer",
  "team": "Arsenal",
  "squadScope": "Total",
  "positionGroup": "Defenders",
  "player": "Mosquera Cristhian",
  "jerseyNumber": 3,
  "nationality": "Spain",
  "age": 22,
  "absence": "Muscle Injury",
  "matchesPlayed": 3,
  "minutesPlayed": 259,
  "goals": 0,
  "assists": 0,
  "playerUrl": "https://www.flashscore.com/player/mosquera-cristhian/4O15XViB/"
}
```

```json
{
  "recordType": "transfer",
  "source": "team",
  "team": "Arsenal",
  "date": "2026-09-02",
  "direction": "out",
  "transferType": "Transfer",
  "fee": "€70.0m",
  "feeAmount": 70000000,
  "player": "Martinelli Gabriel",
  "nationality": "Brazil",
  "fromTeam": "Arsenal",
  "toTeam": "Al Hilal"
}
```

```json
{
  "recordType": "match",
  "team": "Arsenal",
  "competition": "Premier League",
  "competitionCountry": "England",
  "startTime": "2026-09-19T14:00:00Z",
  "status": "finished",
  "venue": "away",
  "opponent": "Brighton",
  "result": "L",
  "homeTeam": "Brighton",
  "awayTeam": "Arsenal",
  "homeScore": 3,
  "awayScore": 0,
  "halfTimeScore": "2-0",
  "periodScores": [{ "home": 2, "away": 0 }, { "home": 1, "away": 0 }],
  "decidedBy": "regular-time",
  "url": "https://www.flashscore.com/match/j52jHsN8/"
}
```

```json
{
  "recordType": "careerSeason",
  "player": "LeBron James",
  "season": "2025/2026",
  "competitionType": "league",
  "competition": "NBA",
  "team": "Los Angeles Lakers",
  "statsPerGame": true,
  "matchesPlayed": 69,
  "minutesPlayed": 33.9,
  "points": 21.3,
  "rebounds": 6,
  "assists": 7.2
}
```

***

### How to use it

Give it team URLs, player URLs or plain names, in any combination.

**A club's squad, recent form and transfer window:**

```json
{ "teamUrls": ["https://www.flashscore.com/team/arsenal/hA1Zm19f/"] }
```

**Players by name: profiles, market values and careers:**

```json
{ "searchQueries": ["Bukayo Saka", "Declan Rice", "Erling Haaland"],
  "playerSections": ["profile", "career"] }
```

**Every player in a squad, with full profiles:**

```json
{ "teamUrls": ["https://www.flashscore.com/team/real-madrid/W8mj7MDD/"],
  "teamSections": ["profile", "squad"],
  "scrapeSquadPlayers": true }
```

**A team's complete match history for modelling:**

```json
{ "teamUrls": ["https://www.flashscore.com/team/arsenal/hA1Zm19f/"],
  "teamSections": ["results"], "maxResultsPerTeam": 0 }
```

**A hockey team, found by name:**

```json
{ "searchQueries": ["Rapperswil-Jona"], "searchSport": "hockey" }
```

#### Tips

- **Name search** picks Flashscore's best team or team-sport player match.
  Some names belong to clubs in several sports. Set `searchSport` to choose
  one.
- **`maxResultsPerTeam`** and **`maxTransfersPerTeam`** default to the 50
  newest. Set either to `0` for everything Flashscore has.
- **Squad stats** cover the current season. `squadScope` is `Total` (all
  competitions) unless you turn on `squadPerCompetition`.
- **Basketball career rows are per-game averages** (`statsPerGame: true`).
  Career totals keep only counts, because a sum of averages means nothing.
- **Coaches** have player pages too. Their `role` is `coach`, and their
  career rows are from their playing days.
- A URL whose name part is wrong returns a free `TEAM_NOT_FOUND` /
  `PLAYER_NOT_FOUND` row. Flashscore needs both the name and the id.

***

### Pricing

Pay per event. You are charged only for rows you receive:

| Row | Price |
| --- | ---: |
| Player profile | $0.003 |
| Team profile | $0.002 |
| Squad member | $0.001 |
| Match (result or fixture) | $0.0005 |
| Transfer | $0.0005 |
| Player detail (career season, last match or injury) | $0.0002 |

Some examples:

- A club with default settings (profile, ~30 squad members, 50 results,
  \~40 fixtures, 50 transfers) costs about **$0.10**.
- A player with everything (profile, ~50 career seasons, 10 matches, ~20
  injuries) costs about **$0.02**.
- Arsenal's complete history of 5,077 results costs **$2.54**.

Invalid input, unknown teams or players and failed searches are never
charged. The run stops cleanly when it reaches your maximum charge.

***

### FAQ

**Is it legal to scrape Flashscore?** This Actor only collects publicly
visible sports data, without logging in. You are responsible for how you use
the data. Check Flashscore's terms and your local laws before using it
commercially.

**Why is the market value missing for some players?** Flashscore shows
market values for footballers only, and not for every one. Height appears
for basketball players. Anything else Flashscore lists in a player's header
goes into `otherInfo`.

**Can I get more than the last 10 matches of a player?** A player page
holds 10. For a full match list, scrape the player's team history with
`maxResultsPerTeam: 0`.

**Can I get league tables or whole seasons?** That's the Flashscore League
Archive Actor on this account.

***

### Ready-made examples

Open one, press **Try for free**, and change the input to your own:

- [Get Arsenal's squad, stats and transfers](https://apify.com/incognito_mode/flashscore-team-player-scraper/examples/arsenal-squad-and-transfers)
- [Look up football players' market value and stats](https://apify.com/incognito_mode/flashscore-team-player-scraper/examples/football-player-market-values)
- [Get transfer history with fees for top clubs](https://apify.com/incognito_mode/flashscore-team-player-scraper/examples/football-club-transfers-with-fees)
- [Get NBA team rosters with player stats](https://apify.com/incognito_mode/flashscore-team-player-scraper/examples/nba-team-rosters)

### More Flashscore Actors

Same data source, same flat rows and pay-per-result pricing:

- [Flashscore Betting Odds Scraper](https://apify.com/incognito_mode/flashscore-odds-scraper) — pre-match odds from 100+ bookmakers with opening prices, plus outright winner odds
- [Flashscore Odds Movement Tracker](https://apify.com/incognito_mode/flashscore-odds-tracker) — line movement and exact closing lines on a schedule
- [Flashscore Match Stats Scraper](https://apify.com/incognito_mode/flashscore-match-stats-scraper) — player stats with xG, lineups, box scores and team stats per match
- [Flashscore League Archive](https://apify.com/incognito_mode/flashscore-league-archive-scraper) — every season's results, tables and top scorers, back to 1901
- [Flashscore Tennis Scraper](https://apify.com/incognito_mode/flashscore-tennis-scraper) — ATP/WTA results, serve stats, point-by-point, draws and rankings

# Actor input Schema

## `teamUrls` (type: `array`):

Flashscore team pages, any team sport and any Flashscore edition (.com, .co.uk ...), e.g. https://www.flashscore.com/team/arsenal/hA1Zm19f/. Sub-pages such as .../squad/ work too.

## `playerUrls` (type: `array`):

Flashscore player or coach pages, e.g. https://www.flashscore.com/player/saka-bukayo/08NLEo06/.

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

Team or player names, e.g. "Real Madrid" or "Bukayo Saka". Each name scrapes Flashscore's best team or team-sport player match.

## `searchSport` (type: `string`):

Only match names in this sport ("Rapperswil" is both a football club and a hockey club).

## `teamSections` (type: `array`):

Profile: venue, capacity, coach, squad size. Squad: every player and coach with season stats and injuries. Results: past matches (newest first). Fixtures: every scheduled match. Transfers: arrivals and departures with fees (newest first).

## `maxResultsPerTeam` (type: `integer`):

Newest results to return per team. 0 = the team's entire history (Arsenal: 5,077 matches, a century of them).

## `maxTransfersPerTeam` (type: `integer`):

Newest transfers to return per team. 0 = every transfer Flashscore lists (Arsenal: about 1,700, back to the 1970s).

## `squadPerCompetition` (type: `boolean`):

Besides the all-competitions squad table, add one squad table per competition (league, cups, Europe).

## `scrapeSquadPlayers` (type: `boolean`):

Also scrape the player page of everyone in each team's squad (about 30 extra player profiles per team).

## `playerSections` (type: `array`):

Profile: club, position, age, date of birth, market value, contract expiry, height, current injury. Career: one row per season, club and competition. Last matches: the 10 most recent matches with rating and stats. Transfers: career moves with fees. Injuries: injury history.

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

Stop after this many dataset rows in total.

## `proxyConfiguration` (type: `object`):

Not needed: Flashscore does not block by IP. The Actor escalates to Apify proxies automatically if it is ever refused.

## Actor input object example

```json
{
  "teamUrls": [
    "https://www.flashscore.com/team/arsenal/hA1Zm19f/",
    "https://www.flashscore.com/team/los-angeles-lakers/ngegZ8bg/"
  ],
  "playerUrls": [
    "https://www.flashscore.com/player/saka-bukayo/08NLEo06/"
  ],
  "searchQueries": [
    "Real Madrid",
    "Bukayo Saka"
  ],
  "searchSport": "",
  "teamSections": [
    "profile",
    "squad",
    "results",
    "fixtures",
    "transfers"
  ],
  "maxResultsPerTeam": 50,
  "maxTransfersPerTeam": 50,
  "squadPerCompetition": false,
  "scrapeSquadPlayers": false,
  "playerSections": [
    "profile",
    "career",
    "lastMatches",
    "transfers",
    "injuries"
  ],
  "maxItems": 10000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing every scraped row.

# 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 = {
    "teamUrls": [
        "https://www.flashscore.com/team/arsenal/hA1Zm19f/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("incognito_mode/flashscore-team-player-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 = { "teamUrls": ["https://www.flashscore.com/team/arsenal/hA1Zm19f/"] }

# Run the Actor and wait for it to finish
run = client.actor("incognito_mode/flashscore-team-player-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 '{
  "teamUrls": [
    "https://www.flashscore.com/team/arsenal/hA1Zm19f/"
  ]
}' |
apify call incognito_mode/flashscore-team-player-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,incognito_mode/flashscore-team-player-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/acHQecOZktFKGYi6n/builds/JWHu7aq1pnqRp2JYP/openapi.json
