# 2019–20 CAF Champions League

The 2019–20 CAF Champions League (officially the 2019–20 Total CAF Champions League for sponsorship reasons) was the 56th edition of Africa's premier club football tournament organized by the Confederation of African Football (CAF), and the 24th edition under the current CAF Champions League title.
This season was to be the first to follow an August–to-May schedule, as per the decision of the CAF Executive Committee on 20 July 2017. However, the COVID-19 pandemic caused the semi-finals and final of the competition to be postponed until October and November 2020. Moreover, for the first time, the final was played as a single match at a venue pre-selected by CAF, and was originally to be played at the Japoma Stadium in Douala, Cameroon. However, during the suspension of the tournament due to the COVID-19 pandemic, Cameroon decided to withdraw from hosting, and instead, the final was played in Egypt, at the Cairo International Stadium in Cairo.
Ahly won a record 9th title, defeating fellow Egyptian rivals Zamalek 2–1 in the final.
As winners of the 2019–20 CAF Champions League, Ahly qualified for the 2020 FIFA Club World Cup in Qatar, and earned the right to play against the winners of the 2019–20 CAF Confederation Cup in the 2020–21 CAF Super Cup.
This was the first time in the history of the CAF Champions League that the final was contested between two clubs from the same country.

## Association team allocation

All 56 CAF member associations may enter the CAF Champions League, with the 12 highest ranked associations according to their CAF 5-year ranking eligible to enter two teams in the competition. As a result, theoretically a maximum of 68 teams could enter the tournament – although this level has never been reached.
For the 2019–20 CAF Champions League, the CAF uses the 2015–2019 CAF 5-year ranking, which calculates points for each entrant association based on their clubs’ performance over those 5 years in the CAF Champions League and CAF Confederation Cup. The criteria for points are the following:
| | CAF Champions League | CAF Confederation Cup |
| Winners | 6 points | 5 points |
| Runners-up | 5 points | 4 points |
| Losing semi-finalists | 4 points | 3 points |
| Losing quarter-finalists (from 2017) | 3 points | 2 points |
| 3rd place in groups | 2 points | 1 point |
| 4th place in groups | 1 point | 0.5 point |
The points are multiplied by a coefficient according to the year as follows:
* 2018–19 – 5
* 2018 – 4
* 2017 – 3
* 2016 – 2
* 2015 – 1
This was announced by the CAF on 4 June 2019, as using the previous scheme, it would be based on results from 2014 to 2018. The only change for the top 12 associations is that Tanzania is included while Ivory Coast is excluded.

## Teams

