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

Transfermarkt Transfers Scraper gets you the transfer market ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — latest deals, records, rumours, expiring contracts & free agents with fees and values. 💰 $1 per 1,000 rows, no start fee. Scrape your first 5,000 rows free every month 🚀

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

## Pricing

from $1.00 / 1,000 row 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 Transfers Scraper

Transfermarkt Transfers Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed Transfermarkt transfer-market data.

The transfer market moves every day, and every run reads Transfermarkt live — so you get today's deals, rumours, expiring contracts and free agents, one row each, and can successfully complete your project.

**$1 per 1,000 rows.** 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 Transfers Scraper free**](https://apify.com/omkar-cloud/transfermarkt-transfers-scraper) — your first 5,000 rows are Free.

### What can I get

- 🔁 **Every transfer as it lands** — the newest deals worldwide with both clubs, the date, the fee and the player's market value, filtered by country, league, fee and value
- 💬 **The rumour mill** — who is being linked with whom, the interested club, the source date and Transfermarkt's own probability rating
- 📜 **Expiring contracts and free agents** — players running out of contract in any year, and everyone available on a free right now, with values and rumour counts
- 💰 **Market value rankings** — the world's most valuable players and squads, and the players whose value was just re-rated with the old value, the new one and the change
- 🏆 **Transfer records** — the most expensive moves of all time or of one season, by position, age group and window
- 🏟️ **A club's own window** — every arrival and departure of a season with fees, tagged `direction`
- 🌍 **The FIFA world ranking** — with squad size, average age, total market value and points

### Why Transfermarkt Transfers Scraper

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

- 🔗 **URL-only** — they scrape what you already know, never a live market feed
- 🧩 **No rumours, no free agents, no expiring contracts** — the lists scouts and journalists actually refresh
- 💸 **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 Transfers Scraper is read live on every run, priced honestly with no start fee, and actively maintained.

### Input

| Field | What it does |
|---|---|
| **Lists** | One or more of: latest transfers, transfer records, rumours, most valuable players, market value changes, contracts expiring, free agents, most valuable clubs, FIFA ranking |
| **Clubs (own transfers)** | Club ids (`418`) or URLs — every arrival and departure of the season |
| **Nationality / Club Country / Competition** | Narrow any list to a country or a league |
| **Season / Window** | For records and club transfers — `2025`, summer or winter |
| **Position Group / Exact Position / Age Group / Confederation / Year** | Player filters, applied where the list supports them |
| **Min & Max Market Value / Fee** | In whole euros — set a minimum fee to skip frees and loans |
| **Max Rows** | Cost control for the whole run, shared evenly across the lists you pick — 1,000 rows = $1 |

### Example: A Transfer Row

```json
{
  "mode": "latest-transfers",
  "row_type": "transfer",
  "page": 1,
  "filters": { "competition": "GB1", "min_fee": "1000000" },
  "player": {
    "id": 391482,
    "name": "Hamed Pakdel",
    "link": "https://www.transfermarkt.com/hamed-pakdel/profil/spieler/391482",
    "image": "https://img.a.transfermarkt.technology/portrait/medium/391482-1549299898.jpg"
  },
  "position": "Centre-Forward",
  "age": 34,
  "nationalities": [{ "id": 71, "name": "Iran", "code": "IRN" }],
  "from_club": {
    "id": 515,
    "name": "Without Club",
    "link": "https://www.transfermarkt.com/vereinslos/startseite/verein/515"
  },
  "to_club": {
    "id": 42189,
    "name": "Naft Masjed Soleyman FC",
    "link": "https://www.transfermarkt.com/naft-masjed-soleyman-fc/startseite/verein/42189",
    "competition": { "id": "IRN2", "name": "Azadegan League" },
    "country": { "id": 71, "name": "Iran", "code": "IRN" }
  },
  "date": "2026-09-18",
  "market_value": { "amount": 100000, "currency": "EUR" },
  "fee": { "amount": null, "currency": null, "type": "none" }
}
```

And a rumour row from the same run:

```json
{
  "mode": "rumours",
  "row_type": "rumour",
  "player": { "id": 711432, "name": "Adem Alilet" },
  "position": "Centre-Back",
  "age": 27,
  "current_club": { "id": 13505, "name": "Al-Ittihad SC" },
  "interested_club": { "id": 4128, "name": "CR Belouizdad" },
  "last_source_date": "2026-09-17",
  "probability_percent": 50.0,
  "thread_link": "https://www.transfermarkt.com/adem-alilet-to-cr-belouizdad/thread/forum/..."
}
```

*Every row is stamped with the list it came from and the filters used, so a multi-list run stays readable.*

### Get Started with 5,000 Free Rows

1. [Open Transfermarkt Transfers Scraper](https://apify.com/omkar-cloud/transfermarkt-transfers-scraper) — Latest transfers is pre-selected.
2. Tick the lists you want, add filters and click **Start**.
3. Download the results as JSON, CSV or Excel 😎.

### Pricing

**$1 per 1,000 rows. No start fee.** You pay for the rows you get, nothing else.

| What you scrape | Price |
|---|---|
| Transfer, rumour, player, club or ranking row | **$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 rows are free every month**.

### 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-transfers-scraper').call({
    modes: ['latest-transfers', 'rumours'],
    competition: 'GB1',              // Premier League only
    minFee: 1000000,                 // skip frees and loans
    maxResults: 500,
});

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-transfers-scraper").call(run_input={
    "modes": ["contracts-expiring", "free-agents"],
    "year": 2027,
    "positionGroup": "forward",
    "maxResults": 1000,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["mode"], item["player"]["name"], item.get("contract_until"))
