Transfermarkt Scraper avatar

Transfermarkt Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Transfermarkt Scraper

Transfermarkt Scraper

Transfermarkt scraper that fetches football data from any Transfermarkt page and returns structured JSON records. Handles player achievements, league tables, and injury lists in a single run.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

Kawsar

Kawsar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Transfermarkt Scraper: Extract Football Data from Any Transfermarkt Page

Give it a Transfermarkt URL and it returns structured data. League tables come back as full standings with goals and points. Player profiles return every trophy by competition and season. Injury list pages pull every current injury with expected return dates. It works across any competition and any player on the site. Page type is read from the URL automatically, so you can mix all three types in one batch without any setup.

Use cases

  • Football data analysis: pull league standings across multiple seasons and feed them into a spreadsheet, notebook, or dashboard
  • Sports journalism: grab the current injury list for any competition before writing match previews
  • Player scouting: build a complete trophy history for any player, broken down by competition and season
  • Fantasy football research: check injury statuses and expected return dates across all clubs in a competition
  • Data pipelines: push records into Google Sheets, databases, or BI tools using Apify integrations
  • Historical records: snapshot league tables for past seasons by changing the season ID in the URL

What data does this actor collect?

Output fields vary by URL type. Each row is one record.

League table records include:

  • Club position in the standings
  • Club name
  • Matches played, won, drawn, and lost
  • Goals for and against
  • Total points

Player achievement records include:

  • Competition category (e.g. Champions League, La Liga)
  • Season year the trophy was won (e.g. 2014/15)

Injury list records include:

  • Player name and club
  • Injury type or description
  • Date the injury was reported
  • Expected return-to-play date

Input

ParameterTypeDefaultDescription
urlsstring[]requiredOne or more Transfermarkt URLs to scrape, one per line. You can mix page types in a single run.
maxItemsinteger20Maximum total records to return across all URLs. Set to 0 for no limit. Useful for cost control on large batch runs.
requestDelayMsinteger1000Milliseconds to wait between consecutive page requests. Increase if you encounter rate limiting. Minimum recommended: 500ms.
proxyConfigurationobjectResidential (US)Proxy settings. Residential US proxies are required for Transfermarkt. Datacenter IPs are blocked by the site's bot protection.

Supported URL types

The actor reads the URL path to figure out page type. No separate settings required.

URL patternPage typeData returned
/<player>/erfolge/spieler/<id>Player achievementsTrophies and honours by category and season year
/<competition>/verletztespieler/wettbewerb/<id>Injury listCurrent injuries with expected return dates
/<competition>/tabelle/wettbewerb/<id>League tableFull standings with stats per club
/<competition>/startseite/wettbewerb/<id>Competition overviewClub list via generic table extraction
/<player>/leistungsdaten/spieler/<id>Player statsPerformance data via generic table extraction
/<player>/transfers/spieler/<id>Transfer historyTransfer records via generic table extraction
/<player>/transferhistorie/spieler/<id>Transfer history detailFull transfer history via generic table extraction
Any other Transfermarkt URLGenericAny table found on the page, with headers as field names

Competition IDs reference

Common competition IDs for building URLs:

CompetitionIDExample league table URL
Premier LeagueGB1https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1
BundesligaL1https://www.transfermarkt.com/bundesliga/tabelle/wettbewerb/L1
La LigaES1https://www.transfermarkt.com/laliga/tabelle/wettbewerb/ES1
Serie AIT1https://www.transfermarkt.com/serie-a/tabelle/wettbewerb/IT1
Ligue 1FR1https://www.transfermarkt.com/ligue-1/tabelle/wettbewerb/FR1
Champions LeagueCLhttps://www.transfermarkt.com/champions-league/tabelle/wettbewerb/CL
Europa LeagueELhttps://www.transfermarkt.com/europa-league/tabelle/wettbewerb/EL
MLSMLS1https://www.transfermarkt.com/major-league-soccer/tabelle/wettbewerb/MLS1

To target a specific season, add /saison_id/<year> to the URL. The year is the starting year of the season, so saison_id/2023 is the 2023/24 season.

Example inputs

Premier League standings for the 2023/24 season

