Transfermarkt Scraper — Market Values & Transfers | $3/1K
Pricing
from $2.91 / 1,000 player records
Transfermarkt Scraper — Market Values & Transfers | $3/1K
Scrape Transfermarkt (transfermarkt.com) football player data: market values, squads, transfers, and rankings. Returns 25+ fields per player — name, club, position, age, nationality, market value (current + peak), contract, agent, and transfer history. No login or API key. Pay per player record.
Pricing
from $2.91 / 1,000 player records
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Transfermarkt Scraper — Market Values, Transfers & Squads | $3/1K | No Login
For football analytics firms, fantasy sports platforms, sports betting models, and football journalists that need the world's most complete player valuation dataset.
$3.00 per 1,000 player records. Transfer history and market-value history are optional extras — pay only when you pull them. No login, no API key, no proxy required for standard volumes.
Pricing example: 500 players = $1.50. Full Premier League squad (500 players) + transfer history (avg 8 moves each = 4,000 entries) = $1.50 + $4.00 = $5.50 total. Rankings top-100 = $0.30.
| Scraper | Price / 1k | League mode | Transfer history | MV history | parse_confidence |
|---|---|---|---|---|---|
| This actor | $3/1k | Yes (whole division) | Yes | Yes (opt-in) | Yes |
| apify transfermarkt-scraper (official) | ~$3-5/1k | No (single player) | No | No | No |
| manual API/SDK solutions | Dev time | No | No | No | N/A |
Scrape football player data from Transfermarkt — the world's reference for market values, squads, and transfers. This Transfermarkt Scraper returns 30+ fields per player: name, current club, league, position, age, nationality, current and peak market value, full market-value history, contract expiry, agent, shirt number, profile image, and full transfer history. Scrape a single player, a whole club squad, or an entire league in one run. No login, no API key, no proxy required for standard volumes. Pay per player record at $3.00 per 1,000 results — and no charge for the actor start, unlike most competitors.
Why this Transfermarkt Scraper
- Whole-league scraping — paste a competition code (
GB1,ES1,IT1,L1,FR1,MLS1) and get every club's full squad in one call. Most scrapers stop at single players or single clubs. - Self-healing market value (dual-source) — every current market value is taken from the page header and cross-checked against Transfermarkt's own
ceapivaluation endpoint. If the website's HTML layout changes, the scraper automatically falls back to the JSON source and keeps working — the fieldmarket_value_source(html/ceapi/html+ceapi) tells you exactly where each value came from. - Quality score on every record —
parse_confidence(0–1.0) plus machine-readablewarningsmean you (and your monitoring) instantly see if a page structure drifted, instead of silently getting blanks. - No start fee — you pay only for player records actually returned. Runs that hit zero results cost you nothing.
- Peak value + full history + full transfers — current value, all-time peak (with date), the complete dated valuation history (opt-in), and the complete transfer history (clubs, fees, dates) — all in one record.
Why this beats the alternatives
The Apify Store has a mature field of Transfermarkt scrapers — automation-lab/transfermarkt-scraper (tiered $0.56–$2.30/1k), parseforge/transfermarkt-scraper (from $19/1k), solidcode, webdatalabs, curious_coder, data_xplorer, and more. They are uniformly strong on current player data and weak in the same four places — and this actor closes every one:
| Capability | This actor | automation-lab | parseforge | Other incumbents |
|---|---|---|---|---|
| Market-value history (dated series) | Yes (opt-in) | No — "no market value history" | No — "join datasets over time" yourself | No |
| All-time peak value (+ date) | Yes | No | No | No |
| Whole-league squad scraping | Yes (leagueCodes, walks every club) | No (player search only) | League ranking only, 13 fields | Partial |
| Free-text player search | Yes (search) | Yes | No | Varies |
| Self-healing dual-source MV | Yes (market_value_source) | No (single HTML selector) | No | No |
Full transfer history (+ fee_type) | Yes | Optional, no fee classification | No | Rare |
parse_confidence on every record | Yes | No | No | No |
| No actor-start fee | Yes | No ($0.005/run) | Varies | Varies |
| Base price / 1k | $3 | $0.56–$2.30 | $19 | $1–5 |
The one-sentence edge: the only Transfermarkt scraper that returns market-value history + peak, scrapes a whole league in one run, and self-heals its market value from Transfermarkt's own ceapi JSON when the page HTML drifts (market_value_source: html / ceapi / html+ceapi) — with a parse_confidence score none of them expose. The lean competitors make you chain two actors (one for ranking, one for profiles) and rebuild the time series yourself; this does both in one call. Full breakdown in ./COMPETITIVE_EDGE.md.
What the Transfermarkt Scraper returns
25+ fields per player record:
| Field | Description |
|---|---|
player_id | Transfermarkt numeric player ID |
name | Player display name |
full_name | Name in home country (full legal name) |
shirt_number | Squad shirt number |
current_club | Current club name |
league | League / competition (club mode) |
position | Playing position (e.g. "Attack - Right Winger") |
age | Age in years |
date_of_birth | Date of birth (DD/MM/YYYY) |
place_of_birth | City of birth |
nationality | List of citizenships |
height | Height (e.g. "1,70 m") |
foot | Preferred foot |
market_value | Current market value, integer EUR |
market_value_str | Current market value, display (e.g. "€15.00m") |
market_value_currency | Currency symbol (€, £, $, US$) |
market_value_source | Where the value came from: html, ceapi, or html+ceapi (both agree) |
market_value_peak | All-time peak market value, integer EUR |
market_value_peak_str | Peak value, display |
market_value_peak_date | Date of the peak value |
market_value_history | Full dated valuation history (opt-in: includeMarketValueHistory) |
contract_until | Contract expiry date |
agent | Player agent |
outfitter | Boot/kit outfitter |
profile_url | Canonical Transfermarkt profile URL |
image_url | Player portrait image URL |
transfers | Transfer history (from/to club, fee, fee_type, date) |
parse_confidence | Data quality score (0–1.0) |
warnings | List of quality warning codes |
scraped_at | ISO-8601 scrape timestamp |
Each transfers[] entry includes season, date, from_club, to_club, fee (int EUR), fee_str, fee_type (fee / free / loan / end_of_loan / unknown), and market_value_str. Each market_value_history[] point includes date, value (int EUR), value_str, and club.
How to scrape Transfermarkt market values
The actor has five input modes — combine any of them in one run:
playerUrls— paste profile URLs or bare IDs (e.g.28003). Each player gets a full profile scrape with peak market value and complete transfer history.clubUrls— paste squad URLs or club IDs (e.g.131). Every squad player becomes one record: name, position, market value, age, nationality.leagueCodes— paste a competition code or URL (e.g.GB1for the Premier League,ES1for LaLiga). The scraper walks every member club and returns their full squads, capped by Max Results across the league. Scrape a whole division in one run.search— free-text player search (e.g.Haaland). The top matches are looked up and their profiles scraped.rankings— scrape Transfermarkt's most-valuable-players ranking, paginated, up to Max Results.
Common competition codes: GB1 Premier League · ES1 LaLiga · IT1 Serie A · L1 Bundesliga · FR1 Ligue 1 · MLS1 Major League Soccer · PO1 Liga Portugal · NL1 Eredivisie.
Use cases for Transfermarkt football player data
- Market value tracking — monitor current and peak market values for any player or squad over time
- Squad analysis — pull a full club roster with positions, ages, and valuations in one call
- Transfer research — extract complete transfer history (fees, clubs, dates) for scouting and journalism
- Fantasy football & analytics — feed player valuations and positions into models and dashboards
- Talent scouting — rank the most valuable footballers and surface rising young players
- Betting & media — build datasets of player values, contracts, and nationalities for content and models
Input example
{"playerUrls": ["28003"],"clubUrls": ["131"],"leagueCodes": ["GB1"],"rankings": true,"maxResults": 100,"includeMarketValueHistory": false}
Pricing
Pay Per Event — three wired charge events:
| Event | When charged | Rate |
|---|---|---|
player-record (primary) | every player pushed | $3.00 / 1k |
transfer-record | per transfer entry in profile mode | $1.00 / 1k |
mv-history-point | per market-value history point (opt-in: includeMarketValueHistory) | $0.50 / 1k |
You only pay for data you actually pull. Failed/blocked pages are never charged.
Technical notes
- Transport: server-rendered HTML plus two clean Transfermarkt
ceapiJSON endpoints for market-value peak/history and transfer history. Works reliably from Apify cloud IPs for standard volumes. - Resilient parsing: structural selectors (
data-header__,info-table__contentlabel/value alternation,table.items) — not brittle class names.parse_confidenceflags silent structure drift. - Self-healing dual-source market value (fallback plan): the current market value is read from the HTML header and cross-checked against the
ceapivaluation JSON. If the HTML layout drifts, the scraper falls back to the JSON value automatically (market_value_source: "ceapi") so your data pipeline keeps flowing. Disagreements are flagged inwarnings, never silently merged. - Anti-bot wall detection: every HTML response is checked for consent/Cloudflare interstitials and truncated bodies. A blocked page is retried (with proxy rotation when enabled) and, if it can't be recovered, the record is dropped — you are never charged for an empty or garbage record.
- Rate limit: ~1.5s inter-request pacing + automatic backoff on 429/403/503 (3 retries: 10/20/40s).
- Proxy: optional Apify RESIDENTIAL proxy via
proxyConfigurationfor high-volume runs, billed to the run owner. No external proxy account needed.
Frequently asked questions
Do I need a Transfermarkt account or API key? No. The actor reads the same public pages and JSON endpoints the Transfermarkt website itself uses. No authentication is required.
Can I scrape a whole squad at once? Yes — pass a club URL or ID in clubUrls; every squad player becomes one record.
Can I scrape a whole league at once? Yes — pass a competition code (e.g. GB1) or league URL in leagueCodes. The scraper walks every club in the league and returns their full squads, capped by Max Results.
Am I charged if a run returns nothing? No. Pricing is per player record pushed, with no actor-start fee. Blocked or empty pages are dropped without billing.
What is market_value_source? It tells you whether each current market value came from the page HTML (html), Transfermarkt's valuation JSON (ceapi), or both in agreement (html+ceapi). It's how the scraper stays reliable when the website's HTML changes.
Does it return peak market value? Yes. Profile mode pulls the all-time peak value and its date from Transfermarkt's market-value development data.
What about transfer history? Profile mode returns the full transfer history list (from club, to club, fee, date) for each player.
Does it work without a proxy? Yes for standard volumes. For large runs, enable Apify RESIDENTIAL proxy to avoid 429 rate limits.
What does parse_confidence mean? 1.0 = all critical fields present. Below 0.5 means the page structure likely changed; check warnings for affected fields.
parse_confidence trust score
Dual-source market value — HTML header + ceapi JSON cross-check. The market_value_source field tells you exactly which path each value used (html, ceapi, or html+ceapi). Silent drift becomes loud. Use cases include fantasy football data pipelines, sports betting models, and club M&A research.
Use with AI agents (MCP)
AI agents (Claude, GPT-4o) can query Transfermarkt player values and transfer history directly via MCP.
Config: https://mcp.apify.com/?tools=bovi/transfermarkt-scraper
Integrations
Built for football-analytics firms, fantasy-sports platforms, and betting modelers tracking player valuations and transfer history — the JSON/dataset output drops into the tools you already run, no glue code:
- n8n / Make / Zapier — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: n8n, Make, Zapier.
- Webhooks — fire your own endpoint the moment a run finishes, to push results straight into your pipeline (docs).
- MCP server — expose this actor as a tool to Claude, Cursor, or any MCP client so an AI agent can pull this data mid-conversation (guide).
- API & SDKs — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.
See all Apify integrations.
Disclaimer
Transfermarkt is a public website. This Transfermarkt scraper accesses publicly available player, club, and market-value pages. No authentication is required and no private data is collected.
More scrapers from our toolkit
Building a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:
- Companies France
- Companies House UK Scraper
- Crunchbase Scraper
- Seeking Alpha Scraper
- Unusual Options Activity
- Yahoo Finance Scraper
Chain any of them together from the Integrations tab (the Run succeeded trigger) to build a multi-step workflow — one actor's output feeds the next.
Use it from your existing tools
Use with Claude Desktop / Cursor / Cline (MCP)
Load this actor as a tool in your AI assistant. Call it directly from your AI assistant via the Apify MCP server — no Store browsing needed. Paste this into your MCP client config (e.g. claude_desktop_config.json) and restart the client:
{"mcpServers": {"apify-transfermarkt-scraper": {"command": "npx","args": ["-y","@apify/actors-mcp-server","--tools","bovi/transfermarkt-scraper"],"env": {"APIFY_TOKEN": "YOUR_APIFY_TOKEN"}}}}
Replace YOUR_APIFY_TOKEN with your own Apify API token (free at apify.com → Settings → Integrations). Curated to a handful of tools so the agent selects reliably.
Works with Clay
Run this actor as an HTTP enrichment step inside a Clay table:
- Method:
POST - URL:
https://api.apify.com/v2/acts/bovi~transfermarkt-scraper/run-sync-get-dataset-items?token={{apify_token}} - Body (JSON): map your Clay columns to the actor input (see the Input section above), e.g.
{"playerUrls": "{{clay_column}}"}
The run finishes synchronously and returns the dataset rows straight into your Clay table. It runs on Apify's cloud under your own token and usage. Synchronous runs must complete within 300 seconds.