Build a football-data agent that turns transfer-market noise into scout-ready alerts
A constrained pipeline turns raw transfer updates into scout-ready alerts: allowlist sources, dedupe events, and sign off before publishing.

A deadline-day cycle can repeat the same player move as a fee, a contract note, and a valuation. A football-data agent should collapse that noise into one alert a scout can trust.
Build the agent around three gates:
- Source allowlist: the agent reads only approved endpoints and pages.
- Event dedup: repeated reports merge into one player-move record.
- Human sign-off: a scout or editor approves the alert before publication.
Teams rely on Transfermarkt for transfer records with fees and clubs, match stats such as minutes and bookings, and market values with contract information.
Allowlist sources before the agent writes
Start with a short list of endpoints and pages the agent may read. Anything outside the list is dropped. Build the list around what the source can return, not what the desk hopes it returns.
Parse.bot's Transfermarkt wrapper provides five endpoints for Serie A football data, covering team valuations, squad lists, and season-level player performance. Numeric Transfermarkt IDs serve as the common join key across the five endpoints, connecting team and player records to detail calls.
The Apify webdatalabs Transfermarkt scraper accepts only player URLs and rejects club/squad URLs such as /verein/ and competition URLs such as /wettbewerb/. It relies on publicly available pages and does not use login, restricted content, or a live/real-time feed.
Record the endpoint, page type, fields returned, and last successful pull. Failed calls mark the event as outdated. Missing squad pages block squad-level claims. Do not let the agent fill gaps from memory.
Treat each endpoint as a different claim type. Valuation calls add value context. Player calls carry profile facts. Squad calls support roster facts. Missing fields stay out of the alert.
Deduplicate events before the alert fires
Merge repeated reports into one record. The desk should see one event per player move, not one alert per rumor.
Iliman Ndiaye completed a move from Everton to Manchester City in a deal worth up to £65m. His transfer was structured as £60m plus £5m in add-ons. He signed a five-year contract with Manchester City. He recorded 15 goals and four assists in 67 Premier League games for Everton before moving to Manchester City.
Enzo Fernández completed a £125m transfer from Chelsea to Manchester City. Manchester City's two deadline-day signings cost £190m, Tottenham added two Chelsea players, and Everton's Folarin Balogun deal fell through.
Store a stable key before the alert is written. Use the player identity, the clubs involved, the fee range, and the contract length. Fee-range changes update the existing event. Club changes create a separate event and flag the conflict. The conflict note names the changed field.
Track the stage of each move. The pipeline should not advance a move without supporting evidence. Transfermarkt's purpose is to estimate a player's free-market value rather than forecast transfer fees. Actual transfer fees are rarely available to the public, so researchers use websites that provide market-value estimates.
Require human sign-off before publication
The pipeline can draft the alert. It should not publish it. A scout or editor approves the alert, the source list, and the wording.
Give the reviewer a compact summary: the proposed alert, the source list, the changed fields, and the dedup history. The reviewer can approve, edit, or reject. Rejection returns the event to the queue rather than deleting it. Log who approved, what changed, and which source fields were used.
Keep the output short. A scout-ready alert names the player, the clubs, the fee structure, the contract length, and the evidence check. It omits rumor, speculation, and unverified add-ons. An unconfirmed fee is labeled as unconfirmed. Rerun the pipeline when a new source is added or a correction arrives.