{
  "openapi": "3.0.1",
  "info": {
    "title": "Transfermarkt Market Value Scraper: Value Change Alerts",
    "description": "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.",
    "version": "1.0",
    "x-build-id": "01sreebrjvdggYUrG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~transfermarkt-player-value-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-transfermarkt-player-value-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/accountable_eel~transfermarkt-player-value-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-transfermarkt-player-value-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/accountable_eel~transfermarkt-player-value-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-transfermarkt-player-value-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "players": {
            "title": "Players (Transfermarkt profile links, ids or names)",
            "type": "array",
            "description": "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. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "clubs": {
            "title": "Club or league links",
            "type": "array",
            "description": "Optional. One link per line, copied from transfermarkt.com: a club (https://www.transfermarkt.com/manchester-city/startseite/verein/281) adds its whole squad with market values; a league (https://www.transfermarkt.com/premier-league/marktwerte/wettbewerb/GB1) adds that league's most valuable players. Squad and league rows have no contract date or value history (those come from a player's own page); the \"Maximum players from squads and tables\" cap below applies to them.",
            "items": {
              "type": "string"
            }
          },
          "topValue": {
            "title": "Add the world's most valuable players",
            "type": "boolean",
            "description": "Adds the first players of Transfermarkt's most-valuable table (25 per page, newest values). With monitoring on, a player who was not in that table on the last run is reported as a new entrant.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum players from squads and tables",
            "type": "integer",
            "description": "Caps the rows that come from club links, league links and the most-valuable table together (default 25, up to 500). Players you list yourself above are never capped.",
            "default": 25
          },
          "includeHistory": {
            "title": "Include the value history and previous value",
            "type": "boolean",
            "description": "Adds Transfermarkt's full market value history (date, value, club at the time) and, outside monitoring, the previous value and the change in percent, for every player you listed. One extra request per player, which roughly doubles the cost of a run; no extra charge. With monitoring on, the previous value comes from your last run, and a player seen for the first time gets Transfermarkt's previous value once without ticking this.",
            "default": false
          },
          "deltaMode": {
            "title": "Only return players that changed since the last run",
            "type": "boolean",
            "description": "Turns the list into a watchlist. A player is reported when their market value moved by at least the percentage below since the last run, when their club changed, or (with the most-valuable table on) when they entered that table. The first run saves a baseline. Unchanged players are removed before you are billed, so a quiet run only costs the start fee. Schedule it daily or weekly, and have each alert posted to Discord, Slack or Telegram with \"Send alerts to\" below.",
            "default": false
          },
          "minChangePct": {
            "title": "Smallest value change to report (%)",
            "type": "integer",
            "description": "Market values move in steps (for example €40m to €45m is +12.5%), so 5 skips nothing real. Use 0 to report every change.",
            "default": 5
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and one is derived from your lists, so two schedules with different players keep separate memories. Type your own name to keep one memory when you add or remove players.",
            "default": ""
          },
          "alertOnChangeOnly": {
            "title": "Return only the players that changed",
            "type": "boolean",
            "description": "On: a monitoring run returns (and bills) only value changes, club changes, new entrants and the first-run baseline. Off: every player comes back marked unchanged or changed, and all of them are billed.",
            "default": true
          },
          "skipFirstRun": {
            "title": "Seed silently (no rows on the first run)",
            "type": "boolean",
            "description": "The first run of a watchlist has nothing to compare with. Turn this on to remember every value without returning or billing it. Alerts start from the second run.",
            "default": false
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After the players are billed, each value change, club change and new entrant is posted here as one message with a badge, the old and new value, club and link. Discord or Slack: paste the channel's webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free, and a message that fails never fails the run (the rows' notifyErrors says why). Stored encrypted, never logged or written to the results."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on \"Detect from the link\": discord.com links get Discord messages, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Up to 100. Above this, one \"+N more\" message says how many more alerts are in the run's dataset. 0 sends only that summary message.",
            "default": 20
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "playerId",
                "name",
                "club",
                "position",
                "age",
                "nationality",
                "marketValueEur",
                "previousValueEur",
                "valueChangePct",
                "previousValueSource",
                "contractExpires",
                "changeType",
                "changeDetail",
                "valueHistory",
                "url",
                "checkedAt"
              ],
              "enumTitles": [
                "Player ID",
                "Player",
                "Club",
                "Position",
                "Age",
                "Nationality",
                "Market value (EUR)",
                "Previous value (EUR)",
                "Change (%)",
                "Previous value from",
                "Contract expires",
                "Change type",
                "What changed",
                "Value history",
                "Transfermarkt page",
                "Checked at"
              ]
            },
            "default": [
              "playerId",
              "name",
              "club",
              "position",
              "age",
              "nationality",
              "marketValueEur",
              "previousValueEur",
              "valueChangePct",
              "previousValueSource",
              "contractExpires",
              "changeType",
              "changeDetail",
              "valueHistory",
              "url",
              "checkedAt"
            ]
          },
          "expandRows": {
            "title": "One row per player (recommended) — turn off for one row per player instead",
            "type": "boolean",
            "description": "When on, each player found gets its own row instead of being grouped under its player. You're still only charged once per player, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 1,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}