```

### FAQ

**What does a run cost?**
$1 per 1,000 rows, with no start fee. Set **Max Rows** to cap any run.

**Can I run several lists at once?**
Yes. Tick as many as you like — each row carries `mode`, so you can split them afterwards. Max Rows is shared evenly between them, and an empty list's share rolls over to the next.

**Which filters apply to which list?**
Each list uses the filters that make sense for it and ignores the rest, so one filter set can drive several lists. The field descriptions say which is which.

**How fresh is the data?**
It is read live from Transfermarkt on every run. Latest transfers and rumours change through the day.

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

**I want the full player profile, not a market row.**
Use [Transfermarkt Scraper](https://apify.com/omkar-cloud/transfermarkt-scraper) — 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 Clubs Scraper**](https://apify.com/omkar-cloud/transfermarkt-clubs-scraper) — squads with values, stadium, staff and fixtures
- [**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%20Transfers%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%20Transfers%20Scraper%20Actor\&body=I%20need%20help%20with%20using%20the%20Transfermarkt%20Transfers%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

## `modes` (type: `array`):

Which Transfermarkt lists to scrape.

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

Transfermarkt club ids like `418` (Real Madrid) or club URLs — every arrival and departure of the season becomes a row, tagged `direction`.

## `country` (type: `string`):

Country name (`Brazil`), FIFA code (`BRA`) or Transfermarkt country id. Filters players by nationality, or clubs by country.

## `clubCountry` (type: `string`):

Country of the clubs involved in the transfer — name, FIFA code or id. Latest transfers only.

## `competition` (type: `string`):

Competition code like `GB1` (Premier League), `ES1` (LaLiga), or a competition URL.

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

Season for transfer records and club transfers — `2025` or `25/26`. Leave empty for all seasons.

## `window` (type: `string`):

Limit to one window.

## `positionGroup` (type: `string`):

Broad position filter.

## `position` (type: `string`):

Exact position — a name (`Centre-Forward`), a short code (`CF`) or an id from 1 to 14.

## `ageGroup` (type: `string`):

Age bracket.

## `continent` (type: `string`):

Confederation of the player's nationality.

## `year` (type: `integer`):

Contract end year for Contracts expiring, or the snapshot year for Most valuable players.

## `minMarketValue` (type: `integer`):

Lowest market value in whole euros, e.g. `1000000`. Latest transfers only.

## `maxMarketValue` (type: `integer`):

Highest market value in whole euros. Latest transfers only.

## `minFee` (type: `integer`):

Lowest transfer fee in whole euros — set it to skip free transfers and loans. Latest transfers only.

## `maxFee` (type: `integer`):

Highest transfer fee in whole euros. Latest transfers only.

## `rankingDate` (type: `string`):

A FIFA publication date as `YYYY-MM-DD` for a historic ranking. Leave empty for the latest one.

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

Maximum number of rows for the whole run. It is shared evenly across the lists and clubs you picked — three lists with 600 rows means 200 each, and whatever a list leaves unused rolls over to the next. Use this to control your cost (1,000 rows = $1).

## Actor input object example

```json
{
  "modes": [
    "latest-transfers"
  ],
  "clubs": [],
  "window": "",
  "positionGroup": "",
  "ageGroup": "",
  "continent": "",
  "maxResults": 500
}
```

# 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 = {
    "modes": [
        "latest-transfers"
    ],
    "clubs": [],
    "maxResults": 500
};

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

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

```

## MCP server setup

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