AFCON 2027 qualifiers draw set for May 19 as 48 nations begin race to East Africa
AFCON 2027 qualifiers draw set for May 19 as 48 nations begin race to East Africa
Read this story aloud
Listen to the clean text version of this article
Ready
4 min listen
Audio reading is not supported on this browser.
A total of 48 national teams, including the three co-hosts, will enter the qualification race. By the end of the campaign, only 24 teams will secure places at the finals of Africa’s biggest football competition
The road to the 2027 Africa Cup of Nations (AFCON) officially begins on Tuesday afternoon when the Confederation of African Football (CAF) conducts the draw for the qualifiers in Cairo, Egypt.
The ceremony will take place on May 19, 2026, at 3:00 pm local time (12h00 GMT) at the headquarters of the Egyptian Football Association. It will mark the first major step toward the tournament that will be jointly hosted by Kenya, Tanzania and Uganda in June and July 2027.
A total of 48 national teams, including the three co-hosts, will enter the qualification race. By the end of the campaign, only 24 teams will secure places at the finals of Africa’s biggest football competition.
More To Read
- CAF opens bidding for 2028, 2032 and 2036 AFCON tournaments
- President Yoweri Museveni backs single East African visa for 2027 AFCON
- From Pipeline to MLS history: How Lawrence Olum became Kenya’s quiet football pioneer
- How the new Ngong Road flyover is fueling growth at Dagoretti Corner
- FKF withdraws court case after FIFA, CAF intervene to resolve governance crisis
- How climate change is threatening grassroots football in Kenya ahead of AFCON 2027
The 48 teams will be divided into 12 groups of four during Tuesday’s draw. Each team will play the others in its group home and away across six matchdays. At the end of the group stage, the top two teams in every group will qualify automatically for the tournament.
However, there is a special arrangement for groups that include one of the three host nations. Since Kenya, Tanzania and Uganda have already qualified automatically as hosts, their groups will allow one additional team to progress. This ensures that the overall number of teams at the finals remains balanced while still giving the hosts competitive matches during the qualification phase.
The qualifiers will be played in three separate international windows on the FIFA calendar. The first two matchdays are scheduled between 21 September and 6 October 2026. Matchdays three and four will follow from 9 to 17 November 2026. The final two matchdays will be staged from 22 to 30 March 2027. These fixtures will determine which nations book their tickets to East Africa.
Latest Stories
- DCI arrests man accused of conning job seekers Sh8.6 million in fake KDF, NPS and PSC recruitment scam
- Wajir begins construction of Baitulmaal Level 4 Hospital to expand access to healthcare
- The world has the science to transform food systems: The next frontier is scaling it
- Nigeria demands probe after two citizens killed in South Africa amid rising xenophobia concerns
The 2027 AFCON itself will kick off on 19 June 2027, with the final set for 17 July 2027. It will be a historic edition of the tournament as it will be the first time three countries co-host the competition. It will also mark the return of the continental showpiece to the East African region for the first time in decades.
Tuesday’s draw is therefore more than just a ceremony. It will shape the journey for giants of African football and emerging nations alike. Strong teams could find themselves in challenging groups, while others may see a clearer path to qualification. For the host nations, the draw will also determine the level of competition they face as they prepare to perform on home soil.
As the balls are drawn in Cairo, the countdown to AFCON 2027 will truly begin, and the battle for a place at Africa’s premier football stage will officially be underway.
Other Topics To Read
Top Stories Today
- Man arrested over Sh8.6 million fake KDF, police jobs scam
- Saba Saba organisers notify police of peaceful march to Parliament
- Wajir expands healthcare with new Baitulmaal Level 4 Hospital project
- Why scaling innovation is the missing link in global food security
- Abuja warns of diplomatic fallout after killing of Nigerians in South Africa
- Kenya’s Stephen Yiembe lands historic UEFA Super Cup officiating role
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspectsNews
|Lucy Mumbi
|17 hours ago
Karua, Matiang’i demand arrest and resignation of PS Fikirini over Cecil Ouma shootingNews
|Rachael Mutabasi
|7 hours ago
Lilian Odira targets personal best and Diamond League final after dream victory in EugeneAthletics
|Erick Kariuki
|6 hours ago
Saba Saba organisers notify police of planned peaceful demonstration to ParliamentNews
|Rachael Mutabasi
|4 hours ago
2026 FIFA World Cup claims seven national team coachesInfographics
|Charity Pancras
|10 hours ago
The world has the science to transform food systems: The next frontier is scaling itClimate Change
|The Conversation
|3 hours ago
Pakistan to host next round of US-Iran talks on July 11Middle-East
|XINHUA
|12 hours ago
Sudan’s people subject to ‘relentless’ drone strikes in El ObeidSudan
|UN News
|1 day ago
Judiciary to publish individual performance reports for judges in transparency pushNational
|Carolyne Kubwa
|1 day ago
UN agencies warn South Sudan funding shortfall pushes millions toward acute hungerRegional
|XINHUA
|1 day ago