{
"urls": [
"https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1/saison_id/2023"
],
"maxItems": 20,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Player achievements for Lionel Messi

{
"urls": [
"https://www.transfermarkt.com/lionel-messi/erfolge/spieler/28003"
],
"maxItems": 0,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Current injury list for the Premier League

{
"urls": [
"https://www.transfermarkt.com/premier-league/verletztespieler/wettbewerb/GB1"
],
"maxItems": 50,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Batch run mixing all three page types

{
"urls": [
"https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1/saison_id/2023",
"https://www.transfermarkt.com/premier-league/verletztespieler/wettbewerb/GB1",
"https://www.transfermarkt.com/lionel-messi/erfolge/spieler/28003",
"https://www.transfermarkt.com/bundesliga/tabelle/wettbewerb/L1/saison_id/2023",
"https://www.transfermarkt.com/laliga/verletztespieler/wettbewerb/ES1"
],
"maxItems": 500,
"requestDelayMs": 1500,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Multiple seasons for historical comparison

{
"urls": [
"https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1/saison_id/2021",
"https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1/saison_id/2022",
"https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1/saison_id/2023"
],
"maxItems": 0,
"requestDelayMs": 1500,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Injury lists across multiple top leagues

{
"urls": [
"https://www.transfermarkt.com/premier-league/verletztespieler/wettbewerb/GB1",
"https://www.transfermarkt.com/bundesliga/verletztespieler/wettbewerb/L1",
"https://www.transfermarkt.com/laliga/verletztespieler/wettbewerb/ES1",
"https://www.transfermarkt.com/serie-a/verletztespieler/wettbewerb/IT1"
],
"maxItems": 200,
"requestDelayMs": 2000,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Trophy history for multiple players

{
"urls": [
"https://www.transfermarkt.com/lionel-messi/erfolge/spieler/28003",
"https://www.transfermarkt.com/cristiano-ronaldo/erfolge/spieler/8198",
"https://www.transfermarkt.com/kylian-mbappe/erfolge/spieler/342229"
],
"maxItems": 0,
"requestDelayMs": 1500,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Output

The actor stores results in a dataset. Each record is one row: one standings entry, one trophy, or one injured player.

League table record

{
"position": "1",
"club": "Manchester City",
"played": "38",
"won": "28",
"drawn": "5",
"lost": "5",
"goals": "96:52",
"points": "89",
"sourceUrl": "https://www.transfermarkt.com/premier-league/tabelle/wettbewerb/GB1/saison_id/2023",
"scrapedAt": "2025-04-26T10:14:33.001Z"
}

Player achievement record

{
"category": "Champions League",
"achievement": "2014/15",
"sourceUrl": "https://www.transfermarkt.com/lionel-messi/erfolge/spieler/28003",
"scrapedAt": "2025-04-26T10:14:35.211Z"
}

Injury list record

{
"player": "Bukayo Saka",
"club": "Arsenal FC",
"injury": "Hamstring injury",
"since": "Jan 1, 2025",
"expectedReturn": "Feb 15, 2025",
"sourceUrl": "https://www.transfermarkt.com/premier-league/verletztespieler/wettbewerb/GB1",
"scrapedAt": "2025-04-26T10:14:37.422Z"
}

Output field reference

FieldTypePage typeDescription
positionstringLeague tableClub position in the standings
clubstringLeague table, Injury listClub name
playedstringLeague tableMatches played
wonstringLeague tableMatches won
drawnstringLeague tableMatches drawn
loststringLeague tableMatches lost
goalsstringLeague tableGoals for and against, e.g. "96:52"
pointsstringLeague tableTotal points
categorystringAchievementsCompetition name, e.g. "Champions League"
achievementstringAchievementsSeason year the trophy was won, e.g. "2014/15"
playerstringInjury listPlayer name
injurystringInjury listInjury type or description
sincestringInjury listDate the injury was reported
expectedReturnstringInjury listExpected return-to-play date
pageTypestringAll (generic)Detected page type identifier
sourceUrlstringAllURL the record was scraped from
scrapedAtstringAllISO 8601 timestamp of when the record was scraped

How it works

  1. Reads all URLs from urls, deduplicates them, and works through them in order.
  2. For each URL, checks the path segment to identify page type: /erfolge/, /tabelle/, /verletztespieler/, or one of several others.
  3. Fetches the page with a Chrome browser fingerprint to get past Transfermarkt's bot protection.
  4. Parses the HTML with the right parser for that type. Unknown types go to a generic extractor that reads column names off the page headers.
  5. Pushes records to the dataset as they come in, not batched at the end.
  6. Waits requestDelayMs between pages.
  7. Stops when maxItems is hit, if set.

Limits

Pages run one at a time, in sequence. No parallelism, which means large batch runs take longer, but they're also less likely to trip rate limits.

Each URL returns however many records are on that page. A 20-club league table gives you 20 rows. A player with 50 trophies gives you 50 records. The only cap is maxItems, which counts across the whole run.

For big batches, set requestDelayMs to at least 1500ms and use maxItems to keep costs predictable.

Proxy configuration

Residential US proxies are required. Transfermarkt blocks datacenter IPs outright at the bot protection layer, which means datacenter proxies return 403 every time. The proxy picker defaults to Residential (US) automatically.

If you're seeing 403 errors in the run log, check:

  • Proxy is set to Apify Proxy, Residential group, US location
  • You're not on datacenter or no-proxy mode

FAQ

What page types does this actor support?

Three have dedicated parsers: player achievements (/erfolge/), league tables (/tabelle/), and injury lists (/verletztespieler/). Any other Transfermarkt page with a data table goes to a generic extractor that reads column names off the page headers. That picks up player stats, transfer history, squad pages, market values, and fixtures without any extra configuration.

Can I scrape multiple leagues, players, and injury lists in one run?

Yes. Add everything to urls, one per line. Types can be mixed freely. Each URL runs in sequence with the configured delay between them.

What does maxItems do exactly?

It stops the run once that many total records have been pushed across all URLs. If you set maxItems: 100 and the first league table has 90 rows, only 10 more records from the next URL go through before the actor exits. Set it to 0 for no cap.

How do I find the URL for a specific season?

Open Transfermarkt, go to the competition, switch to table view, pick the season from the dropdown, and copy the URL from the address bar. The saison_id segment is what changes between seasons. saison_id/2023 is the 2023/24 season.

Why do I get HTTP 403 errors?

Transfermarkt blocks datacenter IPs outright. Switch to Residential proxies with US location. Datacenter proxies won't work on this site.

What happens if a page returns no data?

If the actor can't find a table on a page (changed structure, blocked request, or just no data there), it logs a warning and skips that URL. Nothing gets pushed for it, but the rest of the run continues normally.

Can I scrape player stats or transfer history?

Yes. Both URL types are recognized and go to the generic extractor. Field names come from the column headers on the page, so whatever Transfermarkt labels those columns is what you get in the output.

Can I get a player's market value history?

Yes. Find the market value page for the player on Transfermarkt (/marktwertverlauf/), copy the URL, and add it to urls. The generic extractor picks up the table automatically.

Integrations

The actor works with Apify integrations. Push results to Google Sheets, trigger a Zapier or Make workflow when a run finishes, or stream records into your own database. Webhooks let you automate downstream steps the moment a run completes, like updating a live dashboard after each scrape or getting notified when new injuries appear before a match weekend.

You might also find these useful

Other actors from the same collection:

ActorWhat it does
Affordable Zillow SearchSearches Zillow for affordable listings using flexible filters, good for price-range hunting across US markets
Affordable Zillow Details ScraperPulls full property details from Zillow listing pages including price history, tax records, and home facts
Zillow Price & Tax History ScraperExtracts historical price changes and property tax records from Zillow for any address
Realtor SearchScrapes Realtor.com search results with filters for price, beds, baths, and property type
Realtor Auto SuggestionFetches location auto-suggestions from Realtor.com, useful for building location lookup tools
Redfin Details ScraperPulls detailed listing data from Redfin including price, features, and agent info
Rightmove ScraperScrapes UK property listings from Rightmove, covers rentals and sales across Great Britain
Foreclosed Properties List + EmailsFinds foreclosed properties and extracts associated contact emails for outreach
New Construction Properties + EmailsCollects new construction listings and pulls contact email addresses for builders and agents
Price Reduced Properties Email ListIdentifies properties with recent price cuts and gathers contact emails for follow-up
Auction Properties List + EmailLists properties going to auction and extracts contact information for each
Pet Friendly Rental Properties ListFinds pet-friendly rental listings across platforms, filtered by location and price
Remote Investor 3D Homes ListCollects listings with 3D virtual tours, ideal for remote buyers and out-of-state investors
Market Velocity TrackerTracks how fast properties are moving in a given market, useful for gauging supply and demand