The following 61 teams from 49 associations entered the competition.
* Three teams (in bold) received a bye to the first round.
* The other 58 teams entered the preliminary round.
Associations are shown according to their 2015–2019 CAF 5-year ranking – those with a ranking score have their rank and score indicated.
Associations eligible to enter two teams (Ranked 1–12) :
| Association | Team | Qualifying method |
| Tunisia (1st – 154 pts) | Espérance de Tunis | Title holders (2018–19 CAF Champions League winners) 2018–19 Tunisian Ligue Professionnelle 1 champions |
| Tunisia (1st – 154 pts) | Étoile du Sahel | 2018–19 Tunisian Ligue Professionnelle 1 runners-up |
| Morocco (2nd – 153 pts) | Wydad AC | 2018–19 Botola champions |
| Morocco (2nd – 153 pts) | Raja Casablanca | 2018–19 Botola runners-up |
| Egypt (3rd – 120.5 pts) | Al-Ahly | 2018–19 Egyptian Premier League champions |
| Egypt (3rd – 120.5 pts) | Zamalek | 2018–19 Egyptian Premier League runners-up |
| Algeria (4th – 92 pts) | USM Alger | 2018–19 Algerian Ligue Professionnelle 1 champions |
| Algeria (4th – 92 pts) | JS Kabylie | 2018–19 Algerian Ligue Professionnelle 1 runners-up |
| DR Congo (5th – 87 pts) | TP Mazembe | 2018–19 Linafoot champions |
| DR Congo (5th – 87 pts) | AS Vita Club | 2018–19 Linafoot runners-up |
| South Africa (6th – 76.5 pts) | Mamelodi Sundowns | 2018–19 South African Premier Division champions |
| South Africa (6th – 76.5 pts) | Orlando Pirates | 2018–19 South African Premier Division runners-up |
| Zambia (7th – 40.5 pts) | ZESCO United | 2019 Zambian Super League champions |
| Zambia (7th – 40.5 pts) | Green Eagles | 2019 Zambian Super League runners-up |
| Sudan (8th – 35 pts) | Al-Merrikh | 2018–19 Sudan Premier League champions |
| Sudan (8th – 35 pts) | Al-Hilal | 2018–19 Sudan Premier League runners-up |
| Nigeria (9th – 32.5 pts) | Enyimba | 2019 Nigeria Professional Football League champions |
| Nigeria (9th – 32.5 pts) | Kano Pillars | 2019 Nigeria Professional Football League runners-up |
| Guinea (10th – 30 pts) | Horoya | 2018–19 Guinée Championnat National champions |
| Guinea (10th – 30 pts) | Hafia | 2018–19 Guinée Championnat National runners-up |
| Angola (11th – 21.5 pts) | 1º de Agosto | 2018–19 Girabola champions |
| Angola (11th – 21.5 pts) | Petro de Luanda | 2018–19 Girabola runners-up |
| Tanzania (12th – 18 pts) | Simba | 2018–19 Tanzanian Premier League champions |
| Tanzania (12th – 18 pts) | Young Africans | 2018–19 Tanzanian Premier League runners-up |
Associations eligible to enter one team :
| Association | Team | Qualifying method |
| Ivory Coast (13th – 15 pts) | SO de l'Armée | 2018–19 Côte d'Ivoire Ligue 1 champions |
| Kenya (14th – 14 pts) | Gor Mahia | 2018–19 Kenyan Premier League champions |
| Mozambique (15th – 13 pts) | UD Songo | 2018 Moçambola champions |
| Congo (16th – 11.5 pts) | AS Otôho | 2018–19 Congo Ligue 1 champions |
| Uganda (17th – 11 pts) | KCCA | 2018–19 Uganda Premier League champions |
| Libya (18th – 10 pts) | Al-Nasr | 2017–18 Libyan Premier League champions |
| Ghana (19th – 9 pts) | Asante Kotoko | 2019 GFA Normalization Committee Special Competition Tier 1 winners |
| Rwanda (T-20th – 8 pts) | Rayon Sports | 2018–19 Rwanda Premier League champions |
| Zimbabwe (T-20th – 8 pts) | FC Platinum | 2018 Zimbabwe Premier Soccer League champions |
| Eswatini (22nd – 7 pts) | Green Mamba | 2018–19 Eswatini Premier League champions |
| Ethiopia (23rd – 6 pts) | Mekelle 70 Enderta | 2018–19 Ethiopian Premier League champions |
| Botswana (T-24th – 4 pts) | Township Rollers | 2018–19 Botswana Premier League champions |
| Togo (T-24th – 4 pts) | ASC Kara | 2018–19 Togolese Championnat National champions |
| Cameroon (T-26th – 3 pts) | UMS de Loum | 2019 Elite One champions |
| Mali (T-26th – 3 pts) | Stade Malien | 2018 Malian Cup winners |
| Burkina Faso (28th – 2.5 pts) | Rahimo | 2018–19 Burkinabé Premier League champions |
| Gabon (29th – 1.5 pts) | Cercle Mbéri Sportif | 2019 Gabon Championnat National D1 champions |
| Benin | Buffles du Borgou | 2018–19 Benin Premier League champions |
| Burundi | Aigle Noir | 2018–19 Burundi Premier League champions |
| Central African Republic | AS Tempête Mocaf | 2019 Central African Republic League champions |
| Chad | Elect-Sport | 2019 Chad Premier League champions |
| Comoros | Fomboni | 2019 Comoros Premier League champions |
| Equatorial Guinea | Cano Sport | 2018–19 Equatoguinean Primera División champions |
| Gambia | Brikama United | 2018–19 GFA League First Division champions |
| Lesotho | Matlama | 2018–19 Lesotho Premier League champions |
| Liberia | LPRC Oilers | 2019 Liberian First Division League champions |
| Madagascar | Fosa Juniors | 2019 THB Champions League champions |
| Malawi | Big Bullets | 2018 Malawi Premier Division champions |
| Mauritania | FC Nouadhibou | 2018–19 Ligue 1 Mauritania champions |
| Mauritius | Pamplemousses | 2018–19 Mauritian Premier League champions |
| Namibia | African Stars | 2018–19 Namibia Premier League runners-up |
| Niger | AS SONIDEP | 2018–19 Niger Premier League champions |
| Senegal | Génération Foot | 2018–19 Senegal Premier League champions |
| Seychelles | Côte d'Or | 2018 Seychelles First Division champions |
| Somalia | Dekedaha | 2019 Somali First Division champions |
| South Sudan | Atlabara | 2019 South Sudan Football Championship champions |
| Zanzibar | KMKM | 2018–19 Zanzibar Premier League champions |

