Executive Summary
34%
Clubs' average hit rate
In total we identified 172 real signings by the clubs of Bundesliga in the 2024/25 season — academy promotions, loan returns, internal moves and transfers that never went through are excluded. Of these, 163 are included in the hit-rate calculation; 9 are youth investments (under-23 with no game time), classified separately. Signings without relevant minutes in the season count as unsuccessful.
Club Ranking
| Club | League position | Signings | Evaluated | Successful | Fair | Unsuccessful | Hit rate % | SigningLab* |
| 1 | Borussia Dortmund | 4º | 8 | 7 | 5 | 1 | 1 | 79% | 71% |
| 2 | Bayer Leverkusen | 2º | 6 | 5 | 3 | 1 | 1 | 70% | 80% |
| 3 | Bayern München | 1º | 3 | 3 | 1 | 2 | 0 | 67% | 100% |
| 4 | VfL Wolfsburg | 11º | 7 | 7 | 2 | 3 | 2 | 50% | 100% |
| 5 | Borussia Mönchengladbach | 10º | 4 | 4 | 2 | 0 | 2 | 50% | 100% |
| 6 | FC Augsburg | 12º | 10 | 10 | 2 | 5 | 3 | 45% | 90% |
| 7 | Eintracht Frankfurt | 3º | 8 | 7 | 2 | 2 | 3 | 43% | 86% |
| 8 | RB Leipzig | 7º | 7 | 7 | 1 | 2 | 4 | 29% | 71% |
| 9 | VfB Stuttgart | 9º | 12 | 11 | 2 | 2 | 7 | 27% | 100% |
| 10 | 1899 Hoffenheim | 16º | 10 | 10 | 1 | 3 | 6 | 25% | 80% |
| 11 | FSV Mainz 05 | 6º | 8 | 8 | 1 | 2 | 5 | 25% | 88% |
| 12 | FC St. Pauli | 15º | 26 | 23 | 3 | 5 | 15 | 24% | 83% |
| 13 | 1. FC Heidenheim | 14º | 11 | 11 | 1 | 3 | 7 | 23% | 91% |
| 14 | Union Berlin | 13º | 7 | 7 | 0 | 3 | 4 | 21% | 86% |
| 15 | Holstein Kiel | 17º | 20 | 20 | 2 | 4 | 14 | 20% | 95% |
| 16 | VfL Bochum | 18º | 10 | 10 | 0 | 4 | 6 | 20% | 80% |
| 17 | SC Freiburg | 5º | 5 | 5 | 1 | 0 | 4 | 20% | 80% |
| 18 | Werder Bremen | 8º | 5 | 5 | 0 | 0 | 5 | 0% | 80% |
| 19 | SV Elversberg | 19º | 5 | 3 | 0 | 0 | 3 | 0% | 100% |
* SigningLab: hit rate of SigningLab’s verdicts (recommend or not recommend) on each club’s evaluated signings, projected at the time of signing.
The difference between Signings and Evaluated are youth investments (under-23 with no game time in the season), classified separately. Signings without relevant minutes are unsuccessful (Did not deliver).
Season Highlights
The ten signings with the greatest technical impact of the season, according to the Player Impact Score (PIS).
| Player | Club | Pos | Min | G+A | Avg rating | Rating | SigningLab |
| Michael Olise | Bayern München | M | 2346 | 12+15 | 7.94 | Excellent |
| Sehrou Guirassy | Borussia Dortmund | F | 2602 | 21+2 | 7.27 | Excellent |
| Mohamed El Amine Amoura | VfL Wolfsburg | F | 2481 | 10+9 | 7.17 | Excellent |
| Aleix García | Bayer Leverkusen | M | 1458 | 3+4 | 5.67 | Excellent |
| Tim Kleindienst | Borussia Mönchengladbach | F | 2743 | 16+7 | 7.31 | Excellent |
| Waldemar Anton | Borussia Dortmund | D | 1948 | 2+2 | 6.26 | Excellent |
| Kevin Stöger | Borussia Mönchengladbach | M | 1553 | 3+3 | 6.44 | Excellent |
| Pascal Groß | Borussia Dortmund | F | 2337 | 0+9 | 7.17 | Excellent |
| Jan-Niklas Beste | SC Freiburg | M | 210 | 0+1 | 6.06 | Good |
| Emiliano Buendía | Bayer Leverkusen | M | 264 | 2+0 | 4.16 | Good |
Methodology
Club assessment — the universe of signings
The report considers exclusively genuine signings for the first-team squad, identified by the player's effective incorporation into the group between seasons. Excluded from the universe are: academy promotions, loan returns, internal administrative moves and transfers recorded but never completed. The aim is to measure the quality of market decisions — and those alone.
Player Impact Score (PIS)
Each evaluated signing receives a score from 0 to 100 that combines four observable technical dimensions: individual performance (average match ratings over the season), output (goals, assists and decisive actions adjusted for game time), collective performance (starting status and correlation with the club's results) and availability (volume of matches, adjusted for interruptions). High-impact players with reduced game time are promoted through an alternative efficiency criterion.
Outcome classification
The rating tiers are: Excellent and Good (successful signings — a full point in the index), Fair (intermediate performance — half a point) and Below expectations / Did not deliver (unsuccessful signings). Two categories sit outside the calculation, for distinct reasons: Injury (a serious injury prevented a fair assessment) and Investment (an under-23 player with low game time — the return depends on development and cannot be counted for or against the club in this cycle). Signings that did not reach relevant game time in the season are classified as unsuccessful, reflecting the sporting cost of the decision.
A note on scope
This is SigningLab's public, simplified model, developed for transparent retrospective market assessment. SigningLab's commercial solutions for partner clubs use a substantially larger set of variables and dedicated predictive mechanisms, and are not fully reflected in this document.
Appendix — Signings by club
* Youth investment (under-23, no game time in the season) — outside the hit-rate calculation.
1. FC Heidenheim (11 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Paul Wanner | 35 | 1837 | 3 | 3 | Fair |
| Frans Krätzig | 19 | 1403 | 1 | 2 | Fair |
| Niklas Dorsch | 25 | 1403 | 2 | 2 | Fair |
| Mathias Honsak | 24 | 1338 | 7 | 1 | Below expectations |
| Leo Scienza | 33 | 1288 | 4 | 4 | Good |
| Budu Zivzivadze | 17 | 1079 | 2 | 2 | Below expectations |
| Sirlord Conteh | 35 | 912 | 1 | 1 | Did not deliver |
| Luca Kerber | 34 | 862 | 2 | 0 | Did not deliver |
| Mikkel Kaufmann | 13 | 370 | 0 | 0 | Did not deliver |
| Maximilian Breunig | 19 | 348 | 2 | 0 | Did not deliver |
| Julian Niehues | 12 | 149 | 0 | 0 | Did not deliver |
1899 Hoffenheim (10 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Arthur Chaves | 28 | 2191 | 1 | 0 | Fair |
| Adam Hložek | 27 | 1874 | 8 | 3 | Good |
| Alexander Prass | 27 | 1576 | 0 | 1 | Below expectations |
| Valentin Gendrey | 24 | 1416 | 1 | 1 | Fair |
| Leo Østigård | 11 | 928 | 0 | 0 | Fair |
| Haris Tabaković | 30 | 818 | 3 | 1 | Below expectations |
| Gift Orban | 17 | 690 | 4 | 0 | Below expectations |
| Erencan Yardımcı | 13 | 325 | 0 | 0 | Did not deliver |
| Robin Hranáč | 19 | 219 | 0 | 0 | Did not deliver |
| Christopher Lenz | 2 | 0 | 0 | 0 | Did not deliver |
Bayer Leverkusen (6 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Aleix García | 34 | 1458 | 3 | 4 | Excellent |
| Nordi Mukiele | 27 | 904 | 1 | 0 | Fair |
| Martin Terrier | 15 | 583 | 2 | 1 | Good |
| Mario Hermoso | 5 | 292 | 0 | 0 | Below expectations |
| Emiliano Buendía | 15 | 264 | 2 | 0 | Good |
| Jeanuël Belocian * | 10 | 68 | 0 | 0 | Investment |
Bayern München (3 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Michael Olise | 34 | 2346 | 12 | 15 | Excellent |
| João Palhinha | 23 | 686 | 0 | 0 | Fair |
| Hiroki Ito | 6 | 257 | 1 | 0 | Fair |
Borussia Dortmund (8 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Sehrou Guirassy | 30 | 2602 | 21 | 2 | Excellent |
| Pascal Groß | 30 | 2337 | 0 | 9 | Excellent |
| Waldemar Anton | 29 | 1948 | 2 | 2 | Excellent |
| Maximilian Beier | 30 | 1589 | 8 | 5 | Good |
| Yan Couto | 29 | 892 | 0 | 0 | Below expectations |
| Daniel Svensson | 12 | 785 | 1 | 3 | Fair |
| Carney Chukwuemeka | 11 | 245 | 1 | 0 | Good |
| Ayman Azhil * | 8 | 23 | 0 | 0 | Investment |
Borussia Mönchengladbach (4 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Tim Kleindienst | 31 | 2743 | 16 | 7 | Excellent |
| Kevin Stöger | 34 | 1553 | 3 | 3 | Excellent |
| Philipp Sander | 28 | 1407 | 1 | 0 | Below expectations |
| Veit Stange | 1 | 0 | 0 | 0 | Did not deliver |
Eintracht Frankfurt (8 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Arthur Theate | 31 | 2709 | 0 | 0 | Good |
| Rasmus Kristensen | 30 | 2523 | 5 | 3 | Good |
| Oscar Højlund | 23 | 722 | 1 | 0 | Did not deliver |
| Mahmoud Dahoud | 25 | 367 | 1 | 1 | Fair |
| Michy Batshuayi | 14 | 317 | 3 | 0 | Fair |
| Elye Wahi | 11 | 207 | 0 | 0 | Did not deliver |
| Aurèle Amenda * | 24 | 121 | 0 | 0 | Investment |
| Krisztián Lisztes | 0 | 0 | 0 | 0 | Did not deliver |
FC Augsburg (10 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Dimitrios Giannoulis | 31 | 2655 | 1 | 4 | Fair |
| Frank Onyeka | 31 | 2597 | 0 | 1 | Fair |
| Chrislain Matsima | 32 | 2551 | 1 | 1 | Fair |
| Marius Wolf | 32 | 2168 | 1 | 3 | Below expectations |
| Alexis Claude-Maurice | 31 | 2125 | 9 | 2 | Good |
| Samuel Essende | 31 | 1646 | 7 | 2 | Fair |
| Nediljko Labrović | 34 | 1350 | 0 | 0 | Below expectations |
| Keven Schlotterbeck | 28 | 1298 | 3 | 1 | Good |
| Cedric Zesiger | 15 | 1227 | 0 | 2 | Fair |
| Steve Mounié | 27 | 346 | 1 | 0 | Below expectations |
FC St. Pauli (26 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Nikola Vasilj | 33 | 2970 | 0 | 0 | Good |
| Hauke Wahl | 33 | 2970 | 0 | 0 | Fair |
| Eric Smith | 32 | 2829 | 1 | 1 | Good |
| Jackson Irvine | 29 | 2610 | 0 | 6 | Excellent |
| Manolis Saliakas | 31 | 2328 | 2 | 1 | Fair |
| David Nemeth | 34 | 2141 | 0 | 1 | Fair |
| Johannes Eggestein | 32 | 1869 | 3 | 4 | Below expectations |
| Morgan Guilavogui | 25 | 1814 | 6 | 2 | Fair |
| Carlo Boukhalfa | 32 | 1666 | 2 | 0 | Below expectations |
| Oladapo Afolayan | 34 | 1634 | 3 | 1 | Below expectations |
| Danel Sinani | 33 | 1275 | 2 | 1 | Below expectations |
| Noah Weißhaupt | 19 | 1168 | 1 | 0 | Below expectations |
| Lars Ritzka | 29 | 925 | 1 | 0 | Did not deliver |
| Elias Saad | 20 | 912 | 3 | 2 | Below expectations |
| Karol Mets | 10 | 900 | 0 | 0 | Below expectations |
| Siebe Van Der Heyden | 13 | 876 | 1 | 0 | Fair |
| James Sands | 7 | 451 | 0 | 0 | Below expectations |
| Robert Wagner | 14 | 419 | 0 | 0 | Did not deliver |
| Adam Dźwigała | 31 | 373 | 0 | 0 | Did not deliver |
| Connor Metcalfe | 13 | 371 | 0 | 0 | Did not deliver |
| Scott Banks * | 22 | 112 | 0 | 0 | Investment |
| Andreas Albers | 18 | 91 | 1 | 0 | Did not deliver |
| Ben Voll | 24 | 91 | 0 | 0 | Did not deliver |
| Erik Ahlstrand * | 21 | 40 | 0 | 0 | Investment |
| Finley Stevens * | 15 | 1 | 0 | 0 | Investment |
| Eric Oelschlägel | 10 | 0 | 0 | 0 | Did not deliver |
FSV Mainz 05 (8 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Kaishu Sano | 34 | 3045 | 0 | 0 | Excellent |
| Moritz Jenz | 23 | 1606 | 0 | 0 | Fair |
| Armindo Sieb | 34 | 772 | 2 | 2 | Did not deliver |
| Hyun-Seok Hong | 32 | 541 | 0 | 1 | Fair |
| Nikolas Veratschnig | 27 | 370 | 0 | 0 | Did not deliver |
| Arnaud Nordin | 13 | 86 | 0 | 0 | Did not deliver |
| Lennard Maloney | 15 | 28 | 0 | 0 | Did not deliver |
| Gabriel Vidović | 3 | 9 | 0 | 0 | Did not deliver |
Holstein Kiel (20 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Timo Becker | 31 | 2443 | 0 | 2 | Below expectations |
| Nicolai Remberg | 32 | 2420 | 0 | 1 | Fair |
| Timon Weiner | 32 | 2250 | 0 | 0 | Below expectations |
| Finn Dominik Porath | 32 | 1972 | 2 | 2 | Below expectations |
| Shuto Machino | 34 | 1960 | 11 | 2 | Good |
| Armin Gigović | 33 | 1906 | 5 | 1 | Fair |
| Magnus Knudsen | 33 | 1866 | 0 | 1 | Below expectations |
| Lasse Rosenboom | 34 | 1747 | 2 | 2 | Below expectations |
| Marko Ivezić | 33 | 1657 | 0 | 0 | Did not deliver |
| Marco Komenda | 25 | 1319 | 0 | 0 | Did not deliver |
| Max Geschwill | 29 | 1284 | 1 | 2 | Below expectations |
| Alexander Bernhardsson | 20 | 1271 | 7 | 2 | Good |
| Lewis Holtby | 26 | 1235 | 0 | 1 | Fair |
| Patrick Erras | 10 | 833 | 1 | 0 | Below expectations |
| Benedikt Pichler | 23 | 791 | 1 | 2 | Below expectations |
| John Tolkin | 13 | 739 | 0 | 2 | Fair |
| Jann-Fiete Arp | 32 | 711 | 2 | 0 | Did not deliver |
| Carl Johansson | 17 | 578 | 0 | 0 | Did not deliver |
| Tymoteusz Puchacz | 14 | 395 | 0 | 1 | Did not deliver |
| Marvin Schulz | 24 | 312 | 0 | 0 | Did not deliver |
RB Leipzig (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Arthur Vermeeren | 32 | 1585 | 0 | 2 | Below expectations |
| Lutsharel Geertruida | 31 | 1570 | 1 | 0 | Fair |
| Antonio Nusa | 25 | 1564 | 3 | 3 | Fair |
| Ridle Baku | 19 | 1277 | 2 | 3 | Good |
| Kosta Nedeljković | 14 | 478 | 0 | 0 | Did not deliver |
| Maarten Vandevoordt | 34 | 428 | 0 | 0 | Below expectations |
| Leopold Zingerle | 14 | 0 | 0 | 0 | Did not deliver |
SC Freiburg (5 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Patrick Osterhage | 31 | 2274 | 1 | 0 | Below expectations |
| Eren Dinkci | 25 | 1193 | 0 | 3 | Below expectations |
| Florian Müller | 28 | 752 | 0 | 0 | Did not deliver |
| Jan-Niklas Beste | 13 | 210 | 0 | 1 | Good |
| Jannik Huth | 12 | 0 | 0 | 0 | Did not deliver |
SV Elversberg (5 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Florian Le Joncour | 2 | 180 | 0 | 0 | Did not deliver |
| Muhammed Damar * | 2 | 179 | 0 | 0 | Investment |
| Fisnik Asllani * | 2 | 179 | 1 | 1 | Investment |
| Lukas Petkov | 2 | 175 | 1 | 0 | Did not deliver |
| Robin Fellhauer | 2 | 168 | 1 | 0 | Did not deliver |
Union Berlin (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Tom Rothe | 30 | 1672 | 3 | 3 | Below expectations |
| Woo-yeong Jeong | 23 | 1272 | 3 | 2 | Below expectations |
| Andrej Ilić | 16 | 942 | 7 | 0 | Fair |
| Robert Skov | 20 | 863 | 2 | 2 | Fair |
| László Bénes | 30 | 613 | 2 | 1 | Fair |
| Marin Ljubičić | 14 | 294 | 1 | 1 | Did not deliver |
| Carl Klaus | 8 | 0 | 0 | 0 | Did not deliver |
VfB Stuttgart (12 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Julian Chabot | 31 | 2280 | 3 | 1 | Excellent |
| Ermedin Demirović | 34 | 1862 | 15 | 1 | Good |
| Nick Woltemade | 33 | 1636 | 12 | 2 | Fair |
| Ramon Hendriks | 33 | 1166 | 0 | 1 | Below expectations |
| Fabian Rieder | 32 | 872 | 1 | 3 | Below expectations |
| Ameen Al-Dakhil | 14 | 436 | 0 | 0 | Did not deliver |
| Jacob Bruun Larsen | 17 | 418 | 1 | 0 | Did not deliver |
| El Bilal Touré | 13 | 350 | 2 | 1 | Fair |
| Yannik Keitel | 29 | 277 | 0 | 0 | Below expectations |
| Justin Diehl * | 9 | 98 | 1 | 0 | Investment |
| Frans Krätzig | 5 | 57 | 0 | 0 | Did not deliver |
| Stefan Drljača | 1 | 0 | 0 | 0 | Did not deliver |
VfL Bochum (10 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Ibrahima Sissoko | 32 | 2632 | 2 | 1 | Fair |
| Patrick Drewes | 33 | 1889 | 0 | 0 | Below expectations |
| Jakov Medić | 33 | 1619 | 1 | 0 | Fair |
| Dani de Wit | 33 | 1175 | 2 | 1 | Below expectations |
| Tom Krauß | 14 | 1080 | 0 | 0 | Below expectations |
| Giorgos Masouras | 14 | 1063 | 2 | 0 | Fair |
| Myron Boadu | 22 | 1050 | 9 | 1 | Fair |
| Koji Miyoshi | 21 | 466 | 1 | 0 | Did not deliver |
| Aliou Balde | 6 | 94 | 0 | 0 | Did not deliver |
| Samuel Bamba | 13 | 35 | 0 | 0 | Did not deliver |
VfL Wolfsburg (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Kamil Grabara | 29 | 2586 | 0 | 0 | Fair |
| Mohamed El Amine Amoura | 31 | 2481 | 10 | 9 | Excellent |
| Denis Vavro | 31 | 2462 | 2 | 0 | Good |
| Andreas Skov Olsen | 16 | 532 | 1 | 1 | Fair |
| Marius Müller | 30 | 474 | 0 | 0 | Fair |
| Salih Özcan | 18 | 358 | 0 | 0 | Below expectations |
| Mads Roerslev Rasmussen | 11 | 296 | 0 | 0 | Did not deliver |
Werder Bremen (5 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Derrick Köhn | 31 | 1360 | 2 | 2 | Below expectations |
| Marco Grüll | 31 | 1198 | 6 | 1 | Below expectations |
| André Silva | 14 | 383 | 1 | 0 | Below expectations |
| Issa Kaboré | 12 | 312 | 0 | 0 | Did not deliver |
| Markus Kolke | 1 | 0 | 0 | 0 | Did not deliver |