# 🚀 Transfermarkt Clubs Scraper · 5,000 Free Rows/Month (`omkar-cloud/transfermarkt-clubs-scraper`) Actor

Transfermarkt Clubs Scraper gets you club data ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — squad with market values & contracts, stadium, staff, fixtures & results, titles and transfer record. 💰 $1 per 1,000 rows, no start fee. Scrape your first 5,000 rows free every month 🚀

- **URL**: https://apify.com/omkar-cloud/transfermarkt-clubs-scraper.md
- **Developed by:** [Omkar Cloud](https://apify.com/omkar-cloud) (community)
- **Stats:** 7 total users, 3 monthly users, 98.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 club scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Transfermarkt Clubs Scraper

Transfermarkt Clubs Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed Transfermarkt club data.

Every run reads Transfermarkt live — so you get today's squad with market values and contracts, the stadium, the staff, the fixtures and the trophy cabinet for one club, a whole league, or a name search, one row per club, and can successfully complete your project.

**$1 per 1,000 clubs.** And with Apify's free plan you get $5 of credit every month, so your first **5,000 rows each month are free**.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 37 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try Transfermarkt Clubs Scraper free**](https://apify.com/omkar-cloud/transfermarkt-clubs-scraper) — your first 5,000 rows are Free.

### What can I get

- 🏟️ **Any club, a whole league, or a name** — paste club ids or transfermarkt.com URLs, competition codes like `GB1` to get every club of the league, or names to search; national teams work too
- 💰 **The squad with the money on it** — every player with shirt number, position, age, nationality, height, foot, joined date, contract end, the club they were signed from and their market value, plus the squad's total and average value
- 🧾 **The club card** — league and table position, years in the league, founded date, colours, address, phone and website, squad size, foreigners, internationals and the running transfer balance
- 🏆 **Stadium, staff and trophies** — capacity, seats, built year, surface and pitch size; coaching staff, board, scouting and medical departments; every title with the seasons
- 📅 **Fixtures and season history** — every match of the season across all competitions with venue, opponent, formation, attendance and result, plus season-by-season placements with the manager
- 🔁 **Record signings and sales** — the club's most expensive arrivals and departures of all time, ranked by fee

### Why Transfermarkt Clubs Scraper

Most other Transfermarkt scrapers fail you in one of four ways:

- 🔗 **Player-only** — a profile scraper that never gives you the club, the squad value or the stadium
- 🧩 **Low-detail data** — a squad list with names, not contracts, joined dates and market values
- 💸 **A start fee on every run** — three of the five biggest charge one, which punishes small runs
- 🪦 **Works today, breaks next month** — nobody maintains it

Transfermarkt Clubs Scraper is read live on every run, priced honestly with no start fee, and actively maintained.

### Input

| Field | What it does |
|---|---|
| **Clubs** | Club ids (`418`) or transfermarkt.com club URLs, one row each |
| **Competitions (all clubs)** | Codes like `GB1`, `ES1`, `L1`, `CL` — every club of the season becomes a row |
| **Club Names** | Names to search, like `Manchester` — every hit becomes a row |
| **Season** | `2025` or `25/26` for the squad and fixtures. Empty = current season |
| **Include Squad / Stadium** | On by default |
| **Include Staff / Fixtures / Titles / Season History / Record Signings / Internationals** | Off by default — switch on what you need, all at the same price |
| **Max Clubs** | Cost control for the whole run — 1,000 clubs = $1 |

### Example: A Full Transfermarkt Club

```json
{
  "source_input": "418",
  "source_kind": "club",
  "id": 418,
  "name": "Real Madrid",
  "official_name": "Real Madrid Club de Fútbol",
  "link": "https://www.transfermarkt.com/real-madrid/startseite/verein/418",
  "crest": "https://img.a.transfermarkt.technology/wappen/big/418.png",
  "country": { "id": 157, "name": "Spain", "code": "ESP" },
  "competition": { "id": "ES1", "name": "LaLiga", "tier": "First Tier" },
  "table_position": 2,
  "in_league_since": "88 years",
  "founded": "1902-03-06",
  "colors": ["#FFFFFF", "#004996"],
  "address_text": "Avenida de Concha Espina 1 28036 Madrid Spain",
  "website": "https://realmadrid.com",
  "squad": {
    "size": 27,
    "average_age": 25.98,
    "foreigners_count": 20,
    "national_team_players": 20,
    "total_market_value": { "amount": 1456500000, "currency": "EUR", "updated_at": "2026-09-18" },
    "average_market_value": { "amount": 53944444, "currency": "EUR" }
  },
  "transfer_record": {
    "current_balance": { "amount": -166500000, "currency": "EUR" },
    "income": { "players": 9, "total": { "amount": 58500000, "currency": "EUR" } },
    "expenditure": { "players": 10, "total": { "amount": 225000000, "currency": "EUR" } }
  },
  "squad_players": [
    {
      "player": {
        "id": 108390,
        "name": "Thibaut Courtois",
        "link": "https://www.transfermarkt.com/thibaut-courtois/profil/spieler/108390"
      },
      "shirt_number": 1,
      "position": { "id": 1, "name": "Goalkeeper", "short_name": "GK", "group": "Goalkeeper" },
      "date_of_birth": "1992-05-11",
      "age": 34,
      "nationalities": [{ "id": 19, "name": "Belgium", "code": "BEL" }],
      "height_m": 1.99,
      "preferred_foot": "left",
      "joined": "2018-08-09",
      "signed_from": { "id": 631, "name": "Chelsea FC" },
      "contract_until": "2026-06-30",
      "market_value": { "amount": 20000000, "currency": "EUR" },
      "is_captain": false
    }
  ],
  "squad_total_market_value": { "amount": 1456500000, "currency": "EUR" },
  "stadium_details": {
    "name": "Santiago Bernabéu",
    "total_capacity": 83186,
    "seats": 83186,
    "built": 1947,
    "surface": "Natural grass",
    "pitch_size": "105m x 68m",
    "owner": "Real Madrid C.F."
  }
}
```

*Trimmed for readability — `squad_players` carries the whole squad, and `staff`, `fixtures`, `titles`, `seasons_history`, `record_signings`, `record_sales` and `national_players` are there when you switch them on.*

### Get Started with 5,000 Free Rows

1. [Open Transfermarkt Clubs Scraper](https://apify.com/omkar-cloud/transfermarkt-clubs-scraper) — the form comes pre-filled with Real Madrid.
2. Add your own clubs, a competition code or a name and click **Start**.
3. Download the results as JSON, CSV or Excel 😎.

### Pricing

**$1 per 1,000 clubs. No start fee.** Every block you switch on is included — you pay per row, not per field.

| What you scrape | Price |
|---|---|
| Club row — card, squad, stadium and any block you enable | **$0.001** each — $1 per 1,000 |
| Actor start | **$0** — most competitors charge one |

Apify's free plan gives you $5 of credit every month, so **5,000 clubs are free every month**. A club reached twice in one run — listed and also in a competition — is scraped and billed only once.

### Run It from Code

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('omkar-cloud/transfermarkt-clubs-scraper').call({
    competitions: ['GB1'],           // every Premier League club
    includeSquad: true,
    includeFixtures: true,
    season: '2025',
    maxResults: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("omkar-cloud/transfermarkt-clubs-scraper").call(run_input={
    "clubs": ["418", "131", "281"],   # Real Madrid, Barcelona, Man City
    "includeTitles": True,
    "includeTransferRecords": True,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["squad"]["total_market_value"]["amount"])
```

### FAQ

**Which clubs can I scrape?**
Any club on Transfermarkt, from the Premier League to the fifth tier, plus national teams — by id, URL, competition code or name search.

**What does a run cost?**
$1 per 1,000 clubs, with no start fee, no matter how many blocks you switch on. Set **Max Clubs** to cap any run.

**Can I get a whole league in one run?**
Yes. Put the competition code in **Competitions** and every club of that season becomes a row.

**How fresh is the data?**
It is read live from Transfermarkt on every run, so squad values are exactly what the site shows at that moment.

**Do I need proxies or a Transfermarkt account?**
No. The Actor handles everything.

**I want deep player data, not the squad list.**
Use [Transfermarkt Scraper](https://apify.com/omkar-cloud/transfermarkt-scraper) — it returns market value history, transfers, season stats and injuries per player.

### Popular Actors by Omkar Cloud

- [**Transfermarkt Scraper**](https://apify.com/omkar-cloud/transfermarkt-scraper) — player cards with market values and full career history
- [**Transfermarkt Transfers Scraper**](https://apify.com/omkar-cloud/transfermarkt-transfers-scraper) — the live transfer market, rumours and free agents
- [**Sofascore Scraper**](https://apify.com/omkar-cloud/sofascore-scraper) — live scores, fixtures & results for 26 sports
- [**IMDb Scraper**](https://apify.com/omkar-cloud/imdb-scraper) — titles, ratings, cast & box office
- [**Booking Scraper**](https://apify.com/omkar-cloud/booking-scraper) — hotels with prices, ratings & rooms

### 💬 Have Questions? We Have Answers.

You're a developer — we know how hard completing a project can be. So we offer full support: just message us and we'll reply ✅ with a solution within 1 working day.

[![Message Us on WhatsApp](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918178804274\&text=I%20need%20help%20with%20using%20the%20Transfermarkt%20Clubs%20Scraper%20Actor.)

[![Ask Us on Email](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Transfermarkt%20Clubs%20Scraper%20Actor\&body=I%20need%20help%20with%20using%20the%20Transfermarkt%20Clubs%20Scraper%20Actor.)

You are important to us — just message us and we will solve your problem ✅ within 1 working day. 🩷 Pinky Promise 🤙!

# Actor input Schema

## `clubs` (type: `array`):

Transfermarkt club ids like `418` (Real Madrid) or pasted transfermarkt.com club URLs like `https://www.transfermarkt.com/real-madrid/startseite/verein/418` — the form is auto-detected. Rows carry `source_input` (as typed).

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

Competition codes like `GB1` (Premier League), `ES1` (LaLiga), `L1` (Bundesliga), `CL` (Champions League), or pasted competition URLs. Every club of the season becomes a row.

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

Names to search, like `Manchester` or `Boca Juniors`. Every club the search returns becomes a row, up to Max Clubs.

## `season` (type: `string`):

Season for the squad and fixtures — the start year (`2025`) or the season name (`25/26`). Leave empty for the current season.

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

Adds `squad_players` — every player with shirt number, position, age, nationality, height, foot, joined date, contract end, signed-from club and market value.

## `includeStadium` (type: `boolean`):

Adds `stadium_details` — capacity, seats, built and renovated year, surface, pitch size, address, owner and naming rights.

## `includeStaff` (type: `boolean`):

Adds `staff` — coaching staff, management, board, scouting and medical departments with roles, appointment dates and contract ends.

## `includeFixtures` (type: `boolean`):

Adds `fixtures` — every match of the season across all competitions with venue, opponent, formation, attendance and result, plus the home/away record.

## `includeTitles` (type: `boolean`):

Adds `titles` — every trophy the club has won, grouped by competition with the seasons.

## `includeHistory` (type: `boolean`):

Adds `seasons_history` — season-by-season league placements with W/D/L, goals, points, rank and the manager.

## `includeTransferRecords` (type: `boolean`):

Adds `record_signings` and `record_sales` — the club's most expensive arrivals and departures of all time, ranked by fee.

## `includeNationalPlayers` (type: `boolean`):

Adds `national_players` — current, youth and former internationals in the squad with caps and goals.

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

Maximum number of club rows for the whole run, across every club, competition and search. Use this to control your cost (1,000 clubs = $1).

## Actor input object example

```json
{
  "clubs": [
    "418"
  ],
  "competitions": [],
  "searchQueries": [],
  "includeSquad": true,
  "includeStadium": true,
  "includeStaff": false,
  "includeFixtures": false,
  "includeTitles": false,
  "includeHistory": false,
  "includeTransferRecords": false,
  "includeNationalPlayers": false,
  "maxResults": 50
}
```

# Actor output Schema

## `results` (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 = {
    "clubs": [
        "418"
    ],
    "competitions": [],
    "searchQueries": [],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/transfermarkt-clubs-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 = {
    "clubs": ["418"],
    "competitions": [],
    "searchQueries": [],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("omkar-cloud/transfermarkt-clubs-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 '{
  "clubs": [
    "418"
  ],
  "competitions": [],
  "searchQueries": [],
  "maxResults": 50
}' |
apify call omkar-cloud/transfermarkt-clubs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/transfermarkt-clubs-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/A3bgX7FRTT0eKEOUq/builds/z07rsPSZW5Vtg38RK/openapi.json
