| Tournament details | |
|---|---|
| Dates | 15 September 1987 – 18 May 1988 | 
| Teams | 64 | 
| Final positions | |
| Champions |  Bayer Leverkusen (1st title) | 
| Runners-up |  Español | 
| Tournament statistics | |
| Matches played | 126 | 
| Goals scored | 308 (2.44 per match) | 
| Top scorer(s) | Kenneth Brylle Larsen (Club Brugge) Kálmán Kovács (Honved) Dimitris Saravakos (Panathinaikos) 6 goals each | 
The 1987–88 UEFA Cup was won by Bayer Leverkusen on penalty kicks over Español.
It was the third season of English clubs being barred from this and indeed all European competitions as the sequel of the Heysel disaster of May 1985. The English clubs who missed out on this season of the UEFA Cup were Liverpool, Tottenham Hotspur and Arsenal.
Soviet Union gained a fourth place, Austria and Romania a third one, while France, East Germany and Czechoslovakia remained with two places. Following UEFA ranking changes and the English ban, Italy gained a fourth place from Spain, and East Germany a third one from the Netherlands.
Slot Allocation
For the 1987–88 UEFA Cup, the associations are allocated places according to their 1986 UEFA country coefficients, which takes into account their performance in European competitions from 1981–82 to 1985–86.
First round
| Team 1 | Agg. | Team 2 | 1st leg | 2nd leg | 
|---|---|---|---|---|
| Beşiktaş  | 1–3 |  Internazionale | 0–0 | 1–3 | 
| Bohemian  | 0–1 |  Aberdeen | 0–0 | 0–1 | 
| Borussia Mönchengladbach  | 1–5 |  Español | 0–1 | 1–4 | 
| Brøndby  | 2–1 |  IFK Göteborg | 2–1 | 0–0 | 
| Budapesti Honvéd  | 1–0 | .svg.png.webp) Lokeren | 1–0 | 0–0 | 
| Celtic  | 2–3 |  Borussia Dortmund | 2–1 | 0–2 | 
| Coleraine .svg.png.webp) | 1–4 |  Dundee United | 0–1 | 1–3 | 
| EPA Larnaca .svg.png.webp) | 0–4 | .svg.png.webp) Victoria București | 0–1 | 0–3 | 
| Barcelona  | 2–1 |  Belenenses | 2–0 | 0–1 | 
| Wismut Aue  | 1–1 (a) |  Valur | 0–0 | 1–1 | 
| Spartak Moscow  | 3–1 |  Dynamo Dresden | 3–0 | 0–1 | 
| Universitatea Craiova .svg.png.webp) | 4–4 (a) |  Chaves | 3–2 | 1–2 | 
| TJ Vítkovice  | 3–1 |  AIK | 1–1 | 2–0 | 
| Zenit  | 2–5 | .svg.png.webp) Club Brugge | 2–0 | 0–5 | 
| Feyenoord  | 10–2 |  Spora Luxembourg | 5–0 | 5–2 | 
| Austria Wien  | 1–5 |  Bayer Leverkusen | 0–0 | 1–5 | 
| Grasshopper .svg.png.webp) | 0–5 |  Dynamo Moscow | 0–4 | 0–1 | 
| Beveren .svg.png.webp) | 2–1 |  Bohemians | 2–0 | 0–1 | 
| Flamurtari .svg.png.webp) | 3–2 | .svg.png.webp) Partizan | 2–0 | 1–2 | 
| Linzer ASK  | 0–2 |  Utrecht | 0–0 | 0–2 | 
| Mjøndalen  | 1–5 |  Werder Bremen | 0–5 | 1–0 | 
| Panathinaikos  | 4–3 |  Auxerre | 2–0 | 2–3 | 
| Lokomotiv Sofia .svg.png.webp) | 3–4 |  Dinamo Tbilisi | 3–1 | 0–3 | 
| Pogoń Szczecin  | 2–4 |  Hellas Verona | 1–1 | 1–3 | 
| Crvena Zvezda .svg.png.webp) | 5–2 | .svg.png.webp) Trakia Plovdiv | 3–0 | 2–2 | 
| Sporting Gijón  | 1–3 |  Milan | 1–0 | 0–3 | 
| Sportul Studențesc .svg.png.webp) | 3–1 |  GKS Katowice | 1–0 | 2–1 | 
| Tatabányai Bányász  | 1–2 |  Vitória de Guimarães | 1–1 | 0–1 | 
| Toulouse  | 6–1 |  Panionios | 5–1 | 1–0 | 
| TPS  | 2–1 |  Admira/Wacker | 0–1 | 2–0 | 
| Valletta  | 0–7 |  Juventus | 0–4 | 0–3 | 
| Velež Mostar .svg.png.webp) | 5–3 | .svg.png.webp) Sion | 5–0 | 0–3 | 
First leg
| Borussia Mönchengladbach  | 0–1 |  Español | 
|---|---|---|
| Pineda  34' | 
| Brøndby IF  | 2–1 |  IFK Göteborg | 
|---|---|---|
| C. Nielsen  33' Christensen  80' | Report | L. Nilsson  77' | 
| Budapesti Honvéd  | 1–0 | .svg.png.webp) Lokeren | 
|---|---|---|
| Fodor  53' | 
| Celtic  | 2–1 |  Borussia Dortmund | 
|---|---|---|
| Walker  4' Whyte  88' | Mill  64' | 
| Coleraine .svg.png.webp) | 0–1 |  Dundee United | 
|---|---|---|
| Sturrock  39' | 
| EPA Larnaca .svg.png.webp) | 0–1 | .svg.png.webp) Victoria București | 
|---|---|---|
| Ene  51' | 
| Barcelona  | 2–0 |  Belenenses | 
|---|---|---|
| Moratalla  87' Víctor  90' | 
| Wismut Aue  | 0–0 |  Valur | 
|---|---|---|
| Spartak Moscow  | 3–0 |  Dynamo Dresden | 
|---|---|---|
| Mostovoi  32', 80' Cherenkov  57' | 
| Universitatea Craiova .svg.png.webp) | 3–2 |  Chaves | 
|---|---|---|
| Ciurea  63' (pen.) Vancea  65' Ghiță  85' | Gilberto  19' Vermelhinho  52' | 
| TJ Vítkovice  | 1–1 |  AIK | 
|---|---|---|
| Stařičný  77' | Kindvall  52' | 
| Zenit  | 2–0 | .svg.png.webp) Club Brugge | 
|---|---|---|
| Chukhlov  8' Zheludkov  70' | 
| Feyenoord  | 5–0 |  Spora Luxembourg | 
|---|---|---|
| Blinker  16' Mitchell  37', 60' Van Herpen  74' Elstrup  77' | 
| Grasshopper .svg.png.webp) | 0–4 |  Dynamo Moscow | 
|---|---|---|
| Borodyuk  23', 45' (pen.), 57' Karatayev  79' | 
| Beveren .svg.png.webp) | 2–0 |  Bohemians | 
|---|---|---|
| Fairclough  16', 53' | 
| Flamurtari .svg.png.webp) | 2–0 | .svg.png.webp) Partizan | 
|---|---|---|
| Đorđević  30' (o.g.) Iljadhi  83' | 
| Linzer ASK  | 0–0 |  Utrecht | 
|---|---|---|
| Report | 
| Mjøndalen  | 0–5 |  Werder Bremen | 
|---|---|---|
| Riedle  6', 87' Ordenewitz  52' Sauer  55' Wolter  64' | 
| Panathinaikos  | 2–0 |  Auxerre | 
|---|---|---|
| Barret  9' (o.g.) Vlachos  51' | 
| Pogoń Szczecin  | 1–1 |  Hellas Verona | 
|---|---|---|
| Leśniak  59' | Elkjær  8' | 
| Crvena Zvezda .svg.png.webp) | 3–0 | .svg.png.webp) Trakia Plovdiv | 
|---|---|---|
| Radovanović  57' Šabanadžović  60' Cvetković  61' | 
| Sporting Gijón  | 1–0 |  Milan | 
|---|---|---|
| Jaime  70' | 
| Sportul Studențesc .svg.png.webp) | 1–0 |  GKS Katowice | 
|---|---|---|
| Țârlea  46' | 
| Tatabányai Bányász  | 1–1 |  Vitória de Guimarães | 
|---|---|---|
| Plotár  41' | Caio  78' | 
| TPS  | 0–1 |  Admira/Wacker | 
|---|---|---|
| Rodax  14' | 
| Velež Mostar .svg.png.webp) | 5–0 | .svg.png.webp) Sion | 
|---|---|---|
| Tuce  17', 32', 37', 61' (pen.) Šišić  60' | 
| Lokomotiv Sofia .svg.png.webp) | 3–1 |  Dinamo Tbilisi | 
|---|---|---|
| Zlatinov  45' (pen.) Stoev  61' (pen.) Todorov  84' | Shengelia  75' | 
Second leg
| Internazionale  | 3–1 |  Beşiktaş | 
|---|---|---|
| Altobelli  38' Serena  44', 86' | Feyyaz  14' | 
Internazionale won 3–1 on aggregate.
Aberdeen won 1–0 on aggregate.
Español won 5–1 on aggregate.
| IFK Göteborg  | 0–0 |  Brøndby | 
|---|---|---|
Brøndby won 2–1 on aggregate.
Budapesti Honvéd won 1–0 on aggregate.
| Borussia Dortmund  | 2–0 |  Celtic | 
|---|---|---|
| Dickel  74', 86' | 
Borussia Dortmund won 3–2 on aggregate.
| Dundee United  | 3–1 | .svg.png.webp) Coleraine | 
|---|---|---|
| Gallacher  28' Sturrock  73' Clark  80' | Edgar  48' | 
Dundee United won 4–1 on aggregate.
| Victoria București .svg.png.webp) | 3–0 | .svg.png.webp) EPA Larnaca | 
|---|---|---|
| Nuță  32', 61' (pen.) Augustin  82' | 
Victoria București won 4–0 on aggregate.
| Belenenses  | 1–0 |  Barcelona | 
|---|---|---|
| Mapuata  4' | 
Barcelona won 2–1 on aggregate.
| Valur  | 1–1 |  Wismut Aue | 
|---|---|---|
| J. Jónsson  11' | Weiß  81' (pen.) | 
1–1 on aggregate; Wismut Aue won on away goals.
| Dynamo Dresden  | 1–0 |  Spartak Moscow | 
|---|---|---|
| Minge  8' | 
Spartak Moscow won 3–1 on aggregate.
| Chaves  | 2–1 | .svg.png.webp) Universitatea Craiova | 
|---|---|---|
| Slavkov  5' Vermelhinho  62' | Ghiță  83' | 
4–4 on aggregate; Chaves won on away goals.
| AIK  | 0–2 |  TJ Vítkovice | 
|---|---|---|
| Dostál  61' Houška  77' | 
TJ Vítkovice won 3–1 on aggregate.
| Club Brugge .svg.png.webp) | 5–0 |  Zenit | 
|---|---|---|
| Brylle  20', 39', 59', 69' Ceulemans  44' | 
Club Brugge won 5–2 on aggregate.
| Spora Luxembourg  | 2–5 |  Feyenoord | 
|---|---|---|
| Di Domenico  28' Jeitz  42' | Elstrup  24' (pen.), 80' Hoekstra  61' Wijnstekers  62' Heus  65' | 
Feyenoord won 10–2 on aggregate.
| Bayer Leverkusen  | 5–1 |  Austria Wien | 
|---|---|---|
| Rolff  24', 60' Schreier  46' Hörster  57' Cha Bum-kun  74' | Webora  31' | 
Bayer Leverkusen won 5–1 on aggregate.
| Dynamo Moscow  | 1–0 | .svg.png.webp) Grasshopper | 
|---|---|---|
| Vasilyev  33' | 
Dynamo Moscow won 5–0 on aggregate.
Beveren won 2–1 on aggregate.
| Partizan .svg.png.webp) | 2–1 | .svg.png.webp) Flamurtari | 
|---|---|---|
| Stevanović  44' (pen.) Vokrri  60' | Kushta  82' | 
Flamurtari won 3–2 on aggregate.
| Utrecht  | 2–0 |  Linzer ASK | 
|---|---|---|
| Van Loen  22' Steinmann  48' | Report | 
Utrecht won 2–0 on aggregate.
| Werder Bremen  | 0–1 |  Mjøndalen | 
|---|---|---|
| Markussen  78' | 
Werder Bremen won 5–1 on aggregate.
Panathinaikos won 4–3 on aggregate.
| Dinamo Tbilisi  | 3–0 | .svg.png.webp) Lokomotiv Sofia | 
|---|---|---|
| Sulakvelidze  41' Guruli  73' Chivadze  79' | 
Dinamo Tbilisi won 4–3 on aggregate.
| Hellas Verona  | 3–1 |  Pogoń Szczecin | 
|---|---|---|
| Elkjær  32', 39' (pen.) Di Gennaro  43' (pen.) | Hawrylewicz  82' | 
Hellas Verona won 4–2 on aggregate.
| Trakia Plovdiv .svg.png.webp) | 2–2 | .svg.png.webp) Crvena Zvezda | 
|---|---|---|
| Pashev  55' (pen.) Georgiev  66' | Đurović  11' Binić  82' | 
Crvena Zvezda won 5–2 on aggregate.
Milan won 3–1 on aggregate. The game was played in Lecce because of the ban on San Siro.
| GKS Katowice  | 1–2 | .svg.png.webp) Sportul Studențesc | 
|---|---|---|
| Koniarek  31' | Țârlea  22' Cristea  28' | 
Sportul Studențesc won 3–1 on aggregate.
| Vitória de Guimarães  | 1–0 |  Tatabányai Bányász | 
|---|---|---|
| Kioma  71' | 
Vitória de Guimarães won 2–1 on aggregate.
Toulouse won 6–1 on aggregate.
| Admira/Wacker  | 0–2 |  TPS | 
|---|---|---|
| Aaltonen  39', 75' | 
TPS won 2–1 on aggregate.
Juventus won 7–0 on aggregate.
| Sion .svg.png.webp) | 3–0 | .svg.png.webp) Velež Mostar | 
|---|---|---|
| Brigger  4' Bouderbala  7' Balet  22' | 
Velež Mostar won 5–3 on aggregate.
Second round
| Team 1 | Agg. | Team 2 | 1st leg | 2nd leg | 
|---|---|---|---|---|
| Milan  | 0–2 |  Español | 0–2 | 0–0 | 
| Aberdeen  | 2–2 (a) |  Feyenoord | 2–1 | 0–1 | 
| Borussia Dortmund  | 3–2 | .svg.png.webp) Velež Mostar | 2–0 | 1–2 | 
| Brøndby  | 3–3 (0–3p) | .svg.png.webp) Sportul Studențesc | 3–0 | 0–3 | 
| Chaves  | 2–5 |  Budapesti Honvéd | 1–2 | 1–3 | 
| Dundee United  | 2–3 |  TJ Vítkovice | 1–2 | 1–1 | 
| Utrecht  | 2–3 |  Hellas Verona | 1–1 | 1–2 | 
| Barcelona  | 2–0 |  Dynamo Moscow | 2–0 | 0–0 | 
| Wismut Aue  | 1–2 | .svg.png.webp) Flamurtari | 1–0 | 0–2 | 
| Spartak Moscow  | 6–7 |  Werder Bremen | 4–1 | 2–6 (aet) | 
| Internazionale  | 2–1 |  TPS | 0–1 | 2–0 | 
| Panathinaikos  | 3–3 (a) |  Juventus | 1–0 | 2–3 | 
| Crvena Zvezda .svg.png.webp) | 3–5 | .svg.png.webp) Club Brugge | 3–1 | 0–4 | 
| Toulouse  | 1–2 |  Bayer Leverkusen | 1–1 | 0–1 | 
| Victoria București .svg.png.webp) | 1–2 |  Dinamo Tbilisi | 1–2 | 0–0 | 
| Vitória de Guimarães  | 1–1 (5–4p) | .svg.png.webp) Beveren | 1–0 | 0–1 | 
First leg
| Borussia Dortmund  | 2–0 | .svg.png.webp) Velež Mostar | 
|---|---|---|
| Hupe  68' Dickel  86' | 
| Brøndby  | 3–0 | .svg.png.webp) Sportul Studențesc | 
|---|---|---|
| Olsen  16' Steffensen  30' (pen.) Christensen  86' | 
| Chaves  | 1–2 |  Budapesti Honvéd | 
|---|---|---|
| Zdravkov  87' | Kovács  73' Fodor  81' | 
| Dundee United  | 1–2 |  TJ Vítkovice | 
|---|---|---|
| Ferguson  24' | Chmela  12' Dostál  78' | 
| Utrecht  | 1–1 |  Hellas Verona | 
|---|---|---|
| Van Ginkel  45' | Report | Berthold  44' | 
| Barcelona  | 2–0 |  Dynamo Moscow | 
|---|---|---|
| Amarilla  10' Schuster  30' | 
| Wismut Aue  | 1–0 | .svg.png.webp) Flamurtari | 
|---|---|---|
| Krauß  22' | 
| Internazionale  | 0–1 |  TPS | 
|---|---|---|
| Aaltonen  11' | 
| Panathinaikos  | 1–0 |  Juventus | 
|---|---|---|
| Saravakos  6' | 
| Crvena Zvezda .svg.png.webp) | 3–1 | .svg.png.webp) Club Brugge | 
|---|---|---|
| Radovanović  53' Cvetković  82' Stojković  90' (pen.) | Beyens  41' | 
| Toulouse  | 1–1 |  Bayer Leverkusen | 
|---|---|---|
| Tarantini  69' (pen.) | Schreier  34' | 
| Victoria București .svg.png.webp) | 1–2 |  Dinamo Tbilisi | 
|---|---|---|
| Vaișcovici  67' (pen.) | Chedia  3' Shengelia  20' | 
| Vitória de Guimarães  | 1–0 | .svg.png.webp) Beveren | 
|---|---|---|
| Alcântara  66' (pen.) | 
| Spartak Moscow  | 4–1 |  Werder Bremen | 
|---|---|---|
| Mostovoi  11' Rodionov  36', 55' Pasulko  90' | Burgsmüller  81' | 
Second leg
| Werder Bremen  | 6–2 (a.e.t.) |  Spartak Moscow | 
|---|---|---|
| Neubarth  4', 10' Ordenewitz  25' Sauer  78' Riedle  101' Burgsmüller  109' | Cherenkov  71' Pasulko  110' | 
Werder Bremen won 7–6 on aggregate.
Español won 2–0 on aggregate.
2–2 on aggregate; Feyenoord won on away goals.
| Velež Mostar .svg.png.webp) | 2–1 |  Borussia Dortmund | 
|---|---|---|
| Kodro  67' Jurić  89' | Mill  88' | 
Borussia Dortmund won 3–2 on aggregate.
| Sportul Studențesc .svg.png.webp) | 3–0 (a.e.t.) |  Brøndby | 
|---|---|---|
| Munteanu  7' Bozeșan  78' Pană  89' | ||
| Penalties | ||
| Iorgulescu  Țicleanu  Bozeșan  | 3–0 |  Schmeichel  Olsen  K. Nielsen | 
3–3 on aggregate; Sportul Studențesc won 3–0 on penalties.
| Budapesti Honvéd  | 3–1 |  Chaves | 
|---|---|---|
| Sallai  22' Fitos  79' Kovács  88' | Jorginho  77' | 
Budapesti Honvéd won 5–2 on aggregate.
| TJ Vítkovice  | 1–1 |  Dundee United | 
|---|---|---|
| Vlk  77' | Clark  37' | 
TJ Vítkovice won 3–2 on aggregate.
| Hellas Verona  | 2–1 |  Utrecht | 
|---|---|---|
| Di Gennaro  69' Verrips  89' (o.g.) | Report | de Kock  71' | 
Verona won 3–2 on aggregate.
Barcelona won 2–0 on aggregate.
| Flamurtari .svg.png.webp) | 2–0 |  Wismut Aue | 
|---|---|---|
| Taho  3' V. Ruci  72' | 
Flamurtari won 2–1 on aggregate.
| TPS  | 0–2 |  Internazionale | 
|---|---|---|
| Scifo  50' Altobelli  74' | 
Internazionale won 2–1 on aggregate.
| Juventus  | 3–2 |  Panathinaikos | 
|---|---|---|
| Cabrini  49', 72' (pen.) Alessio  59' | Saravakos  46' C. Dimopoulos  53' | 
3–3 on aggregate; Panathinaikos won on away goals.
| Club Brugge .svg.png.webp) | 4–0 | .svg.png.webp) Red Star Belgrade | 
|---|---|---|
| Brylle  13' Ceulemans  47' Radovanović  49' (o.g.) Beyens  88' | 
Club Brugge won 5–3 on aggregate.
| Bayer Leverkusen  | 1–0 |  Toulouse | 
|---|---|---|
| Schreier  80' | 
Bayer Leverkusen won 2–1 on aggregate.
Dinamo Tbilisi won 2–1 on aggregate.
| Beveren .svg.png.webp) | 1–0 (a.e.t.) |  Vitória de Guimarães | 
|---|---|---|
| Lemoine  66' | ||
| Penalties | ||
| François  Kusto  Lemoine  Schmedding  Stalmans  | 4–5 |  Carvalho  Adão  Miguel  Bené  Alcântara | 
1–1 on aggregate; Vitória de Guimarães won 5–4 on penalties.
Third round
| Team 1 | Agg. | Team 2 | 1st leg | 2nd leg | 
|---|---|---|---|---|
| Borussia Dortmund  | 3–5 | .svg.png.webp) Club Brugge | 3–0 | 0–5 (aet) | 
| Budapesti Honvéd  | 6–7 |  Panathinaikos | 5–2 | 1–5 | 
| Barcelona  | 4–2 | .svg.png.webp) Flamurtari | 4–1 | 0–1 | 
| Feyenoord  | 2–3 |  Bayer Leverkusen | 2–2 | 0–1 | 
| Hellas Verona  | 4–1 | .svg.png.webp) Sportul Studențesc | 3–1 | 1–0 | 
| Internazionale  | 1–2 |  Español | 1–1 | 0–1 | 
| Vitória de Guimarães  | 2–2 (4–5p) |  TJ Vítkovice | 2–0 | 0–2 | 
| Werder Bremen  | 3–2 |  Dinamo Tbilisi | 2–1 | 1–1 | 
First leg
| Borussia Dortmund  | 3–0 | .svg.png.webp) Club Brugge | 
|---|---|---|
| Mill  13', 63' Anderbrügge  77' | 
| Budapesti Honvéd  | 5–2 |  Panathinaikos | 
|---|---|---|
| Kovács  2', 32', 58', 61' Fodor  24' (pen.) | Saravakos  65', 88' | 
| Feyenoord  | 2–2 |  Bayer Leverkusen | 
|---|---|---|
| Been  36' Hoekstra  45' | Buncol  19' Falkenmayer  32' | 
| Hellas Verona  | 3–1 | .svg.png.webp) Sportul Studențesc | 
|---|---|---|
| Fontolan  25' Pacione  29' Elkjær  81' (pen.) | Coraș  63' | 
| Internazionale  | 1–1 |  Español | 
|---|---|---|
| Serena  31' | Lauridsen  82' | 
| Vitória de Guimarães  | 2–0 |  TJ Vítkovice | 
|---|---|---|
| Kioma  62' Caio  74' | 
| Werder Bremen  | 2–1 |  Dinamo Tbilisi | 
|---|---|---|
| Neubarth  3' Riedle  18' | Shengelia  20' | 
Second leg
| Club Brugge .svg.png.webp) | 5–0 (a.e.t.) |  Borussia Dortmund | 
|---|---|---|
| Ceulemans  10' L. Van Der Elst  48', 83' (pen.), 108' (pen.) F. Van Der Elst  100' | 
Club Brugge won 5–3 on aggregate.
| Panathinaikos  | 5–1 |  Budapesti Honvéd | 
|---|---|---|
| Vlachos  23', 37' Antoniou  55' Mavridis  65' Batsinilas  82' | Fitos  60' | 
Panathinaikos won 7–6 on aggregate.
| Flamurtari .svg.png.webp) | 1–0 |  Barcelona | 
|---|---|---|
| Kushta  15' | 
Barcelona won 4–2 on aggregate.
| Bayer Leverkusen  | 1–0 |  Feyenoord | 
|---|---|---|
| Götz  30' | 
Bayer Leverkusen won 3–2 on aggregate.
| Sportul Studențesc .svg.png.webp) | 0–1 |  Hellas Verona | 
|---|---|---|
| Elkjær  69' | 
Hellas Verona won 4–1 on aggregate.
| Español  | 1–0 |  Internazionale | 
|---|---|---|
| Orejuela  23' | 
Español won 2–1 on aggregate.
| TJ Vítkovice  | 2–0 (a.e.t.) |  Vitória de Guimarães | 
|---|---|---|
| Kovačík  33' Grussmann  88' | ||
| Penalties | ||
| Šourek  Bartl  Kadlec  Grussmann  Kovačík  | 5–4 |  Adão  Weber  Miguel  N'Dinga  Bené | 
2–2 on aggregate; TJ Vítkovice won 5–4 on penalties.
| Dinamo Tbilisi  | 1–1 |  Werder Bremen | 
|---|---|---|
| Sulakvelidze  31' | Schaaf  61' | 
Werder Bremen won 3–2 on aggregate.
Quarter-finals
| Team 1 | Agg. | Team 2 | 1st leg | 2nd leg | 
|---|---|---|---|---|
| Bayer Leverkusen  | 1–0 |  Barcelona | 0–0 | 1–0 | 
| Hellas Verona  | 1–2 |  Werder Bremen | 0–1 | 1–1 | 
| Panathinaikos  | 2–3 | .svg.png.webp) Club Brugge | 2–2 | 0–1 | 
| Español  | 2–0 |  TJ Vítkovice | 2–0 | 0–0 | 
First leg
| Hellas Verona  | 0–1 |  Werder Bremen | 
|---|---|---|
| Neubarth  49' | 
| Panathinaikos  | 2–2 | .svg.png.webp) Club Brugge | 
|---|---|---|
| Saravakos  54' Antoniou  60' | Ceulemans  55' Degryse  86' | 
| Español  | 2–0 |  TJ Vítkovice | 
|---|---|---|
| Lauridsen  31' Pineda  69' | 
Second leg
| Barcelona  | 0–1 |  Bayer Leverkusen | 
|---|---|---|
| Tita  59' | 
Bayer Leverkusen won 1–0 on aggregate.
| Werder Bremen  | 1–1 |  Hellas Verona | 
|---|---|---|
| Sauer  32' | Volpecina  54' | 
Werder Bremen won 2–1 on aggregate.
| Club Brugge .svg.png.webp) | 1–0 |  Panathinaikos | 
|---|---|---|
| Brylle  44' | 
Club Brugge won 3–2 on aggregate.
| TJ Vítkovice  | 0–0 |  Español | 
|---|---|---|
Español won 2–0 on aggregate.
Semi-finals
| Team 1 | Agg. | Team 2 | 1st leg | 2nd leg | 
|---|---|---|---|---|
| Bayer Leverkusen  | 1–0 |  Werder Bremen | 1–0 | 0–0 | 
| Club Brugge .svg.png.webp) | 2–3 |  Español | 2–0 | 0–3 (aet) | 
First leg
| Club Brugge .svg.png.webp) | 2–0 |  Español | 
|---|---|---|
| Ceulemans  42' Gallart  74' (o.g.) | 
Second leg
Bayer Leverkusen won 1–0 on aggregate.
Español won 3–2 on aggregate.
Final
First leg
| Español  | 3–0 |  Bayer Leverkusen | 
|---|---|---|
| Losada  45', 56' Soler  49' | 
Second leg
| Bayer Leverkusen  | 3–0 |  Español | 
|---|---|---|
| Tita  57' Götz  63' Cha Bum-kun  81' | ||
| Penalties | ||
| Falkenmayer  Rolff  Waas  Täuber  | 3–2 |  Alonso  Job  Urquiaga  Zúñiga  Losada | 
3–3 on aggregate; Bayer Leverkusen won 3–2 on penalties.
Notes
- ↑ "LASK vs. Utrecht". UEFA. Retrieved 9 December 2023.
- ↑ "Utrecht vs. LASK". UEFA. Retrieved 9 December 2023.
- ↑ The game was played in Lecce because of the ban on San Siro.
- ↑ "Utrecht vs. Hellas Verona". UEFA. Retrieved 9 December 2023.
- ↑ "Hellas Verona vs. Utrecht". UEFA. Retrieved 9 December 2023.
External links
- 1987–88 All matches UEFA Cup – season at UEFA website
- Official Site
- Results at RSSSF.com
- All scorers 1987–88 UEFA Cup according to protocols UEFA
- 1987/88 UEFA Cup - results and line-ups (archive)

