Executive Summary
38%
Clubs' average hit rate
In total we identified 180 real signings by the clubs of Bundesliga in the 2023/24 season — academy promotions, loan returns, internal moves and transfers that never went through are excluded. Of these, 169 are included in the hit-rate calculation; 11 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 % |
| 1 | Borussia Mönchengladbach | 15º | 5 | 5 | 4 | 1 | 0 | 90% |
| 2 | Borussia Dortmund | 5º | 6 | 6 | 4 | 0 | 2 | 67% |
| 3 | Eintracht Frankfurt | 6º | 12 | 11 | 5 | 4 | 2 | 64% |
| 4 | VfB Stuttgart | 2º | 9 | 9 | 5 | 1 | 3 | 61% |
| 5 | Bayer Leverkusen | 1º | 10 | 9 | 4 | 1 | 4 | 50% |
| 6 | Bayern München | 3º | 7 | 6 | 2 | 2 | 2 | 50% |
| 7 | RB Leipzig | 4º | 11 | 9 | 3 | 2 | 4 | 44% |
| 8 | 1. FC Heidenheim | 8º | 19 | 19 | 7 | 2 | 10 | 42% |
| 9 | SV Darmstadt 98 | 18º | 19 | 19 | 4 | 7 | 8 | 40% |
| 10 | FC Augsburg | 11º | 9 | 9 | 3 | 1 | 5 | 39% |
| 11 | 1899 Hoffenheim | 7º | 7 | 7 | 2 | 1 | 4 | 36% |
| 12 | Union Berlin | 16º | 13 | 13 | 1 | 6 | 6 | 31% |
| 13 | FSV Mainz 05 | 14º | 8 | 7 | 2 | 0 | 5 | 29% |
| 14 | Werder Bremen | 9º | 8 | 8 | 0 | 4 | 4 | 25% |
| 15 | VfL Wolfsburg | 12º | 9 | 9 | 2 | 0 | 7 | 22% |
| 16 | 1. FC Köln | 17º | 7 | 7 | 1 | 1 | 5 | 21% |
| 17 | VfL Bochum | 13º | 8 | 8 | 1 | 1 | 6 | 19% |
| 18 | Fortuna Düsseldorf | 19º | 7 | 4 | 0 | 0 | 4 | 0% |
| 19 | SC Freiburg | 10º | 6 | 4 | 0 | 0 | 4 | 0% |
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 |
| Harry Kane | Bayern München | F | 2843 | 36+8 | 7.77 | Excellent |
| Alejandro Grimaldo | Bayer Leverkusen | M | 2785 | 10+13 | 7.76 | Excellent |
| Loïs Openda | RB Leipzig | F | 2716 | 24+7 | 7.35 | Excellent |
| Xavi Simons | RB Leipzig | F | 2673 | 8+11 | 7.71 | Excellent |
| Jan-Niklas Beste | 1. FC Heidenheim | M | 2619 | 8+11 | 7.39 | Excellent |
| Deniz Undav | VfB Stuttgart | F | 2102 | 18+10 | 7.65 | Excellent |
| Omar Marmoush | Eintracht Frankfurt | F | 2317 | 12+6 | 7.25 | Excellent |
| Tim Kleindienst | 1. FC Heidenheim | F | 2874 | 12+3 | 7.04 | Excellent |
| Victor Okoh Boniface | Bayer Leverkusen | F | 1563 | 14+8 | 7.39 | Excellent |
| Franck Honorat | Borussia Mönchengladbach | M | 2362 | 3+9 | 7.22 | Excellent |
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 (19 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Patrick Mainka | 34 | 3060 | 2 | 0 | Good |
| Kevin Müller | 34 | 3060 | 0 | 0 | Good |
| Tim Kleindienst | 33 | 2874 | 12 | 3 | Excellent |
| Jonas Föhrenbach | 33 | 2790 | 0 | 0 | Fair |
| Eren Dinkci | 33 | 2672 | 10 | 4 | Excellent |
| Jan-Niklas Beste | 31 | 2619 | 8 | 11 | Excellent |
| Haktab Omar Traore | 32 | 2474 | 0 | 2 | Fair |
| Lennard Maloney | 29 | 2300 | 1 | 1 | Good |
| Benedikt Gimber | 29 | 2026 | 1 | 1 | Below expectations |
| Jan Schöppner | 34 | 2000 | 2 | 2 | Below expectations |
| Marvin Pieringer | 31 | 1525 | 3 | 3 | Good |
| Kevin Sessa | 32 | 1000 | 3 | 0 | Below expectations |
| Adrian Beck | 28 | 971 | 1 | 1 | Did not deliver |
| Tim Siersleben | 33 | 914 | 0 | 0 | Did not deliver |
| Nikola Dovedan | 30 | 658 | 3 | 1 | Below expectations |
| Marnon Busch | 21 | 608 | 0 | 0 | Did not deliver |
| Denis Thomalla | 26 | 444 | 0 | 0 | Did not deliver |
| Stefan Schimmer | 34 | 194 | 0 | 1 | Did not deliver |
| Thomas Keller | 6 | 2 | 0 | 0 | Did not deliver |
1. FC Köln (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Rasmus Carstensen | 32 | 1659 | 0 | 0 | Did not deliver |
| Faride Alidou | 28 | 1285 | 4 | 0 | Fair |
| Luca Waldschmidt | 22 | 1152 | 3 | 0 | Good |
| Leart Paqarada | 25 | 1072 | 0 | 0 | Did not deliver |
| Dominique Heintz | 31 | 572 | 0 | 0 | Did not deliver |
| Matthias Köbbing | 10 | 0 | 0 | 0 | Did not deliver |
| Philipp Pentke | 25 | 0 | 0 | 0 | Did not deliver |
1899 Hoffenheim (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Anton Stach | 31 | 2332 | 2 | 3 | Excellent |
| Wout Weghorst | 29 | 1989 | 7 | 3 | Good |
| Marius Bülter | 31 | 1353 | 1 | 4 | Fair |
| David Jurásek | 16 | 490 | 0 | 1 | Did not deliver |
| Attila Szalai | 18 | 289 | 0 | 0 | Did not deliver |
| Mergim Berisha | 8 | 144 | 0 | 0 | Did not deliver |
| Julian Justvan | 6 | 53 | 0 | 0 | Did not deliver |
Bayer Leverkusen (10 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Granit Xhaka | 33 | 2828 | 3 | 0 | Excellent |
| Alejandro Grimaldo | 33 | 2785 | 10 | 13 | Excellent |
| Jonas Hofmann | 33 | 2215 | 5 | 7 | Excellent |
| Victor Okoh Boniface | 23 | 1563 | 14 | 8 | Excellent |
| Josip Stanišić | 32 | 1276 | 3 | 1 | Below expectations |
| Nathan Tella | 32 | 843 | 5 | 2 | Fair |
| Borja Iglesias | 11 | 252 | 0 | 0 | Did not deliver |
| Arthur * | 8 | 183 | 0 | 2 | Investment |
| Matej Kovar | 33 | 90 | 0 | 0 | Did not deliver |
| Gustavo Puerta | 28 | 45 | 0 | 0 | Did not deliver |
Bayern München (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Harry Kane | 32 | 2843 | 36 | 8 | Excellent |
| Min-jae Kim | 28 | 1972 | 1 | 1 | Fair |
| Konrad Laimer | 30 | 1770 | 0 | 3 | Good |
| Raphaël Guerreiro | 22 | 1205 | 3 | 0 | Fair |
| Eric Dier | 18 | 1166 | 0 | 0 | Did not deliver |
| Sacha Boey * | 4 | 109 | 0 | 0 | Investment |
| Daniel Peretz | 14 | 16 | 0 | 0 | Did not deliver |
Borussia Dortmund (6 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Niclas Füllkrug | 31 | 2227 | 12 | 8 | Excellent |
| Marcel Sabitzer | 27 | 1964 | 4 | 3 | Good |
| Ian Maatsen | 16 | 1269 | 2 | 2 | Good |
| Ramy Bensebaini | 20 | 1050 | 0 | 0 | Did not deliver |
| Felix Nmecha | 20 | 1016 | 1 | 2 | Good |
| Marcel Laurenz Lotka | 7 | 0 | 0 | 0 | Did not deliver |
Borussia Mönchengladbach (5 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Franck Honorat | 32 | 2362 | 3 | 9 | Excellent |
| Maximilian Wöber | 25 | 2071 | 2 | 3 | Good |
| Jordan Siebatcheu | 26 | 1429 | 5 | 3 | Good |
| Robin Hack | 32 | 1351 | 10 | 2 | Good |
| Tomáš Čvančara | 21 | 899 | 4 | 1 | Fair |
Eintracht Frankfurt (12 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Willian Pacho | 33 | 2970 | 0 | 2 | Good |
| Robin Koch | 31 | 2740 | 2 | 0 | Good |
| Omar Marmoush | 29 | 2317 | 12 | 6 | Excellent |
| Ellyes Skhiri | 27 | 2170 | 2 | 2 | Good |
| Farès Chaïbi | 29 | 1920 | 2 | 4 | Good |
| Hugo Larsson | 30 | 1885 | 2 | 1 | Fair |
| Niels Nkounkou | 31 | 1313 | 3 | 2 | Fair |
| Hugo Ekitiké | 14 | 725 | 4 | 2 | Fair |
| Donny van de Beek | 15 | 357 | 0 | 0 | Did not deliver |
| Saša Kalajdžić | 5 | 329 | 0 | 1 | Fair |
| Jessic Ngankam | 17 | 284 | 0 | 0 | Did not deliver |
| Jean-Mattéo Bahoya * | 9 | 174 | 0 | 0 | Investment |
FC Augsburg (9 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Finn Gilbert Dahmen | 31 | 2790 | 0 | 0 | Good |
| Phillip Tietz | 34 | 2405 | 8 | 4 | Excellent |
| Kevin Mbabu | 26 | 2048 | 0 | 2 | Fair |
| Kristijan Jakić | 14 | 1055 | 2 | 1 | Good |
| Tim Breithaupt | 29 | 633 | 0 | 0 | Did not deliver |
| Sven Michel | 30 | 598 | 2 | 1 | Below expectations |
| Pep Biel | 14 | 281 | 0 | 0 | Did not deliver |
| Masaya Okugawa | 5 | 30 | 0 | 0 | Did not deliver |
| Japhet Tanganga | 1 | 0 | 0 | 0 | Did not deliver |
FSV Mainz 05 (8 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Sepp van den Berg | 33 | 2838 | 3 | 0 | Excellent |
| Tom Krauß | 32 | 1352 | 1 | 2 | Below expectations |
| Nadiem Amiri | 15 | 1318 | 1 | 4 | Excellent |
| Marco Richter | 29 | 717 | 1 | 0 | Did not deliver |
| Josuha Guilavogui | 23 | 412 | 0 | 1 | Did not deliver |
| Daniel Batz | 20 | 360 | 0 | 0 | Did not deliver |
| Jessic Ngankam * | 11 | 195 | 0 | 0 | Investment |
| Anwar El Ghazi | 3 | 51 | 0 | 1 | Did not deliver |
Fortuna Düsseldorf (7 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Ao Tanaka | 1 | 90 | 0 | 0 | Did not deliver |
| Jordy de Wijs | 1 | 90 | 0 | 0 | Did not deliver |
| Christos Tzolis * | 1 | 87 | 0 | 1 | Investment |
| Yannik Engelhardt * | 1 | 87 | 1 | 0 | Investment |
| Vincent Vermeij | 1 | 85 | 0 | 0 | Did not deliver |
| Ísak Bergmann Jóhannesson * | 1 | 10 | 0 | 0 | Investment |
| Nicolas Gavory | 1 | 0 | 0 | 0 | Did not deliver |
RB Leipzig (11 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Loïs Openda | 34 | 2716 | 24 | 7 | Excellent |
| Xavi Simons | 32 | 2673 | 8 | 11 | Excellent |
| Castello Lukeba | 34 | 2212 | 1 | 0 | Fair |
| Benjamin Šeško | 33 | 1533 | 14 | 2 | Good |
| Christoph Baumgartner | 34 | 1161 | 5 | 1 | Fair |
| Nicolas Seiwald | 34 | 729 | 0 | 2 | Did not deliver |
| Eljif Elmas | 17 | 290 | 0 | 0 | Did not deliver |
| Fabio Carvalho * | 16 | 189 | 0 | 0 | Investment |
| El Chadaille Bitshiabu * | 20 | 59 | 0 | 0 | Investment |
| Christopher Lenz | 26 | 48 | 0 | 0 | Did not deliver |
| Leopold Zingerle | 10 | 0 | 0 | 0 | Did not deliver |
SC Freiburg (6 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Maximilian Philipp | 24 | 347 | 1 | 0 | Did not deliver |
| Chukwubuike Adamu * | 28 | 127 | 0 | 0 | Investment |
| Florent Muslija | 16 | 113 | 0 | 0 | Did not deliver |
| Attila Szalai | 15 | 101 | 0 | 0 | Did not deliver |
| Maximilian Breunig * | 8 | 18 | 0 | 0 | Investment |
| Ryan Johansson | 2 | 0 | 0 | 0 | Did not deliver |
SV Darmstadt 98 (19 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Marcel Schuhen | 33 | 2790 | 0 | 0 | Fair |
| Christoph Klarer | 31 | 2356 | 2 | 2 | Fair |
| Fabian Holland | 23 | 1847 | 0 | 2 | Fair |
| Matthias Bader | 24 | 1807 | 1 | 2 | Good |
| Emir Karić | 29 | 1781 | 0 | 0 | Below expectations |
| Matej Maglica | 27 | 1713 | 1 | 0 | Below expectations |
| Fabian Nürnberger | 21 | 1518 | 1 | 1 | Good |
| Marvin Mehlem | 21 | 1491 | 3 | 2 | Good |
| Oscar Vilhelmsson | 28 | 1384 | 4 | 1 | Fair |
| Tobias Kempe | 29 | 1365 | 3 | 2 | Fair |
| Bartol Franjić | 26 | 1231 | 0 | 1 | Did not deliver |
| Christoph Zimmermann | 24 | 1225 | 0 | 0 | Did not deliver |
| Mathias Honsak | 23 | 1031 | 1 | 1 | Fair |
| Julian Justvan | 14 | 1023 | 2 | 2 | Good |
| Sebastian Polter | 9 | 444 | 0 | 1 | Fair |
| Gerit Holtmann | 11 | 388 | 0 | 0 | Did not deliver |
| Fabian Schnellhardt | 23 | 242 | 0 | 0 | Did not deliver |
| Fraser Hornby | 8 | 220 | 0 | 0 | Did not deliver |
| Filip Stojilković | 8 | 149 | 0 | 0 | Did not deliver |
Union Berlin (13 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Robin Gosens | 30 | 2300 | 6 | 3 | Excellent |
| Lucas Tousart | 26 | 1573 | 0 | 0 | Did not deliver |
| Alex Král | 30 | 1375 | 0 | 0 | Did not deliver |
| Kevin Volland | 27 | 1352 | 3 | 4 | Fair |
| Kevin Vogt | 16 | 1324 | 0 | 0 | Fair |
| Benedict Hollerbach | 33 | 1289 | 5 | 0 | Fair |
| Brenden Aaronson | 32 | 1276 | 2 | 2 | Fair |
| David Datro Fofana | 12 | 688 | 1 | 0 | Fair |
| Yorbe Vertessen | 15 | 593 | 3 | 2 | Fair |
| Mikkel Kaufmann | 24 | 493 | 1 | 0 | Did not deliver |
| Leonardo Bonucci | 12 | 463 | 1 | 0 | Did not deliver |
| Chris Bedia | 15 | 144 | 1 | 0 | Did not deliver |
| Alexander Schwolow | 29 | 90 | 0 | 0 | Did not deliver |
VfB Stuttgart (9 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Alexander Nübel | 30 | 2700 | 0 | 0 | Good |
| Angelo Stiller | 31 | 2695 | 1 | 5 | Excellent |
| Maximilian Mittelstädt | 33 | 2117 | 2 | 4 | Good |
| Deniz Undav | 30 | 2102 | 18 | 10 | Excellent |
| Jamie Leweling | 34 | 1533 | 4 | 4 | Good |
| Anthony Rouault | 26 | 1018 | 0 | 2 | Did not deliver |
| Woo-yeong Jeong | 26 | 652 | 2 | 3 | Fair |
| Leonidas Stergiou | 32 | 606 | 1 | 0 | Did not deliver |
| Mahmoud Dahoud | 15 | 230 | 1 | 0 | Below expectations |
VfL Bochum (8 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Bernardo | 34 | 3014 | 1 | 0 | Good |
| Matúš Bero | 25 | 1751 | 1 | 1 | Fair |
| Maximilian Wittek | 33 | 1152 | 3 | 1 | Below expectations |
| Felix Passlack | 27 | 1061 | 2 | 2 | Did not deliver |
| Gonçalo Paciência | 28 | 676 | 3 | 1 | Below expectations |
| Lukas Daschner | 34 | 561 | 1 | 1 | Did not deliver |
| Noah Loosli | 27 | 347 | 0 | 0 | Did not deliver |
| Andreas Luthe | 13 | 180 | 0 | 0 | Did not deliver |
VfL Wolfsburg (9 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Joakim Maehle | 31 | 2454 | 2 | 3 | Good |
| Lovro Majer | 34 | 2116 | 5 | 5 | Good |
| Moritz Jenz | 28 | 1745 | 0 | 1 | Below expectations |
| Cedric Zesiger | 33 | 1634 | 0 | 0 | Did not deliver |
| Tiago Tomás | 28 | 1042 | 1 | 1 | Below expectations |
| Václav Černý | 30 | 934 | 4 | 0 | Below expectations |
| Rogério | 16 | 910 | 1 | 0 | Did not deliver |
| Kevin Behrens | 15 | 616 | 1 | 1 | Below expectations |
| Amin Sarr | 20 | 393 | 0 | 0 | Did not deliver |
Werder Bremen (8 signings)
| Player | Matches | Minutes | Goals | Assists | Rating |
|---|
| Senne Lynen | 33 | 1803 | 0 | 3 | Fair |
| Olivier Deman | 30 | 1406 | 2 | 1 | Fair |
| Justin Njinmah | 26 | 1031 | 6 | 2 | Fair |
| Rafael Borré | 20 | 1010 | 4 | 0 | Fair |
| Julián Malatini | 17 | 606 | 1 | 0 | Did not deliver |
| Dawid Kownacki | 32 | 415 | 0 | 0 | Did not deliver |
| Naby Keïta | 12 | 118 | 0 | 0 | Did not deliver |
| Cimo Röcker | 11 | 0 | 0 | 0 | Did not deliver |