### Notes

* ^ Libya (LBY): For the second consecutive season, Libya were represented by Al-Nasr, the 2017–18 Libyan Premier League champions, as the 2018–19 Libyan Premier League was suspended and the Libyan Cup was not played in 2018–19.
* ^ Mali (MLI): For the second consecutive season, Mali were represented by Stade Malien, the 2018 Malian Cup winners, as the Malian Première Division and Malian Cup were not played in 2018–19.

### Associations which did not enter a team

* Cape Verde
* Djibouti
* Eritrea
* Guinea-Bissau
* Réunion
* São Tomé and Príncipe
* Sierra Leone

## Schedule

The schedule of the competition is as follows.
On 24 November 2019, CAF made a change to all fixtures dates starting from the group stage matchday 4 to the final, due to rescheduling of the 2020 African Nations Championship from January/February to April. The quarter-finals draw date was also changed.
Following the quarter-finals, due to the COVID-19 pandemic in Africa, the semi-finals, originally scheduled for 1–2 May (first legs) and 8–9 May (second legs), were postponed indefinitely on 11 April 2020, and the final, originally scheduled for 29 May, was also postponed on 18 April 2020. On 30 June 2020, the CAF Executive Committee proposed that the competition would resume with a Final Four format played as single matches in a host country to be decided. However, these plans were later halted after the Cameroonian Football Federation withdrew from hosting the Final Four, and the CAF decided against hosting it in either Egypt or Morocco in the principle of fairness. On 3 August 2020, the CAF announced that the competition would resume in its original format with the semi-finals played on 25–26 September (first legs) and 2–3 October (second legs), and the final played on 16 or 17 October. On 10 September 2020, the CAF announced that at the request of the Royal Moroccan Football Federation, the semi-finals were rescheduled to 17–18 October (first legs) and 23–24 October (second legs), and the final to 6 November. On 22 October 2020, the CAF announced that the semi-final second leg between Zamalek and Raja Casablanca, originally scheduled to be played on 24 October, was postponed to 1 November, due to Raja Casablanca being required by Moroccan authorities to self-isolate until 27 October after eight players testing positive for the COVID-19 virus, with the total number of cases increasing to fourteen the following day. On 30 October 2020, the CAF announced that this match was further postponed to 4 November, the final postponed to 27 November.
| Phase | Round | Draw date | First leg | Second leg |
| Qualifying | Preliminary round | 21 July 2019 | 9–11 August 2019 | 23–25 August 2019 |
| Qualifying | First round | 21 July 2019 | 13–15 September 2019 | 27–29 September 2019 |
| Group stage | Matchday 1 | 9 October 2019 | 29–30 November 2019 | 29–30 November 2019 |
| Group stage | Matchday 2 | 9 October 2019 | 6–7 December 2019 | 6–7 December 2019 |
| Group stage | Matchday 3 | 9 October 2019 | 27–28 December 2019 | 27–28 December 2019 |
| Group stage | Matchday 4 | 9 October 2019 | 10–11 January 2020 | 10–11 January 2020 |
| Group stage | Matchday 5 | 9 October 2019 | 24–25 January 2020 | 24–25 January 2020 |
| Group stage | Matchday 6 | 9 October 2019 | 31 January – 1 February 2020 | 31 January – 1 February 2020 |
| Knockout stage | Quarter-finals | 5 February 2020 | 28–29 February 2020 | 6–7 March 2020 |
| Knockout stage | Semi-finals | 5 February 2020 | 17–18 October 2020 | 23 October & 4 November 2020 |
| Knockout stage | Final | 5 February 2020 | 27 November 2020 | 27 November 2020 |

