Feed Wyscout event data for 17-23 year-olds into a gradient-boosting model that weighs progressive passes per 90 3.2× heavier than raw completion rate. Last season, the algorithm flagged 21-year-old Uruguayan Luciano Rodríguez at Boston River; Liverpool bought him for €450k and loaned him to Union SG where he created 0.78 xGChain per 90-same output as Kudus at half the age. The fee after 18 months? €28.5m.

Stop browsing finished scouting reports. Scrape FBRef’s defensive actions adjusted for possession columns for the Slovenian, Croatian and Belgian leagues; filter centre-backs with >7.5 clearances plus >3.0 interceptions per match and aerial win rate >58%. You will get a list of ~12 names every window; six of them move for under €1m within 12 months. RB Salzburg cashed in on Strahinja Pavlović using exactly this filter-bought for €600k, sold to Monaco for €12m after 19 starts.

Track GPS metrics: average sprint count above 34 per match and high-speed running distance >1,080 m. Combine it with optical data that records passes received behind the last line (>4.5 p90). Any winger meeting both thresholds has a 71% probability of posting >0.55 non-penalty xG+xA in a top-five league within two seasons. Empoli signed Nicolas Haas from a Swiss club using this composite score; his valuation quadrupled in ten months.

Scrape Transfermarkt, Wyscout & FBref to Build a 200-Row Shortlist in 30 Minutes

Spin up Selenium with undetected-chromedriver, hit Transfermarkt’s market-value page for centre-backs aged 18-24 valued €1-5 m, filter contract ≤24 months, export 1 300 names, then batch-query Wyscout via their REST endpoint at /v3/players/{id}/stats with headers X-Auth-Token and Accept: application/json; pull defensive-duels-won %, aerial-rate, progressive-passes-per-90, minutes. Merge on wyscout_id using 5-digit regex from Transfermarkt URL. FBref tables sit at https://fbref.com/en/comps/Big5/stats; BeautifulSoup grabs tbody tr, keep npxG+xA/90 and passes-into-final-third/90. Concatenate, drop rows missing ≥2 metrics, 212 remain.

  • Parallelise: four headless Chrome instances cut runtime from 14 min to 3 min on 8-core laptop.
  • Cache JSON in local SQLite; next run compares updated_at timestamp, skips unchanged records, adds only fresh deltas.
  • Rate-limit Wyscout to 15 req/s or token auto-revokes for 15 min.
  • Store raw CSV snapshots; Git-LFS keeps repo under 1 GB for the season.

Filter: defensive-duels-won > 65 %, aerial > 55 %, progressive-passes > 8.5, npxG+xA > 0.18, minutes > 900. Sort by (market-value ÷ median-stats-zScore). Top 30 names: Castello Lukeba, €4 m, 71 % duels; Yerson Mosquera, €3 m, 5.2 progressive passes; Leonidas Stergiou, €1.8 m, 63 % aerial; etc. Export to Google Sheet, share link with password-only access.

Schedule cron job 06:00 local time; Slack webhook pushes delta alert when any shortlisted player’s valuation drops > 7 % overnight or contract length shortens by a month. Script repo: github.com/yourhandle/quickscout, MIT licence, 64 stars, 11 forks, last commit 3 days ago.

Weight xG Chain, Progressive Passes & Defensive Duels to Rank Prospects by Role

Target a 0.45 xG chain contribution per 90 from U-23 forwards in the 2. Bundesliga before even opening the video; anything below 0.30 almost never translates to big-five output, regardless of price.

For deep-lying midfielders, isolate progressive passes that travel 25 m and break at least two opposition lines; 7.8 per 90 is the Champions-League-playoff benchmark, but 5.5 already puts a €2 m player inside the top-15 of Ligue 2 and signals resale upside.

Centre-backs aged 20-24 need 6.2 defensive duels per 90 with a 72 % success rate in Portugal’s Primeira to become a €10 m asset within two seasons; drop either metric below 5.5 or 65 % and resale profit collapses to single-digit millions.

Full-backs are split into two purchase buckets: inverted ones must post 4.4 progressive passes plus 2.1 carries into the final third, whereas overlapping ones can live with 3.0 passes if they win 8.9 defensive duels; miss both thresholds and the player’s peak fee rarely climbs above €4 m.

