FotMob API endpoint
Returns confirmed transfers, rumours, or popular transfers with the public transfer-center filters. Fee values are in EUR. Use fotmob/leagues and fotmob/search to discover league and team ids. The upstream returns 50 rows per page and caps its hit count at 10,000.
/fotmob/transfersReturns confirmed transfers, transfer rumours, or the current popular-transfer list. The data field preserves FotMob's response, including transfers, hits, and maxFee. The upstream returns 50 records per page and currently caps hits at 10,000.
Query parameters:
mode (optional): all, rumours, or popular. Defaults to all.page (optional): one-based page from 1 through 200; defaults to 1.last (optional): 6months, 1year, 2years, or 3years; defaults to 6months.direction (optional): all, in, or out; defaults to all. in and out are applied when a league or team filter is supplied.min_fee (optional): minimum fee in euros, a non-negative integer.max_fee (optional): maximum fee in euros, a non-negative integer not lower than min_fee.league_ids (optional): up to 50 comma-separated numeric league ids, discoverable from /api/v1/fotmob/leagues.team_ids (optional): up to 50 comma-separated numeric team ids, discoverable from /api/v1/fotmob/search.order_by (optional): lastModified, fee, date, name, fromClubName, or toClubName; defaults to lastModified.exclude_extensions (optional): true to ask FotMob to omit contract-extension rows.likely_only (optional): true to request likely rumours; only valid with mode=rumours.mode=popular uses FotMob's separate top-transfers feed and accepts only its default filters on page 1. Rumour records may contain probability and source fields that confirmed-transfer records do not. Fees are fixed to EUR in this API; the site can display another currency through user settings, but that setting is not part of this endpoint's contract.
Example request:
GET /api/v1/fotmob/transfers?mode=all&last=1year&direction=in&league_ids=47&min_fee=10000000&max_fee=50000000&order_by=fee&page=1
| Field | Filled in, of 50 checked | Values in the sample |
|---|---|---|
| name | 50 | “Daniel Carvajal” and 48 other values |
| playerId | 50 | 45,220 to 1,804,987, median 891,870 |
| position | 49 | |
| transferDate | 50 | 2026-09-26 to 2026-10-13 |
| transferText | 50 | median 3 entries |
| fromClub | 50 | “Free agent” and 28 other values |
| fromClubFullName | 50 | “Free agent” and 28 other values |
| fromClubId | 50 | 2 to 583,944, median 8,304 |
| fromClubColors | 50 | |
| toClub | 50 | “Getafe” and 40 other values |
| toClubFullName | 50 | “Getafe” and 40 other values |
| toClubId | 50 | -1 to 1,881,247, median 9,885 |
| toClubColors | 50 | |
| fee | 48 | |
| amountEuroEstimated | 9 | 25,000 to 13,000,000, median 225,000 |
| transferType | 50 | |
| contractExtension | 50 | true in 0 of 50 |
| onLoan | 50 | true in 11 of 50 |
| fromDate | 50 | 2026-09-22 to 2027-01-01 |
| toDate | 34 | 2026-10-25 to 2031-12-31 |
| marketValue | 43 | 134,985 to 5,483,011, median 519,524 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| mode | string | No | Feed mode Allowed values: all, rumours, popular. | ||
| page | integer | No | One-based result page; 50 rows per page Minimum: 1. Maximum: 200. | ||
| last | string | No | Time window Allowed values: 6months, 1year, 2years, 3years. | ||
| direction | string | No | Transfer direction; applied when league_ids or team_ids is supplied Allowed values: all, in, out. | ||
| min_fee | integer | No | Minimum transfer fee in EUR Minimum: 0. | ||
| max_fee | integer | No | Maximum transfer fee in EUR Minimum: 0. | ||
| league_ids | string | No | Comma-separated numeric FotMob league ids, up to 50; discover with /fotmob/leagues | 47 | |
| team_ids | string | No | Comma-separated numeric FotMob team ids, up to 50; discover with /fotmob/search | 8456 | |
| order_by | string | No | Sort column Allowed values: lastModified, fee, date, name, fromClubName, toClubName. | ||
| exclude_extensions | boolean | No | Exclude contract-extension records | ||
| likely_only | boolean | No | Return only likely rumours; mode must be rumours | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fotmob/transfers?mode=all&page=1&last=6months&direction=all&order_by=lastModified&exclude_extensions=true&likely_only=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"source_url": "https://www.fotmob.com/api/data/transfers?...",
"data": {
"transfers": [
{
"name": "Player Name",
"playerId": 123,
"fee": {
"value": 25000000
}
}
],
"hits": 221,
"maxFee": 145000000
}
}
}Request schema
No body schema
Response schema
#/definitions/fotmob.responseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | fotmob.sourceDataDoc | No | ||||
| data.data | object | No | ||||
| data.source_url | string | No | https://www.fotmob.com/api/data/matches?date=20260925&timezone=UTC | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/fotmob/transfers?mode=all&page=1&last=6months&direction=all&order_by=lastModified&exclude_extensions=true&likely_only=true" \
-H "x-api-key: $CRAWLORA_API_KEY"