## Qualifying rounds

The draw for the qualifying rounds was held on 21 July 2019 at the CAF headquarters in Cairo, Egypt.
In the qualifying rounds, each tie was played on a home-and-away two-legged basis. If the aggregate score was tied after the second leg, the away goals rule was applied, and if still tied, extra time was not played, and the penalty shoot-out was used to determine the winner (Regulations III. 13 & 14).

### Preliminary round

| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| Brikama United | 3–7 | Raja Casablanca | 3–3 | 0–4 |
| AS Tempête Mocaf | 2–3 | Al-Nasr | 1–0 | 1–3 |
| JS Kabylie | 3–3 (a) | Al-Merrikh | 1–0 | 2–3 |
| Stade Malien | 1–2 | Horoya | 1–1 | 0–1 |
| Buffles du Borgou | 1–2 | ASC Kara | 1–1 | 0–1 |
| UMS de Loum | 0–1 | AS Vita Club | 0–0 | 0–1 |
| Rayon Sports | 1–1 (a) | Al-Hilal | 1–1 | 0–0 |
| Rahimo | 1–5 | Enyimba | 1–0 | 0–5 |
| AS SONIDEP | 2–5 | USM Alger | 1–2 | 1–3 |
| Aigle Noir | 1–5 | Gor Mahia | 0–0 | 1–5 |
| Atlabara | 0–13 | Al-Ahly | 0–4 | 0–9 |
| Cano Sport | 3–2 | Mekelle 70 Enderta | 2–1 | 1–1 |
| Dekedaha | 0–13 | Zamalek | 0–7 | 0–6 |
| LPRC Oilers | 1–3 | Génération Foot | 1–0 | 0–3 |
| Hafia | 3–8 | Étoile du Sahel | 2–1 | 1–7 |
| Kano Pillars | 3–4 | Asante Kotoko | 3–2 | 0–2 |
| African Stars | 3–4 | KCCA | 3–2 | 0–2 |
| Matlama | 0–4 | Petro de Luanda | 0–2 | 0–2 |
| Fomboni | 3–3 (a) | Côte d'Or | 2–2 | 1–1 |
| AS Otôho | 2–5 | Mamelodi Sundowns | 2–1 | 0–4 |
| SO de l'Armée | 0–1 | FC Nouadhibou | 0–0 | 0–1 |
| Cercle Mbéri Sportif | 0–2 | Elect-Sport | 0–0 | 0–2 |
| Green Mamba | 0–3 | ZESCO United | 0–2 | 0–1 |
| Young Africans | 2–1 | Township Rollers | 1–1 | 1–0 |
| Big Bullets | 2–3 | FC Platinum | 0–0 | 2–3 |
| UD Songo | 1–1 (a) | Simba | 0–0 | 1–1 |
| KMKM | 0–4 | 1º de Agosto | 0–2 | 0–2 |
| Green Eagles | 2–1 | Orlando Pirates | 1–0 | 1–1 |
| Fosa Juniors | 2–1 | Pamplemousses | 1–0 | 1–1 |

### First round

The 16 winners of the first round advanced to the group stage, while the 16 losers of the first round entered the Confederation Cup play-off round.
| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| Al-Nasr | 2–4 | Raja Casablanca | 1–3 | 1–1 |
| JS Kabylie | 2–2 (5–3 p) | Horoya | 2–0 | 0–2 |
| ASC Kara | 0–1 | AS Vita Club | 0–0 | 0–1 |
| Enyimba | 0–1 | Al-Hilal | 0–0 | 0–1 |
| USM Alger | 6–1 | Gor Mahia | 4–1 | 2–0 |
| Cano Sport | 0–6 | Al-Ahly | 0–2 | 0–4 |
| Génération Foot | 2–2 (a) | Zamalek | 2–1 | 0–1 |
| Asante Kotoko | 2–3 | Étoile du Sahel | 2–0 | 0–3 |
| Petro de Luanda | 1–1 (a) | KCCA | 0–0 | 1–1 |
| Côte d'Or | 1–16 | Mamelodi Sundowns | 0–5 | 1–11 |
| FC Nouadhibou | 1–6 | Wydad AC | 0–2 | 1–4 |
| Elect-Sport | 2–3 | Espérance de Tunis | 1–1 | 1–2 |
| Young Africans | 2–3 | ZESCO United | 1–1 | 1–2 |
| FC Platinum | 5–2 | UD Songo | 1–0 | 4–2 |
| Green Eagles | 2–2 (a) | 1º de Agosto | 1–2 | 1–0 |
| Fosa Juniors | 1–3 | TP Mazembe | 0–0 | 1–3 |