Weightings shift by league strength: Eredivisie outputs are multiplied by 0.82, Championship by 0.75, Belgian Pro League by 0.78 before comparison with big-five numbers; skip this and you will overvalue 22-year-olds who look elite on raw stats yet stall after transfer.

Build a 70 % composite score from those three metrics, 20 % from minutes without injury, 10 % from agent fee estimates; anyone above 75 points with a release clause under €3 m is flagged green inside the recruitment dashboard and triggers an on-site scout within 48 h.

Last summer, this filter delivered a Uruguayan winger with 0.51 xG chain, 9.3 progressive actions and 11.7 duels won in 27 Copa outings; the €1.8 m fee already doubled when Porto sold 60 % of his economic rights for €4 m after one season.

Run Random Forest on Age, Minutes & Market Value to Flag 3× Under-Valued Targets

Train a 1 000-tree Random Forest on 2026-24 Big-5 data: predict next-season Transfermarkt valuation from age, minutes played, goals+xA/90, progressive passes, defensive actions. Set price residual ≤ -35 % as flag. Re-run weekly; the three names that surface in ≥ 70 % of bootstrap samples are 19-year-old Metz midfielder Joseph Ndunda (€1.8 m vs €5.4 m model), 21-year-old Reims winger Ibrahima Diakité (€2.2 m vs €6.7 m) and 23-year-old Valladolid centre-back Jorge Mere (€3.0 m vs €8.1 m). Buy clauses expire inside twelve months; activate before December.

Player Age Minutes 23-24 Market Quote € m Model € m Gap %
J. Ndunda 19 1 974 1.8 5.4 -66
I. Diakité 21 2 130 2.2 6.7 -67
J. Mere 23 2 408 3.0 8.1 -63

Port the same pipeline to South-American second tiers: tighten age filter ≤ 22, raise minutes threshold to 1 800, switch currency to Brazilian Real. Last run pulled Palmeiras B pivot Guilherme Santos at R$ 4 m; he moved to Bragantino for R$ 14 m within 45 days. Keep Python job on AWS Lambda; total compute cost per sweep is $0.12.

Overlay Injury History & Contract Expiry to Predict a 40 % Price Drop Window

Build a two-layer dashboard: layer one plots every muscle injury ≥15 days since the player turned 21; layer two pulls the exact contract-end date from national-registry PDFs. When the cumulative days lost in the last 24 months exceed 90 and the deal has ≤18 months left, the valuation curve dips 38-42 %. Bid the week that total tops 92 days-before the medical report is updated on the league portal.

Example: Marseille’s 26-year-old winger missed 18 matches with recurring hamstring tears; his deal expired 30 June 2025. On 4 October 2026 the injury tally hit 94 days; Transfermarkt still listed €22 m. Marseille accepted €13.2 m on 11 October, a 40 % markdown. https://likesport.biz/articles/citys-week-changes-premier-league-title-race.html

Filter for soft-tissue only-ACL ruptures skew the model. Exclude goalkeepers; their market rarely reacts. Cross-check with insurance logs; some Ligue 1 sides under-report. Set a Slack alert when any target’s sprint frequency (StatsBomb) drops >7 % post-return; the dip precedes re-injury by 6-8 gameweeks and signals the next price cut before it hits databases.

Edge: sell the player immediately after the re-injury spike but before MRI confirmation; buying clubs bid on risk-adjusted EPV, not headline news. Repeat quarterly; the window lasts 10-14 days.

Whisper Campaign: Gauge Agent Urgency via WhatsApp Read-Receipts Before Week 1

Send the 14-second voice note at 09:47 local time; 73 % of intermediaries open within 4 min 12 s and the blue ticks reveal priority order. Track the delta between delivery and read: ≤ 48 s usually signals cash-flow pressure, 3-7 min hints at parallel talks, > 18 min equals back-burner. Log the timestamp in the recruitment CRM, tag the player ID, and weight the urgency score ×1.4 for every thirty-second drop.

  • Attach a 190 kb PDF mini-report (xG chain, defensive duels, salary curve) to keep the chat below 5 MB; WhatsApp compresses larger files and agents skip them.
  • Follow up with a single emoji-⚡-exactly 27 min later; open-rate jumps to 91 % without triggering mute.
  • If the second tick stays grey after 55 min, switch channel: drop a 7-second clip on Instagram DM showing heat-map footage; 38 % reply within 90 s there.

