Bayer 04 Leverkusen bounced back from the nearly disastrous season it came from, finishing in the top three and qualifying for the UEFA Champions League in the process. The season marked the breakthrough for Bulgarian striker Dimitar Berbatov, who scored 16 goals, whereas Brazilian signing França contributed with 14 strikes. As it was, it was the attack that impressed the most, especially in the 6–2 crushing of champions Werder Bremen on the penultimate day of the season.

Players

First-team squad

Squad at end of season

Left club during season

Results

Bundesliga

Bayer Leverkusen-Freiburg 4–1

1–0 Robson Ponte

1–1 Sascha Riether

2–1 Lúcio

3–1 Juan

4–1 Oliver Neuville

Eintracht Frankfurt-Bayer Leverkusen 1–2

1–0 Nico Frommer

1–1 Bernd Schneider

1–2 Geri Cipi

Bayer Leverkusen-Hannover 4–0

1–0 França

2–0 Oliver Neuville

3–0 Oliver Neuville

4–0 Daniel Bierofka

Bochum-Bayer Leverkusen 1–0

1–0 Tomasz Zdebel

Bayer Leverkusen-Hamburg 1–0

1–0 Juan

Bayern Munich-Bayer Leverkusen 3–3

0–1 Carsten Ramelow

1–1 Roy Makaay

1–2 França

2–2 Roque Santa Cruz

3–2 Michael Ballack

3–3 Yıldıray Baştürk

Wolfsburg-Bayer Leverkusen 0–1

0–1 Bernd Schneider

Bayer Leverkusen-Hansa Rostock 3–0

1–0 Diego Placente

2–0 Dimitar Berbatov

3–0 Daniel Bierofka

Hertha Berlin-Bayer Leverkusen 1–4

0–1 França

1–1 Fredi Bobić

1–2 Dimitar Berbatov

1–3 Bernd Schneider

1–4 Marko Babić

Bayer Leverkusen-Mönchengladbach 1–0

1–0 Bernd Schneider

Kaiserslautern-Bayer Leverkusen 0–0

Bayer Leverkusen-Schalke 04 3–1

1–0 Dimitar Berbatov

1–1 Mike Hanke

2–1 Marko Babić

3–1 Daniel Bierofka

Borussia Dortmund-Bayer Leverkusen 2–2

1–0 Salvatore Gambino

2–0 Salvatore Gambino

2–1 Oliver Neuville

2–2 Marko Babić

Bayer Leverkusen-1860 Munich 2–2

0–1 Danny Schwarz

0–2 Markus Schroth

1–2 Robson Ponte

2–2 Lúcio

Köln-Bayer Leverkusen 0–0

Bayer Leverkusen-Werder Bremen 1–3

0–1 Aílton

0–2 Mladen Krstajić

1–2 Jens Nowotny

1–3 Krisztián Lisztes

Stuttgart-Bayer Leverkusen 2–3

0–1 Carsten Ramelow

0–2 Dimitar Berbatov

1–2 Kevin Kurányi

1–3 Dimitar Berbatov

2–3 Zvonimir Soldo

Freiburg-Bayer Leverkusen 1–0

1–0 Roda Antar

Bayer Leverkusen-Eintracht Frankfurt 1–2

0–1 Ingo Hertzsch

1–1 Oliver Neuville

1–2 Ioannis Amanatidis

Hannover-Bayer Leverkusen 2–2

1–0 Clint Mathis

2–0 Kostas Konstantinidis

2–1 Dimitar Berbatov

2–2 França

Bayer Leverkusen-Bochum 1–3

0–1 Martin Meichelbeck

0–2 Dariusz Wosz

1–2 Dimitar Berbatov

1–3 Mamadou Diabang

Hamburg-Bayer Leverkusen 3–1

1–0 Nico-Jan Hoogma

2–0 Mehdi Mahdavikia

3–0 Bernardo Romeo

3–1 Bernd Schneider

Bayer Leverkusen-Bayern Munich 1–3

0–1 Roy Makaay

0–2 Michael Ballack

0–3 Roy Makaay

1–3 Bernd Schneider

Bayer Leverkusen-Wolfsburg 4–2

1–0 Dimitar Berbatov

2–0 Marko Babić

2–1 Marko Topić

3–1 Bernd Schneider

4–1 França

4–2 Diego Klimowicz

Hansa Rostock-Bayer Leverkusen 0–2

0–1 Dimitar Berbatov

0–2 Marko Babić

Bayer Leverkusen-Hertha Berlin 4–1

0–1 Marcelinho

1–1 Dimitar Berbatov

2–1 França

3–1 França

4–1 Dimitar Berbatov

Mönchengladbach-Bayer Leverkusen 0–0

Bayer Leverkusen-Kaiserslautern 6–0

1–0 Timo Wenzel

2–0 Dimitar Berbatov

3–0 Teddy Lučić

4–0 França

5–0 Yıldıray Baştürk

6–0 França

Schalke 04-Bayer Leverkusen 2–3

0–1 Dimitar Berbatov

1–1 Michael Delura

1–2 Bernd Schneider

1–3 Hans-Jörg Butt

2–3 Mike Hanke

Bayer Leverkusen-Borussia Dortmund 3–0

1–0 Marko Babić

2–0 França

3–0 Dimitar Berbatov

1860 Munich-Bayer Leverkusen 1–1

1–0 Paul Agostino

1–1 Bernd Schneider

Bayer Leverkusen-Köln 2–0

1–0 Clemens Fritz

2–0 França

Werder Bremen-Bayer Leverkusen 2–6

0–1 França

0–2 Daniel Bierofka

0–3 França

1–3 Mladen Krstajić

2–3 Aílton

2–4 França

2–5 Dimitar Berbatov

2–6 Oliver Neuville

2003–04 Bayer 04 Leverkusen season