## Group stage

The draw for the group stage was held on 9 October 2019, 20:00 CAT (UTC+2), at the Hilton Pyramids Golf in Cairo, Egypt. The 16 teams, all winners of the first round of qualifying, were drawn into four groups of four.
The teams were seeded by their performances in the CAF competitions for the previous five seasons (CAF 5-year ranking points shown in parentheses). Each group contained one team from each of Pot 1, Pot 2, Pot 3, and Pot 4, and each team was drawn into one of the positions in their group.
| Pot | Pot 1 | Pot 2 | Pot 3 | Pot 4 |
| Teams | Espérance de Tunis (63.5 pts) TP Mazembe (63 pts) Wydad AC (63 pts) Al-Ahly (57 pts) | Étoile du Sahel (50 pts) Mamelodi Sundowns (49 pts) Zamalek (44 pts) Raja Casablanca (25 pts) | USM Alger (25 pts) ZESCO United (24.5 pts) AS Vita Club (24 pts) Al-Hilal (19 pts) | 1º de Agosto (16 pts) FC Platinum (5 pts) Petro de Luanda (2.5 pts) JS Kabylie |
In each group, teams play against each other home-and-away in a round-robin format. The group winners and runners-up advance to the quarter-finals of the knockout stage.
* Tiebreakers
* Teams are ranked according to points (3 points for a win, 1 point for a draw, 0 points for a loss). If tied on points, tiebreakers are applied in the following order (Regulations III. 20 & 21):
* Points in head-to-head matches among tied teams;
* Goal difference in head-to-head matches among tied teams;
* Goals scored in head-to-head matches among tied teams;
* Away goals scored in head-to-head matches among tied teams;
* If more than two teams are tied, and after applying all head-to-head criteria above, a subset of teams are still tied, all head-to-head criteria above are reapplied exclusively to this subset of teams;
* Goal difference in all group matches;
* Goals scored in all group matches;
* Away goals scored in all group matches;
* Drawing of lots.

### Group A

| Pos | Teamvte | Pld | W | D | L | GF | GA | GD | Pts | Qualification | TPM | ZAM | AGO | ZES |
| 1 | TP Mazembe | 6 | 4 | 2 | 0 | 11 | 4 | +7 | 14 | Advance to knockout stage | — | 3–0 | 2–1 | 3–1 |
| 2 | Zamalek | 6 | 2 | 3 | 1 | 5 | 4 | +1 | 9 | Advance to knockout stage | 0–0 | — | 2–0 | 2–0 |
| 3 | 1º de Agosto | 6 | 0 | 4 | 2 | 4 | 7 | −3 | 4 | | 1–1 | 0–0 | — | 1–1 |
| 4 | ZESCO United | 6 | 0 | 3 | 3 | 5 | 10 | −5 | 3 | | 1–2 | 1–1 | 1–1 | — |

### Group B

| Pos | Teamvte | Pld | W | D | L | GF | GA | GD | Pts | Qualification | ESS | AHL | HIL | PLA |
| 1 | Étoile du Sahel | 6 | 4 | 0 | 2 | 8 | 3 | +5 | 12 | Advance to knockout stage | — | 1–0 | 0–1 | 2–0 |
| 2 | Al-Ahly | 6 | 3 | 2 | 1 | 7 | 4 | +3 | 11 | Advance to knockout stage | 1–0 | — | 2–1 | 2–0 |
| 3 | Al-Hilal | 6 | 3 | 1 | 2 | 7 | 6 | +1 | 10 | | 1–2 | 1–1 | — | 2–1 |
| 4 | FC Platinum | 6 | 0 | 1 | 5 | 2 | 11 | −9 | 1 | | 0–3 | 1–1 | 0–1 | — |

