Nairobi ranks 56th globally and 6th in Sub-Saharan Africa in new city attractiveness index
Nairobi ranks 56th globally and 6th in Sub-Saharan Africa in new city attractiveness index
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.
Experts argue that the ranking reflects the city’s standing as a key regional hub despite persistent structural challenges
Nairobi has been ranked 56th globally and 6th in Sub-Saharan Africa in the latest Global Attractiveness Index.
Unveiled on Monday during the Climate Change Business Summit in Nairobi, the index places the country’s capital 11th across the entire continent of Africa.
Experts argue that the ranking reflects the city’s standing as a key regional hub despite persistent structural challenges.
More To Read
- Nairobi budget lapse leaves county on restricted spending as Governor Sakaja, MCAs clash
- Emirates launches third daily Nairobi flight, boosting Kenya-UAE connectivity
- Revamped Kamukunji Recreation Park set to boost sports, youth and local economy
- It’s International Sushi Day: 11 sushi etiquette mistakes to avoid
- Nairobi County rolls out digital system to monitor vehicles, fuel use and maintenance
- Government to install CCTV across Nairobi, Mombasa and four other cities in crime crackdown
The Global Attractiveness Index for Emerging and Fast-Growing Cities, developed by logistics firm DHL and the European House Ambrosetti, evaluated 80 cities worldwide based on their ability to attract and retain capital, talent and services.
It measures performance across four pillars: economy, environment, social conditions and urban infrastructure.
According to the findings, Nairobi continues to demonstrate a strong economic profile, ranking 39th globally in the economic dimension.
Latest Stories
- Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict
- Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more days
- Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
- Mbappé fires France past Paraguay into World Cup quarter-finals
The city’s diversified economy and relative affordability position it competitively among peer emerging cities, reinforcing its role as a commercial anchor in Eastern Africa.
The report also highlights Nairobi’s environmental performance as a key strength, with the city ranking 35th globally.
Strong air quality indicators, access to drinking water and availability of green spaces have elevated its position, marking it as one of the continent’s more environmentally competitive urban centres.
Hennie Heymans, CEO of DHL Express Sub-Saharan Africa (L) and Pietro Maninni, CEO of The European House – Ambrosetti Africa (R) at the 2026 Global Attractiveness Index for Emerging and Fast-Growing Cities (GAI) launch. Nairobi is ranked 56th globally, 11th in Africa, and 6th in Sub-Saharan Africa. (Handout)
However, the index underscores significant gaps in social conditions, where Nairobi ranks 73rd globally.
Limited access to sanitation services and a high proportion of residents living in informal settlements continue to weigh heavily on its overall attractiveness.
Infrastructure constraints further limit Nairobi’s global competitiveness, with the city placed 65th in this category.
Weak digital connectivity and low sewerage coverage are cited as major barriers, even as basic water access remains relatively stable compared to regional peers.
Across the continent, Johannesburg, Port Louis, Gaborone and Praia emerged as top performers.
Looking ahead, the GAI emphasises that Africa’s urban future will be defined by how well cities balance economic dynamism with social inclusion and infrastructure reliability.
“Africa is not short of ambition or talent. What we need now is coordinated investment, public and private, in the systems that allow cities to scale sustainably,” said Hennie Heymans, CEO of DHL Express Sub-Saharan Africa.
“Cities such as Johannesburg, Port Louis, and Gaborone demonstrate what is possible, and Nairobi’s ranking highlights the untapped potential that can be unlocked by aligning its positive economic and environmental progress with targeted investments in social initiatives and infrastructure.”
Pietro Maninni, CEO of The European House – Ambrosetti Africa, echoed his sentiments.
“The GAI provides an important evidence base for policymakers, investors and business leaders. With the right reforms, digital acceleration, inclusive housing strategies, green infrastructure and modernised urban services, African cities can shift quickly into higher tiers of global competitiveness.”
Other Topics To Read
Top Stories Today
- Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
- Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict
- Quiet revolution behind foldable smartphones and why they’re making a comeback
- State extends security operation in Marsabit, declares multiple areas dangerous for 30 more days
- Mbappé fires France past Paraguay into World Cup quarter-finals
- Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeat
`;
}
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
Invisible peacebuilders: How ‘diplomacy works’ to prevent conflictWorld
|UN News
|39 minutes ago
Morocco continue historic rise with record-breaking World Cup victory against CanadaSports
|Erick Kariuki
|10 hours ago
Mbappé fires France past Paraguay into World Cup quarter-finalsSports
|Erick Kariuki
|2 hours ago
UK, France agree with Oman on multinational military mission to secure Strait of HormuzNews
|Mary Wambui
|21 hours ago
Sudan’s people subject to ‘relentless’ drone strikes in El ObeidSudan
|UN News
|14 hours ago
UN Rights Chief Volker Türk issues ‘Red Alert’ over escalating violence in Sudan’s El ObeidNews
|Mary Wambui
|1 day ago
SHA seeks Treasury funds to clear NHIF claims above Sh10 millionHealth
|Charity Kilei
|16 hours ago
Renewable energy boom cuts global fossil fuel bill by Sh62 trillion in 2025Business
|Alfred Onyango
|1 day ago
Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeatSports
|Erick Kariuki
|2 hours ago
16 CITAM Woodley pupils stable after bee attack during Lake Baringo tourNews
|Rachael Mutabasi
|22 hours ago