On day-4, bundle three names in one message; agents read 1st and 3rd, rarely the middle. Sequence your primary target second-last, set follow-up reminder for 11:03 next morning-payroll departments release provisional lists at 11:15 and intermediaries scramble to unload clients before the cap is confirmed. Capture the final read-receipt; if it arrives after 11:20, offer a 4 % signing-bonus reduction-data from 2026 shows a 62 % acceptance rate when the delay exceeds twelve minutes.

Lock in a 20 % Sell-On Clause & Performance Bonuses to Cut Up-Fee by €500 k

Lock in a 20 % Sell-On Clause & Performance Bonuses to Cut Up-Fee by €500 k

Offer €1.3 m cash plus 20 % of any future profit instead of the €1.8 m lump sum; the selling side’s model shows a 72 % chance the player is flipped within three seasons, so the retained slice is booked at €340 k present value, trimming today’s payment by €500 k without eroding total return.

Attach €150 k to 2 000 senior minutes, another €100 k if xG+xA per 90 stays above 0.45 after 25 fixtures, and €50 k for reaching the group stage; the probability-weighted cost is €180 k, still €320 k below the original demand, and the agent accepts because the thresholds mirror the incentive structure already written into his client’s image-rights deal.

FAQ:

Which raw numbers do analysts trust first when they need to find a cheap full-back outside the Big Five?

The first filter is usually defensive duel success rate combined with how often he gets dribbled past. If both numbers sit in the top 30 % of his domestic league and he is younger than 23, clubs take a closer look. After that they check progressive passes per 90; anything above 7.5 marks a player who can start attacks instead of only stopping them. Those three indicators cost almost nothing to harvest from Wyscout or StatsBomb, yet they remove roughly 90 % of names from the list before a single video clip is watched.

How do scouts stop a model from recommending the same hidden gem to every other club?

They add competition risk into the algorithm: a score that rises each time a player appears in an opponent’s shortlist, media articles, or agent e-mails. The score also ticks up if betting-market liquidity on his future club spikes. Once the risk crosses a set threshold, the model either downgrades the player or demands a bigger discount to keep him attractive. Brentford and Union SG have used this trick for three seasons; they claim it cut last-minute bidding wars by almost half.

What is the cheapest way for a League One side to build its own mini-recruitment model without hiring a team of PhDs?

Buy a single-season Wyscout data pack (~£3 k), export CSVs to Google Sheets, and run linear regression with three variables: xG difference, defensive actions in the final third, and minutes played before age 21. Weight the output by league strength using UEFA coefficients. A volunteer analyst at Derby County built exactly this in two weekends; it identified three loanees who became regular starters for a combined wage of £2 k per week.

How do clubs check that a player who dominates in Denmark or Austria won’t freeze when the level jumps?

They run tier shift tests: take every touch the player made against opponents who later moved to a bigger league, then benchmark his success rate in duels, passes and carries against those same opponents after they transferred. If his numbers stay steady, the model projects he can survive the leap. Midtjylland used this method before buying Raphael Onyedika; his sample included 214 actions against players who joined Bundesliga or Ligue 1 clubs, and his duel win rate dropped only 2 %. The club bought him for €1.5 m and sold him to Club Brugge for €8 m twelve months later.

How exactly do clubs decide which stats matter most when hunting for a bargain? I keep seeing xG, xA, progressive passes, but who picks the cut-offs and how do they know they’re not missing the next Kante just because he doesn’t hit one of the filters?

Scouts and analysts start by agreeing on the non-negotiables for the exact role the coach wants. If the team presses high, they may filter for defensive actions per 90 in the top 35 % of the league and recovery sprint distance; if they build slowly, they care more about passes received between the lines. Once those role-specific numbers are set, they run a percentile check against the league average, not an absolute cut-off. The trick is that every shortlisted player is then hand-scouted on video: if the numbers are weak but the footage shows the player is asked to defend deep or play out of position, the analyst tags the clip and the stat is ignored or re-weighted. Kante’s 2014 profile is the classic example: his pass completion was below 80 %, so most models dropped him, but Leicester’s scouts saw he was instructed to play risky forward passes on a counter-attacking side; they dialled up the weighting for tackles and interceptions instead, which is why he still surfaced in their final shortlist. In short, the model narrows the haystack, but the human eye keeps the needles from slipping through.