### Group C

| Pos | Teamvte | Pld | W | D | L | GF | GA | GD | Pts | Qualification | MSD | WAC | PET | USM |
| 1 | Mamelodi Sundowns | 6 | 4 | 2 | 0 | 9 | 3 | +6 | 14 | Advance to knockout stage | — | 1–0 | 3–0 | 2–1 |
| 2 | Wydad AC | 6 | 2 | 3 | 1 | 10 | 6 | +4 | 9 | Advance to knockout stage | 0–0 | — | 4–1 | 3–1 |
| 3 | Petro de Luanda | 6 | 0 | 4 | 2 | 8 | 14 | −6 | 4 | | 2–2 | 2–2 | — | 1–1 |
| 4 | USM Alger | 6 | 0 | 3 | 3 | 6 | 10 | −4 | 3 | | 0–1 | 1–1 | 2–2 | — |

### Group D

| Pos | Teamvte | Pld | W | D | L | GF | GA | GD | Pts | Qualification | EST | RCA | JSK | VIT |
| 1 | Espérance de Tunis | 6 | 3 | 2 | 1 | 7 | 3 | +4 | 11 | Advance to knockout stage | — | 2–2 | 1–0 | 0–0 |
| 2 | Raja Casablanca | 6 | 3 | 2 | 1 | 6 | 4 | +2 | 11 | Advance to knockout stage | 0–2 | — | 2–0 | 1–0 |
| 3 | JS Kabylie | 6 | 2 | 1 | 3 | 3 | 7 | −4 | 7 | | 1–0 | 0–0 | — | 1–0 |
| 4 | AS Vita Club | 6 | 1 | 1 | 4 | 4 | 6 | −2 | 4 | | 0–2 | 0–1 | 4–1 | — |
* 1 2 Head-to-head points: Espérance de Tunis 4, Raja Casablanca 1.

## Knockout stage

In the knockout stage, the quarter-finals and semi-finals were played over two legs, with each team playing one leg at home. The team that scored more goals on aggregate over the two legs advanced to the next round. If the aggregate score was level, the away goals rule is applied, i.e. the team that scored more goals away from home over the two legs advanced. If away goals were also equal, then extra time was not played and the winners were decided by a penalty shoot-out.
In the final, which was played as a single match, if the score was level at the end of normal time, extra time was also not to be played and the winners would be decided by a penalty shoot-out.
The mechanism of the draws for each round was as follows:
* In the draw for the quarter-finals, the four group winners were seeded, and the four group runners-up were unseeded. The seeded teams were drawn against the unseeded teams, with the seeded teams hosting the second leg. Teams from the same group cannot be drawn against each other, while teams from the same association could be drawn against each other.
* In the draws for semi-finals, there were no seedings, and teams from the same group or the same association could be drawn against each other. As the draws for the quarter-finals and semi-finals were held together before the quarter-finals were played, the identity of the quarter-final winners was not known at the time of the semi-final draw.

### Bracket

The bracket was decided after the draw for the knockout stage (quarter-finals and semi-finals), which was held on 5 February 2020, 20:00 CAT (UTC+2), at the Hilton Pyramids Golf in Cairo, Egypt.
| Quarter-finals | Quarter-finals | Quarter-finals | Quarter-finals | Semi-finals | Semi-finals | Semi-finals | Semi-finals | Final | Final | Final | Final |
| Raja Casablanca | 2 | 0 | 2 | | | | |
| TP Mazembe | 0 | 1 | 1 | | | | |
| TP Mazembe | 0 | 1 | 1 | Raja Casablanca | 0 | 1 | 1 |
| | | | | Zamalek | 1 | 3 | 4 |
| Zamalek | 3 | 0 | 3 | Zamalek | 1 | 3 | 4 |
| Espérance de Tunis | 1 | 1 | 2 | | | | | | | | |
| Espérance de Tunis | 1 | 1 | 2 | | | | | Zamalek | Zamalek | Zamalek | 1 |
| | | | | | | | | Al-Ahly | Al-Ahly | Al-Ahly | 2 |
| Wydad AC | 2 | 0 | 2 | | | | | Al-Ahly | Al-Ahly | Al-Ahly | 2 |
| Étoile du Sahel | 0 | 1 | 1 | | | | | | | | |
| Étoile du Sahel | 0 | 1 | 1 | Wydad AC | 0 | 1 | 1 | | | | |
| | | | | Al-Ahly | 2 | 3 | 5 |
| Al-Ahly | 2 | 1 | 3 | Al-Ahly | 2 | 3 | 5 |
| Mamelodi Sundowns | 0 | 1 | 1 | | | | |

