Transfermarkt Market Value Scraper: Value Change Alerts avatar

Transfermarkt Market Value Scraper: Value Change Alerts

Pricing

from $6.08 / 1,000 player returneds

Go to Apify Store
Transfermarkt Market Value Scraper: Value Change Alerts

Transfermarkt Market Value Scraper: Value Change Alerts

Transfermarkt market value scraper and tracker: look up players by link, id or name, whole squads, a league's top table or the most valuable players. Get value changes, club changes and new top-table entrants posted to Discord, Slack or Telegram. Sporting data only. No login.

Pricing

from $6.08 / 1,000 player returneds

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Look up the Transfermarkt market value of any list of players, whole squads, a league's most valuable players, or the world's top table. Switch on monitoring and get a message in Discord, Slack or Telegram when a player's value moves, a player changes club, or someone enters the top table. Sporting data only. No login.

What it does

  • Players. Paste Transfermarkt profile links, the number at the end of a link, or just names. You get club, position, age, nationality, market value in euros and the contract end date; the previous value and change in percent come with monitoring or the history option.
  • Squads and tables. Paste a club link for its whole squad, a league link for that league's most valuable players, or tick "Add the world's most valuable players".
  • Monitoring. Tick "Only return players that changed since the last run" and schedule the actor. Unchanged players cost nothing: you are billed only for the players that moved.
  • Value history. Tick "Include the value history and previous value" for Transfermarkt's full market value timeline (date, value, club at the time), the previous value and the change in percent for every player you listed. It needs a second request per player.

A miss (a name Transfermarkt does not know, a bot check) comes back as a row with "found": false and is never charged.

How to use

  1. In the Apify Console. Open the actor page and click Start — the players field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~transfermarkt-player-value-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"players":["https://www.transfermarkt.com/lamine-yamal/profil/spieler/937958","https://www.transfermarkt.com/erling-haaland/profil/spieler/418560","https://www.transfermarkt.com/kylian-mbappe/profil/spieler/342229","https://www.transfermarkt.com/michael-olise/profil/spieler/566723","https://www.transfermarkt.com/jude-bellingham/profil/spieler/581678"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"players": [
"https://www.transfermarkt.com/lamine-yamal/profil/spieler/937958",
"https://www.transfermarkt.com/erling-haaland/profil/spieler/418560",
"https://www.transfermarkt.com/kylian-mbappe/profil/spieler/342229",
"https://www.transfermarkt.com/michael-olise/profil/spieler/566723",
"https://www.transfermarkt.com/jude-bellingham/profil/spieler/581678"
]
}

One player per line: a Transfermarkt profile link, the number at the end of that link, or just a name such as "Lamine Yamal". Names use Transfermarkt's own search and take the first player it lists. Add whole squads, a league's top table or the world's most valuable players with the fields below. No login required. Accepted formats: https://www.transfermarkt.com/erling-haaland/profil/spieler/418560, 418560, Lamine Yamal.

An example that mixes a player list, one squad and the top table:

{
"players": ["https://www.transfermarkt.com/erling-haaland/profil/spieler/418560", "Lamine Yamal"],
"clubs": ["https://www.transfermarkt.com/manchester-city/startseite/verein/281"],
"topValue": true,
"maxItems": 30,
"includeHistory": true
}

Output

One row per player, for example:

queryfoundstatusplayerIdnameclubpositionagenationalitymarketValueEurpreviousValueEurvalueChangePctpreviousValueSourcecontractExpireschangeTypechangeDetailvalueHistoryurlcheckedAtscrapedAt
https://www.transfermarkt.com/erling-haaland/profil/spieler/418560falseBLOCKED<market value (eur)><previous value (eur)><change (%)>2026-10-29T22:30:26.744Z
FieldMeaning
marketValueEurCurrent market value in euros (a Transfermarkt community estimate).
previousValueEur, valueChangePctThe value before this one and the change in percent. With monitoring on and an earlier run, this is the value you saw last time (previousValueSource: last-run). Transfermarkt's own previous valuation (transfermarkt-history) is read only when you tick "Include the value history" or when monitoring sees a player for the first time; otherwise both fields are empty.
contractExpiresContract end date from the player's page. Empty for players that come from a squad or table (those lists do not carry it).
changeType, changeDetailMonitoring runs only: baseline (first time seen), value-change, club-change, new-entrant or unchanged, with the old and new value in words.
valueHistoryOnly when "Include the value history" is ticked.
found, status, messageOK, or NOT_FOUND, BLOCKED, BAD_FORMAT, PARSE_CHANGED with a plain explanation.

Alert me when a player's value changes

  1. Start with your list. Put the players (or a club link, or the top table) into the input and tick Only return players that changed since the last run. Give the watchlist a name if you will edit the list later. Run it once: it saves every current value as the baseline.
  2. Add the alert link. Create a webhook in your Discord channel (Channel settings, Integrations, Webhooks), a Slack incoming webhook, or a Telegram bot link, and paste it into Send alerts to. The link is stored encrypted and never written to the results.
  3. Schedule it. Save the input as an Apify Task and add a Schedule (daily or weekly). From the second run on, each value change, club change and new top-table entrant arrives as one message with the old and new value; a quiet run returns nothing and bills only the start fee.

Example runs

  • Transfermarkt market value for a list of players. Five profile links in players; add includeHistory for the timeline.
  • Transfermarkt most valuable players by league. One league link in clubs (for example https://www.transfermarkt.com/premier-league/marktwerte/wettbewerb/GB1) and maxItems 25.
  • Player value change alert to Discord. The same players, deltaMode on, minChangePct 5, and your Discord webhook in notifyUrl.

Limits

  • Sporting data only. No dates of birth, places of birth, agents, family, social media or photos are read or returned.
  • Market values are Transfermarkt community estimates, not transfer fees, and Transfermarkt updates them in steps a few times a year, so most days nothing changes.
  • Squads and tables carry less. Rows from a club or league link have no contract date and no value history; monitoring still compares their value and club between runs.
  • Names take the first search hit. A common name can match someone else: use the profile link or id for certainty.
  • Pace. Pages are fetched one at a time, about every 1.5 seconds: one request per listed player, two with the history option. A 100-player list takes several minutes. If Transfermarkt answers with a rate limit or a bot check, the run stops asking, returns the remaining entries as free BLOCKED rows and charges nothing for them.
  • Terms. Transfermarkt's terms restrict automated access to its content; you are responsible for how you use the data.
  • Player returned: $8 per 1,000 players

Plus a $0.002 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~transfermarkt-player-value-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"players":["https://www.transfermarkt.com/lamine-yamal/profil/spieler/937958","https://www.transfermarkt.com/erling-haaland/profil/spieler/418560","https://www.transfermarkt.com/kylian-mbappe/profil/spieler/342229","https://www.transfermarkt.com/michael-olise/profil/spieler/566723","https://www.transfermarkt.com/jude-bellingham/profil/spieler/581678"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~transfermarkt-player-value-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"players":["https://www.transfermarkt.com/lamine-yamal/profil/spieler/937958","https://www.transfermarkt.com/erling-haaland/profil/spieler/418560","https://www.transfermarkt.com/kylian-mbappe/profil/spieler/342229","https://www.transfermarkt.com/michael-olise/profil/spieler/566723","https://www.transfermarkt.com/jude-bellingham/profil/spieler/581678"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~transfermarkt-player-value-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"players":["{{player}}"]}, mapping the row's player into the players array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Transfermarkt Scraper: Market Value & Change Alerts" — the agent will find and run this actor.