Kenya eyes MICE tourism to drive 5 million annual international visitors by 2028

Kenya eyes MICE tourism to drive 5 million annual international visitors by 2028

Tourism Cabinet Secretary Rebecca Miano at a past event. (Photo: Rebecca Miano/X)

Read this story aloud

Listen to the clean text version of this article

Ready
2 min listen
Audio reading is not supported on this browser.

The MICE segment emerged as a standout performer, attracting over 736,000 visitors and generating more than 85 million dollars in direct revenue, underscoring its strong economic multiplier effect, it added

Kenya announced on Wednesday that it is positioning its Meetings, Incentives, Conferences, and Exhibitions (MICE) tourism sector to help bridge a 2.3 million visitor deficit as it targets five million international arrivals annually by 2028.
Julius Bitok, principal secretary in the Ministry of Tourism and Wildlife, said the Ministry will lead efforts to attract more MICE business from key global source markets.
Kenya recorded 2.7 million international arrivals in 2025, a 9 per cent increase from the previous year, with the broader tourism sector generating about 500 billion shillings (3.86 billion U.S. dollars), according to the ministry.

More To Read

  • Governor Abdulswamad Nassir pushes for open skies policy to boost tourism, investment
  • Mombasa showcases coastal heritage as Our Ocean Conference draws global visitors
  • Tourism stakeholders warn Ebola misinformation is hurting travel bookings
  • Panic in Maasai Mara as aircraft skids off runway after landing failure, three escape unhurt
  • Lamu leaders warn rising youth violence and poor sanitation a threat to tourism
  • Tourism agencies including KICC starved of funding in proposed 2026/27 budget

The MICE segment emerged as a standout performer, attracting over 736,000 visitors and generating more than 85 million dollars in direct revenue, underscoring its strong economic multiplier effect, it added.
Bitok noted that Kenya’s expanding world-class venue capacity must be matched by an equally aggressive push from both the government and the private sector to firmly establish the country on the global events calendar.
Kenya Tourism Board (KTB) Chief Executive Officer June Chepkemei reaffirmed the need for collective action across the sector, noting that achieving Kenya’s ambitious tourism targets will require sustained, strategic engagement between the government and the private sector.

Latest Stories

  • The rhythms that broke Bashir: How Sudan’s music shaped a revolution
  • Sitting for more than 30 minutes at a time linked to higher cancer death risk, study finds
  • Ramaphosa in DR Congo as Africa races to contain expanding Ebola outbreak
  • KNEC sets July 30 deadline for School-Based Assessment verification ahead of 2026 KPSEA, KJSEA exams

“Through strategic partnerships, enhanced destination marketing, digital transformation, and stronger trade engagement, KTB is implementing initiatives designed to accelerate international arrivals and tourism receipts,” she said.

Other Topics To Read

Top Stories Today

  • KNEC orders schools to verify SBA scores for KPSEA, KJSEA candidates by July 30
  • Sudan’s forgotten revolution: The music that inspired a movement
  • Study warns prolonged sitting may increase cancer death risk by 10 per cent
  • Ramaphosa visits DR Congo as Africa steps up Ebola response
  • African sides shine, but why the late collapses that are haunting historic World Cup run?
  • Brent crude oil price drops below Sh9,200 a barrel as US-Iran tensions ease

`;
}

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


MSF warns aid cuts are pushing Sudan’s Um Rakuba refugee camp deeper into crisisSudan
|Mary Wambui
|9 hours ago

Repatriated Kenyans narrate ordeal after South Africa anti-migrant protestsNews
|Rachael Mutabasi
|15 hours ago

Sitting for more than 30 minutes at a time linked to higher cancer death risk, study findsHealth
|Bashir Mbuthia
|6 hours ago

Kisumu unveils six-point plan to curb goonsInfographics
|Charity Pancras
|14 hours ago

The World Cup enters its next stage after witch doctors, surprises and emergency beer deliveriesSports
|The Conversation
|13 hours ago

2026 FIFA World Cup top scorersInfographics
|Charity Pancras
|1 day ago

Young entrepreneurs showcase businesses as Changamka Festival opens in MombasaCoast
|Farhiya Hussein
|7 hours ago

Mombasa launches pilot waste segregation programme targeting 1,000 households to tackle plastic pollutionCoast
|Farhiya Hussein
|8 hours ago

Easing Middle East tensions push crude oil prices down to Sh9,160 a barrelBusiness
|Alfred Onyango
|8 hours ago

From Pipeline to MLS history: How Lawrence Olum became Kenya’s quiet football pioneerFootball
|Erick Kariuki
|10 hours ago

Share.
Leave A Reply

Exit mobile version