### Quarter-finals

| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| Al-Ahly | 3–1 | Mamelodi Sundowns | 2–0 | 1–1 |
| Raja Casablanca | 2–1 | TP Mazembe | 2–0 | 0–1 |
| Zamalek | 3–2 | Espérance de Tunis | 3–1 | 0–1 |
| Wydad AC | 2–1 | Étoile du Sahel | 2–0 | 0–1 |

### Semi-finals

Due to the COVID-19 pandemic in Africa, all semi-final matches, originally scheduled for 1–2 May (first legs) and 8–9 May 2020 (second legs), were postponed. The matches were later rescheduled for 17–18 October (first legs) and 23 October and 4 November 2020 (second legs).
| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| Raja Casablanca | 1–4 | Zamalek | 0–1 | 1–3 |
| Wydad AC | 1–5 | Al-Ahly | 0–2 | 1–3 |

### Final

Due to the COVID-19 pandemic in Africa, the final, originally scheduled for 29 May 2020, 20:00 WAT, at the Japoma Stadium, Douala, Cameroon, was postponed until further notice. In July, the Cameroonian Football Federation announced that they had withdrawn from hosting the final. The CAF decided that the final would be played in Egypt if both semi-finalists from Egypt, Al-Ahly and Zamalek, reached the final, or in Morocco if both semi-finalists from Morocco, Raja Casablanca and Wydad Casablanca, reached the final. If one team from Egypt and one team from Morocco reached the final, it was initially decided that the final would be played in a neutral country, but it was later decided that the final would then be played in either Egypt or Morocco, to be decided by a draw, which was held on 16 October 2020 in Casablanca, Morocco prior to the semi-final first legs, and the country drawn was Egypt.
Since both finalists were from Egypt, the match was played in Egypt, at the Cairo International Stadium, Cairo on 27 November 2020.

## Top goalscorers

| Rank | Player | Team | MD1 | MD2 | MD3 | MD4 | MD5 | MD6 | QF1 | QF2 | SF1 | SF2 | F | Total |
| 1 | Jackson Muleka | TP Mazembe | 2 | 2 | | 1 | | 2 | | | | | | 7 |
| 2 | Achraf Bencharki | Zamalek | | 2 | | 1 | | | 1 | | 1 | | | 5 |
| 3 | Karim Aribi | Étoile du Sahel | | 2 | | | | 1 | | 1 | | | | 4 |
| 3 | Mostafa Mohamed | Zamalek | | | 1 | 1 | | | | | | 2 | | 4 |
| 5 | Badr Banoun | Raja Casablanca | | | | | 1 | 1 | 1 | | | | | 3 |
| 5 | Mohamed Eldai | Al-Hilal | 2 | | | | 1 | | | | | | | | 3 |
| 5 | Ayoub El Kaabi | Wydad AC | | | 3 | | | | | | | | | 3 |
| 5 | Winston Kalengo | ZESCO United | | 1 | | | 1 | 1 | | | | | | | 3 |
| 5 | Ali Maâloul | Al-Ahly | | | | | | | 2 | | 1 | | | 3 |
| 5 | Mabululu | 1º de Agosto | 1 | | 1 | 1 | | | | | | | | | 3 |
| 5 | Mohamed Magdy | Al-Ahly | | | | | | 1 | | | 1 | | 1 | 3 |
| 5 | Ben Malango | Raja Casablanca | | | 1 | | | | 1 | | | 1 | | 3 |
| 5 | Toni | Petro de Luanda | | 1 | 1 | | | 1 | | | | | | | 3 |