Nigerian banks found growth in Kenya. Now they need profits.
This is Follow the Money, our weekly series that unpacks the earnings, business, and scaling strategies of African fintechs, financial institutions, companies, and governments. A new edition drops every Monday.
Deposits at the Kenyan subsidiaries of three of Nigeria’s biggest banks have more than doubled over the past five years, signalling growing customer uptake as the lenders expand their East African footprint through acquisitions and organic growth.
Yet the numbers reveal that while Guaranty Trust Holding Company Plc (GTCO), United Bank for Africa, and Access Holdings Plc have East African ambitions, consistently turning them into profits has proven difficult.
The question has become more urgent as Nigerian lenders continue investing billions of naira in foreign subsidiaries. The Central Bank of Nigeria (CBN) is also beginning to push banks to limit shareholders’ exposure to offshore operations.
Kenya has long been viewed as the gateway to East Africa, one of the world’s fastest-growing economic regions. East African economies are projected to grow at an average of 5.69% this year, according to the International Monetary Fund’s datasheet.
The country combines a relatively stable currency, deep financial markets and a $147.26 billion GDP, making it an attractive destination for banks seeking growth outside their region.
In February, Nedbank Group, South Africa’s fourth-largest bank, secured a Kenyan regulatory waiver to acquire about 66% of NCBA Group, one of East Africa’s biggest lenders.
“Nedbank Group has identified East Africa as a region of significant strategic importance, underpinned by strong macroeconomic fundamentals; the size of its economy; a large and growing population; attractive growth prospects,” the bank said in a January statement.
Nigeria’s UBA started operating in Kenya in 2009. GTCO began in 2013, Access in 2020 and inApril 2026, Zenith Bank followed. For Nigerian lenders that have grappled with currency volatility and harsh economic realities at home, Kenya offered both geographic diversification, currency stability, and access to a growing banking market.
“The completion of this transaction represents a significant step in our efforts to unlock the vast potential of East Africa’s market,” Roosevelt Ogbonna, Access Holdings Plc’s chief executive officer, said after the group’s acquisition of National Bank of Kenya in 2025.
The potential is showing in the numbers. Deposits are rising, assets are expanding, and revenues are growing. But profits tell a more complicated story.
Winning customers
Deposits are essential to any banking operation, as they provide access to cheap capital for investments and lending. They are usually a function of trust and offer a window into whether a bank is gaining traction in a new market.
By that measure, Nigerian banks appear to be making progress in Kenya.
While the three banks did not specify customer deposits on a per-subsidiary basis, customer deposits used to finance operations have been on an upward trajectory.
GTCO Kenya customer deposits rose from ₦85.6 billion ($62.84 million) in 2021 to ₦226.4 billion ($166.20 million) in 2025, a 164.44% increase. Over the same period, loans and advances to customers fell by 51.63% to ₦30.89 billion ($22.68 million).
UBA Kenya recorded the fastest growth. Deposits climbed from ₦41.5 billion ($30.47 million) in 2021 to ₦180.3 billion ($132.36 million) in 2025, a 334.2% increase. Its loan book expanded by 656.24%.
Access Bank Kenya’s deposits rose from ₦34.39 billion ($25.25 million) to ₦136.99 billion ($100.57 million) during the period, while loans increased by 160.12%.
/* TechCabal Brand Utilities */
.tc-perf-btn {
flex: 1; padding: 10px 14px; border: 1px solid #E2E8F0; border-radius: 6px; background: #FFFFFF; color: #4A5568; font-weight: 600; cursor: pointer; transition: all 0.15s ease-in-out; font-size: 0.875rem; text-align: center; white-space: nowrap; -webkit-tap-highlight-color: transparent;
}
.tc-perf-btn.active {
background: #EA2D2E; color: #FFFFFF; border-color: #EA2D2E; box-shadow: 0 4px 10px rgba(234, 45, 46, 0.15);
}
.tc-perf-btn:hover:not(.active) {
background: #F6F6F6; border-color: #CBD5E0;
}
.tc-view-toggle {
background: transparent; border: none; font-size: 0.75rem; font-weight: 600; color: #718096; cursor: pointer; padding: 4px 8px; border-radius: 4px; transition: all 0.2s; -webkit-tap-highlight-color: transparent;
}
.tc-view-toggle.active {
background: #F6F6F6; color: #151515;
}
/* Fluid Chart Area */
#tc-chart-render-zone {
position: relative; height: 320px; width: 100%; padding: 0; box-sizing: border-box; margin-top: 24px; border-bottom: 2px solid #CBD5E0;
}
.tc-chart-column-group {
display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; width: 18%; position: relative; cursor: pointer; outline: none; -webkit-tap-highlight-color: transparent;
}
.tc-bars-container {
display: flex; justify-content: center; align-items: flex-end; width: 100%; height: 100%; gap: 2px;
}
/* True Mobile-Friendly Hover & Focus States */
.tc-chart-column-group:hover .tc-bar-segment,
.tc-chart-column-group:focus .tc-bar-segment,
.tc-chart-column-group.active-touch .tc-bar-segment {
filter: brightness(0.85);
}
.tc-chart-column-group:hover .tc-custom-tooltip,
.tc-chart-column-group:focus .tc-custom-tooltip,
.tc-chart-column-group.active-touch .tc-custom-tooltip {
opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0);
}
.tc-chart-column-group:hover .tc-custom-tooltip.edge-left,
.tc-chart-column-group:focus .tc-custom-tooltip.edge-left,
.tc-chart-column-group.active-touch .tc-custom-tooltip.edge-left {
transform: translateX(0) translateY(0);
}
.tc-chart-column-group:hover .tc-custom-tooltip.edge-right,
.tc-chart-column-group:focus .tc-custom-tooltip.edge-right,
.tc-chart-column-group.active-touch .tc-custom-tooltip.edge-right {
transform: translateX(0) translateY(0);
}
.tc-bar-segment {
transition: height 0.4s cubic-bezier(0.16, 1, 0.3, 1); width: 30%; border-radius: 2px 2px 0 0; z-index: 2;
}
.tc-custom-tooltip {
position: absolute; bottom: 105%; left: 50%; transform: translateX(-50%) translateY(8px); background: #151515; color: #FFFFFF; padding: 12px 16px; border-radius: 6px; font-size: 0.75rem; width: max-content; opacity: 0; visibility: hidden; transition: all 0.2s ease; z-index: 30; pointer-events: none; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2); line-height: 1.6;
}
.tc-custom-tooltip::after {
content: ”; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: #151515 transparent transparent transparent;
}
.tc-custom-tooltip.edge-left { left: 0; transform: translateX(0) translateY(8px); }
.tc-custom-tooltip.edge-left::after { left: 20px; }
.tc-custom-tooltip.edge-right { left: auto; right: 0; transform: translateX(0) translateY(8px); }
.tc-custom-tooltip.edge-right::after { left: auto; right: 20px; }
/* Table Styles */
.tc-data-table {
width: 100%; border-collapse: collapse; margin-top: 16px; font-size: 0.85rem; text-align: right;
}
.tc-data-table th {
background: #F6F6F6; color: #4A5568; font-weight: 600; padding: 10px; border-bottom: 2px solid #E2E8F0; text-align: right; line-height: 1.3;
}
.tc-data-table th:first-child, .tc-data-table td:first-child { text-align: left; font-weight: 600; }
.tc-data-table td { padding: 10px; border-bottom: 1px solid #E2E8F0; color: #151515; }
/* Mobile Adaptations */
@media (max-width: 540px) {
#tc-balance-sheet-tracker { padding: 16px; }
.tc-perf-btn { padding: 8px 4px; font-size: 0.75rem; flex: 1; min-width: 0; }
#tc-btn-container { display: flex; justify-content: space-between; gap: 4px; }
.tc-meta-legend-block { flex-direction: column; align-items: flex-start; gap: 8px !important; }
.tc-data-table th, .tc-data-table td { padding: 8px 4px; font-size: 0.7rem; }
.tc-custom-tooltip { font-size: 0.7rem; padding: 10px; width: 180px; white-space: normal; }
}
Capital Allocation Engine
Compare Deposits vs. Loans vs. Cash and Bank Balances in Kenya (Billions ₦).
A TechCabal Tool
const tcBalDataset = {
GTCO: {
deposits: [85.6, 83.8, 108.8, 210.3, 226.4],
loans: [63.9, 49.3, 38.0, 33.3, 30.9],
cash: [8.1, 17.7, 28.2, 109.9, 50.3],
summary: “GTCO’s loan book shrank significantly despite strong deposit growth[cite: 1]. The bank chose to park capital in cash and bank balances rather than issue new credit to the market.”,
yCeil: 250
},
UBA: {
deposits: [41.5, 29.5, 152.2, 109.6, 180.3],
loans: [7.0, 10.6, 24.7, 24.7, 53.1],
cash: [27.2, 9.2, 33.2, 100.4, 61.4],
summary: “UBA’s operational turnaround coincided with rapid growth in deposits and lending[cite: 1]. However, the volume of cash reserves often outpaced actual lending, indicating a cautious credit approach.”,
yCeil: 250
},
Access: {
deposits: [34.4, 36.4, 60.1, 127.6, 137.0],
loans: [12.0, 15.7, 27.0, 45.1, 31.2],
cash: [13.6, 10.5, 35.3, 47.6, 61.7],
summary: “Access Bank struggled to convert balance-sheet expansion into earnings[cite: 1]. As deposits more than tripled, a massive portion of capital remained locked in cash and bank balances instead of loans.”,
yCeil: 250
}
};
function tcSwitchBalView(viewMode) {
document.getElementById(‘tc-bal-toggle-chart’).classList.remove(‘active’);
document.getElementById(‘tc-bal-toggle-table’).classList.remove(‘active’);
if(viewMode === ‘chart’) {
document.getElementById(‘tc-bal-toggle-chart’).classList.add(‘active’);
document.getElementById(‘tc-bal-view-chart-container’).style.display = ‘block’;
document.getElementById(‘tc-bal-view-table-container’).style.display = ‘none’;
} else {
document.getElementById(‘tc-bal-toggle-table’).classList.add(‘active’);
document.getElementById(‘tc-bal-view-chart-container’).style.display = ‘none’;
document.getElementById(‘tc-bal-view-table-container’).style.display = ‘block’;
}
}
function tcHandleBalTouch(element) {
document.querySelectorAll(‘.tc-chart-column-group’).forEach(col => col.classList.remove(‘active-touch’));
element.classList.add(‘active-touch’);
}
function tcRedrawBalanceChart(bankKey) {
document.querySelectorAll(‘.tc-perf-btn’).forEach(b => b.classList.remove(‘active’));
document.getElementById(`tc-bal-btn-${bankKey}`).classList.add(‘active’);
const data = tcBalDataset[bankKey];
document.getElementById(‘tc-bal-summary-text’).innerHTML = `Editorial Insight: ${data.summary}`;
const hostContainer = document.getElementById(‘tc-bal-columns-container’);
const tableContainer = document.getElementById(‘tc-bal-data-table-el’);
hostContainer.innerHTML = ”;
const timeline = [2021, 2022, 2023, 2024, 2025];
let tableHTML = `
`;
timeline.forEach((year, idx) => {
const depVal = data.deposits[idx];
const loanVal = data.loans[idx];
const cashVal = data.cash[idx];
tableHTML += `
`;
// Calculate heights dynamically
const depBarHeight = (depVal / data.yCeil) * 95;
const loanBarHeight = (loanVal / data.yCeil) * 95;
const cashBarHeight = (cashVal / data.yCeil) * 95;
let tooltipClasses = ‘tc-custom-tooltip’;
if (idx === 0) tooltipClasses += ‘ edge-left’;
if (idx === timeline.length – 1) tooltipClasses += ‘ edge-right’;
const markupBlock = `
₦${depVal.toFixed(1)}B
₦${loanVal.toFixed(1)}B
₦${cashVal.toFixed(1)}B
${year}
`;
hostContainer.innerHTML += markupBlock;
});
tableContainer.innerHTML = tableHTML;
}
tcRedrawBalanceChart(‘GTCO’);
document.addEventListener(‘click’, function(event) {
if (!event.target.closest(‘.tc-chart-column-group’)) {
document.querySelectorAll(‘.tc-chart-column-group’).forEach(col => col.classList.remove(‘active-touch’));
}
});
Despite these figures, Kenya’s deposit market potential remains largely untapped, with Nigerian banks’ share expected to grow as they deepen their market reach.
KCB Group, East Africa’s largest lender by assets, reported customer deposits of KES1.59 trillion ($12.3 billion) in 2025. Equity Group Holdings, Kenya’s second-biggest bank by assets, had customer deposits of KES1.46 trillion ($11.25 billion) in 2025.
Only GTCO has consistently made money
Among the three banks, GTCO stands out as the only institution that has consistently turned its Kenyan presence into profits.
The lender’s Kenyan subsidiary remained profitable throughout the five years under review. Profit after tax rose from ₦2.11 billion ($1.55 million) in 2021 to ₦4.91 billion ($3.60 million) in 2023 before moderating to ₦3.47 billion ($2.55 million) in 2025.
The bank’s operating income increased by 197.51% between 2021 and 2025, while operating expenses rose by 278.71%. Despite the increase, expenses remained significantly below income.
The numbers suggest GTCO has moved beyond the investment phase and established a business capable of generating recurring earnings.
UBA Kenya reported losses between 2021 and 2024 before posting a profit after tax of ₦5.03 billion ($3.69 million) in 2025.
Its turnaround coincided with rapid growth in deposits and lending. Operating income increased by 1,002.85% during the period, significantly outpacing the growth in operating expenses, which rose by 199.23%.
The results suggest UBA may have finally reached the scale needed to absorb the costs of operating in a foreign market.
/* TechCabal Brand Utilities */
.tc-perf-btn {
flex: 1; padding: 10px 14px; border: 1px solid #E2E8F0; border-radius: 6px; background: #FFFFFF; color: #4A5568; font-weight: 600; cursor: pointer; transition: all 0.15s ease-in-out; font-size: 0.875rem; text-align: center; white-space: nowrap; -webkit-tap-highlight-color: transparent;
}
.tc-perf-btn.active {
background: #EA2D2E; color: #FFFFFF; border-color: #EA2D2E; box-shadow: 0 4px 10px rgba(234, 45, 46, 0.15);
}
.tc-perf-btn:hover:not(.active) {
background: #F6F6F6; border-color: #CBD5E0;
}
.tc-view-toggle {
background: transparent; border: none; font-size: 0.75rem; font-weight: 600; color: #718096; cursor: pointer; padding: 4px 8px; border-radius: 4px; transition: all 0.2s; -webkit-tap-highlight-color: transparent;
}
.tc-view-toggle.active {
background: #F6F6F6; color: #151515;
}
/* Fluid Chart Area */
#tc-chart-render-zone {
position: relative; height: 320px; width: 100%; padding: 0; box-sizing: border-box; margin-top: 16px;
}
.tc-chart-column {
display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; width: 18%; position: relative; cursor: pointer; outline: none; -webkit-tap-highlight-color: transparent;
}
/* True Mobile-Friendly Hover & Focus States */
.tc-chart-column:hover .tc-bar-segment,
.tc-chart-column:focus .tc-bar-segment,
.tc-chart-column.active-touch .tc-bar-segment {
filter: brightness(0.85);
}
.tc-chart-column:hover .tc-custom-tooltip,
.tc-chart-column:focus .tc-custom-tooltip,
.tc-chart-column.active-touch .tc-custom-tooltip {
opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0);
}
.tc-chart-column:hover .tc-custom-tooltip.edge-left,
.tc-chart-column:focus .tc-custom-tooltip.edge-left,
.tc-chart-column.active-touch .tc-custom-tooltip.edge-left {
transform: translateX(0) translateY(0);
}
.tc-chart-column:hover .tc-custom-tooltip.edge-right,
.tc-chart-column:focus .tc-custom-tooltip.edge-right,
.tc-chart-column.active-touch .tc-custom-tooltip.edge-right {
transform: translateX(0) translateY(0);
}
.tc-bar-segment {
transition: height 0.4s cubic-bezier(0.16, 1, 0.3, 1), bottom 0.4s cubic-bezier(0.16, 1, 0.3, 1); width: 38%; position: absolute; border-radius: 3px 3px 0 0; bottom: 15%;
}
.tc-data-label {
position: absolute; font-size: 0.7rem; font-weight: 700; text-align: center; white-space: nowrap; z-index: 2; box-sizing: border-box; transition: opacity 0.2s; pointer-events: none;
}
.tc-custom-tooltip {
position: absolute; bottom: 105%; left: 50%; transform: translateX(-50%) translateY(8px); background: #151515; color: #FFFFFF; padding: 10px 14px; border-radius: 6px; font-size: 0.75rem; width: max-content; opacity: 0; visibility: hidden; transition: all 0.2s ease; z-index: 30; pointer-events: none; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2); line-height: 1.5;
}
.tc-custom-tooltip::after {
content: ”; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: #151515 transparent transparent transparent;
}
.tc-custom-tooltip.edge-left { left: 0; transform: translateX(0) translateY(8px); }
.tc-custom-tooltip.edge-left::after { left: 20px; }
.tc-custom-tooltip.edge-right { left: auto; right: 0; transform: translateX(0) translateY(8px); }
.tc-custom-tooltip.edge-right::after { left: auto; right: 20px; }
.tc-axis-baseline {
position: absolute; width: 100%; height: 1px; background: #CBD5E0; border-top: 1px solid #A0AEC0; z-index: 1; left: 0; bottom: 15%;
}
/* Table Styles */
.tc-data-table {
width: 100%; border-collapse: collapse; margin-top: 16px; font-size: 0.85rem; text-align: right;
}
.tc-data-table th {
background: #F6F6F6; color: #4A5568; font-weight: 600; padding: 10px; border-bottom: 2px solid #E2E8F0; text-align: right;
}
.tc-data-table th:first-child, .tc-data-table td:first-child { text-align: left; font-weight: 600; }
.tc-data-table td { padding: 10px; border-bottom: 1px solid #E2E8F0; color: #151515; }
/* Mobile Adaptations */
@media (max-width: 540px) {
#tc-op-efficiency-tracker { padding: 16px; }
.tc-perf-btn { padding: 8px 4px; font-size: 0.75rem; flex: 1; min-width: 0; }
#tc-btn-container { display: flex; justify-content: space-between; gap: 4px; }
.tc-data-label { font-size: 0.6rem; letter-spacing: -0.3px; }
.tc-meta-legend-block { flex-direction: column; align-items: flex-start; gap: 8px !important; }
.tc-data-table th, .tc-data-table td { padding: 8px 4px; font-size: 0.75rem; }
.tc-custom-tooltip { font-size: 0.7rem; padding: 8px 10px; }
}
Operational Efficiency Engine
Compare Operating Income vs. Expenses in Kenya (Billions ₦).
A TechCabal Tool
// Data values extracted and converted to Billions (₦)
const tcEffDataset = {
GTCO: {
income: [9.3, 9.1, 11.9, 27.4, 27.6],
expense: [3.8, 3.5, 4.5, 12.5, 14.5],
summary: “Operating income increased by 197.51% while expenses rose by 278.71%. Despite the expense increase, GTCO effectively kept its costs significantly below income across the entire 5-year period.”,
yCeil: 30
},
UBA: {
income: [2.2, 6.7, 14.6, 20.7, 24.0],
expense: [6.3, 7.4, 11.5, 26.0, 18.7],
summary: “Operating income increased by a massive 1,002.85%, significantly outpacing the 199.23% growth in operating expenses. By 2025, UBA finally achieved the scale needed to absorb costs.”,
yCeil: 30
},
Access: {
income: [4.7, 5.2, 4.8, 6.9, 10.1],
expense: [3.8, 3.9, 6.1, 19.8, 21.9],
summary: “Operating expenses recorded the fastest growth, rising by 471.02% between 2021 and 2025. Access Bank’s expenses currently sit over 217% higher than its generated income.”,
yCeil: 30
}
};
function tcSwitchEffView(viewMode) {
document.getElementById(‘tc-eff-toggle-chart’).classList.remove(‘active’);
document.getElementById(‘tc-eff-toggle-table’).classList.remove(‘active’);
if(viewMode === ‘chart’) {
document.getElementById(‘tc-eff-toggle-chart’).classList.add(‘active’);
document.getElementById(‘tc-eff-view-chart-container’).style.display = ‘block’;
document.getElementById(‘tc-eff-view-table-container’).style.display = ‘none’;
} else {
document.getElementById(‘tc-eff-toggle-table’).classList.add(‘active’);
document.getElementById(‘tc-eff-view-chart-container’).style.display = ‘none’;
document.getElementById(‘tc-eff-view-table-container’).style.display = ‘block’;
}
}
function tcHandleEffTouch(element) {
document.querySelectorAll(‘.tc-chart-column’).forEach(col => col.classList.remove(‘active-touch’));
element.classList.add(‘active-touch’);
}
function tcRedrawEfficiencyChart(bankKey) {
document.querySelectorAll(‘.tc-perf-btn’).forEach(b => b.classList.remove(‘active’));
document.getElementById(`tc-eff-btn-${bankKey}`).classList.add(‘active’);
const data = tcEffDataset[bankKey];
document.getElementById(‘tc-eff-summary-text’).innerHTML = `Editorial Insight: ${data.summary}`;
const hostContainer = document.getElementById(‘tc-eff-columns-container’);
const tableContainer = document.getElementById(‘tc-eff-data-table-el’);
hostContainer.innerHTML = ”;
const timeline = [2021, 2022, 2023, 2024, 2025];
const zeroBase = 15; // Bottom offset to leave room for x-axis labels
let tableHTML = `
`;
timeline.forEach((year, idx) => {
const incVal = data.income[idx];
const expVal = data.expense[idx];
// Populate Table
const efficiencyRatio = ((expVal / incVal) * 100).toFixed(0);
const expColor = expVal > incVal ? ‘color: #EA2D2E;’ : ‘color: #4A5568;’;
tableHTML += `
`;
// Populate Chart Bounds (Max height is 75% to leave room for labels above)
const incBarHeight = (incVal / data.yCeil) * 75;
const expBarHeight = (expVal / data.yCeil) * 75;
let tooltipClasses = ‘tc-custom-tooltip’;
if (idx === 0) tooltipClasses += ‘ edge-left’;
if (idx === timeline.length – 1) tooltipClasses += ‘ edge-right’;
// Precise centering directly above the respective bars
const incLabelStyle = `bottom: calc(${zeroBase + incBarHeight}% + 4px); left: 27%; transform: translateX(-50%); color: #24292F;`;
const expLabelStyle = `bottom: calc(${zeroBase + expBarHeight}% + 4px); left: 73%; transform: translateX(-50%); color: #EA2D2E;`;
const markupBlock = `
${year}
`;
hostContainer.innerHTML += markupBlock;
});
tableContainer.innerHTML = tableHTML;
}
// Initialize Chart
tcRedrawEfficiencyChart(‘GTCO’);
// Deselect touch tooltip when clicking outside
document.addEventListener(‘click’, function(event) {
if (!event.target.closest(‘.tc-chart-column’)) {
document.querySelectorAll(‘.tc-chart-column’).forEach(col => col.classList.remove(‘active-touch’));
}
});
Access Holding’s Kenyan operation presents the sharpest contrast between growth and profitability. Deposits are up more than threefold, but operating revenue grew by 116.56%.
Operating expenses have recorded the fastest growth, rising by 471.02% between 2021 and 2025. Expenses are currently 217.13% more than income. It reported a loss of ₦12.2 billion ($8.96 million) in 2025, its third consecutive year in the red.
/* TechCabal Brand Utilities */
.tc-perf-btn {
flex: 1; padding: 10px 14px; border: 1px solid #E2E8F0; border-radius: 6px; background: #FFFFFF; color: #4A5568; font-weight: 600; cursor: pointer; transition: all 0.15s ease-in-out; font-size: 0.875rem; text-align: center; white-space: nowrap; -webkit-tap-highlight-color: transparent;
}
.tc-perf-btn.active {
background: #EA2D2E; color: #FFFFFF; border-color: #EA2D2E; box-shadow: 0 4px 10px rgba(234, 45, 46, 0.15);
}
.tc-perf-btn:hover:not(.active) {
background: #F6F6F6; border-color: #CBD5E0;
}
.tc-view-toggle {
background: transparent; border: none; font-size: 0.75rem; font-weight: 600; color: #718096; cursor: pointer; padding: 4px 8px; border-radius: 4px; transition: all 0.2s; -webkit-tap-highlight-color: transparent;
}
.tc-view-toggle.active {
background: #F6F6F6; color: #151515;
}
/* Fluid Chart Area */
#tc-chart-render-zone {
position: relative; height: 290px; width: 100%; padding: 0; box-sizing: border-box; margin-top: 16px;
}
.tc-chart-column {
display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; width: 18%; position: relative; cursor: pointer; outline: none; -webkit-tap-highlight-color: transparent;
}
/* True Mobile-Friendly Hover & Focus States */
.tc-chart-column:hover .tc-bar-segment,
.tc-chart-column:focus .tc-bar-segment,
.tc-chart-column.active-touch .tc-bar-segment {
filter: brightness(0.85);
}
.tc-chart-column:hover .tc-custom-tooltip,
.tc-chart-column:focus .tc-custom-tooltip,
.tc-chart-column.active-touch .tc-custom-tooltip {
opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0);
}
.tc-chart-column:hover .tc-custom-tooltip.edge-left,
.tc-chart-column:focus .tc-custom-tooltip.edge-left,
.tc-chart-column.active-touch .tc-custom-tooltip.edge-left {
transform: translateX(0) translateY(0);
}
.tc-chart-column:hover .tc-custom-tooltip.edge-right,
.tc-chart-column:focus .tc-custom-tooltip.edge-right,
.tc-chart-column.active-touch .tc-custom-tooltip.edge-right {
transform: translateX(0) translateY(0);
}
.tc-bar-segment {
transition: height 0.4s cubic-bezier(0.16, 1, 0.3, 1), bottom 0.4s cubic-bezier(0.16, 1, 0.3, 1); width: 38%; position: absolute; border-radius: 3px 3px 0 0;
}
.tc-bar-segment.negative {
border-radius: 0 0 3px 3px;
}
.tc-data-label {
position: absolute; font-size: 0.7rem; font-weight: 700; text-align: center; width: 100%; white-space: nowrap; z-index: 2; box-sizing: border-box; transition: opacity 0.2s; pointer-events: none;
}
.tc-custom-tooltip {
position: absolute; bottom: 105%; left: 50%; transform: translateX(-50%) translateY(8px); background: #151515; color: #FFFFFF; padding: 10px 14px; border-radius: 6px; font-size: 0.75rem; width: max-content; opacity: 0; visibility: hidden; transition: all 0.2s ease; z-index: 30; pointer-events: none; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2); line-height: 1.5;
}
.tc-custom-tooltip::after {
content: ”; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: #151515 transparent transparent transparent;
}
/* Edge Case Adjustments */
.tc-custom-tooltip.edge-left { left: 0; transform: translateX(0) translateY(8px); }
.tc-custom-tooltip.edge-left::after { left: 20px; }
.tc-custom-tooltip.edge-right { left: auto; right: 0; transform: translateX(0) translateY(8px); }
.tc-custom-tooltip.edge-right::after { left: auto; right: 20px; }
.tc-axis-baseline {
position: absolute; width: 100%; height: 1px; background: #CBD5E0; border-top: 1px dashed #A0AEC0; z-index: 1; left: 0;
}
/* Table Styles */
.tc-data-table {
width: 100%; border-collapse: collapse; margin-top: 16px; font-size: 0.85rem; text-align: right;
}
.tc-data-table th {
background: #F6F6F6; color: #4A5568; font-weight: 600; padding: 10px; border-bottom: 2px solid #E2E8F0; text-align: right;
}
.tc-data-table th:first-child, .tc-data-table td:first-child { text-align: left; font-weight: 600; }
.tc-data-table td { padding: 10px; border-bottom: 1px solid #E2E8F0; color: #151515; }
/* Mobile Adaptations */
@media (max-width: 540px) {
#tc-banking-performance-tracker { padding: 16px; }
.tc-perf-btn { padding: 8px 4px; font-size: 0.75rem; flex: 1; min-width: 0; }
#tc-btn-container { display: flex; justify-content: space-between; gap: 4px; }
.tc-data-label { font-size: 0.6rem; }
.tc-data-label.deposit-label { transform: translateX(-15%) translateY(-6px); }
.tc-data-label.profit-label { transform: translateX(15%) translateY(4px); }
.tc-meta-legend-block { flex-direction: column; align-items: flex-start; gap: 8px !important; }
.tc-data-table th, .tc-data-table td { padding: 8px 4px; font-size: 0.75rem; }
.tc-custom-tooltip { font-size: 0.7rem; padding: 8px 10px; }
}
Subsidiary Performance Engine
Contrast asset scaling with net earnings in Kenya (Billions ₦).
A TechCabal Tool
const tcDataset = {
GTCO: {
deposits: [85.6, 83.8, 108.8, 210.3, 226.4],
profits: [2.1, 2.7, 4.9, 4.5, 3.5],
summary: “GTCO stands out as the only institution that consistently turned its Kenyan presence into profits. It doubled its deposits without plunging into deficit, signalling a business capable of generating recurring earnings.”,
ceilDep: 250, ceilProf: 15
},
UBA: {
deposits: [41.5, 29.5, 152.2, 109.6, 180.3],
profits: [-4.6, -1.7, -1.3, -6.4, 5.0],
summary: “UBA balanced multiple deficit cycles between 2021 and 2024 before realizing a distinct operational turnaround, posting a profit of ₦5.03 billion in 2025 as it finally reached the scale needed to absorb costs.”,
ceilDep: 250, ceilProf: 15
},
Access: {
deposits: [34.4, 36.4, 60.1, 127.6, 137.0],
profits: [0.8, 1.3, -1.3, -12.0, -12.2],
summary: “Access Bank accelerated market share expansion, growing deposits more than threefold. However, operational expenses grew by 471%, causing the bank to record a ₦12.2 billion loss in 2025—its third consecutive year in the red.”,
ceilDep: 250, ceilProf: 15
}
};
let tcCurrentBank = ‘GTCO’;
function tcSwitchView(viewMode) {
document.getElementById(‘tc-toggle-chart’).classList.remove(‘active’);
document.getElementById(‘tc-toggle-table’).classList.remove(‘active’);
if(viewMode === ‘chart’) {
document.getElementById(‘tc-toggle-chart’).classList.add(‘active’);
document.getElementById(‘tc-view-chart-container’).style.display = ‘block’;
document.getElementById(‘tc-view-table-container’).style.display = ‘none’;
} else {
document.getElementById(‘tc-toggle-table’).classList.add(‘active’);
document.getElementById(‘tc-view-chart-container’).style.display = ‘none’;
document.getElementById(‘tc-view-table-container’).style.display = ‘block’;
}
}
function tcHandleTouch(element) {
// Remove active class from all columns
document.querySelectorAll(‘.tc-chart-column’).forEach(col => col.classList.remove(‘active-touch’));
// Add active class to the tapped column
element.classList.add(‘active-touch’);
}
function tcRedrawChart(bankKey) {
tcCurrentBank = bankKey;
// Manage button states
document.querySelectorAll(‘.tc-perf-btn’).forEach(b => b.classList.remove(‘active’));
document.getElementById(`tc-btn-${bankKey}`).classList.add(‘active’);
const data = tcDataset[bankKey];
document.getElementById(‘tc-performance-summary-text’).innerHTML = `Editorial Insight: ${data.summary}`;
const hostContainer = document.getElementById(‘tc-chart-columns-container’);
const tableContainer = document.getElementById(‘tc-data-table-el’);
hostContainer.innerHTML = ”;
const timeline = [2021, 2022, 2023, 2024, 2025];
const zeroPoint = 30; // Baseline at 30% to accommodate negative profits
// Build Table Header
let tableHTML = `
`;
timeline.forEach((year, idx) => {
const depVal = data.deposits[idx];
const profVal = data.profits[idx];
// Populate Table
const profColorStr = profVal < 0 ? 'color: #D97706;' : 'color: #047857;';
tableHTML += `
`;
// Populate Chart Bounds
const depBarHeight = (depVal / data.ceilDep) * 55;
const profBarHeight = (Math.abs(profVal) / data.ceilProf) * 25;
const negativeReturn = profVal < 0;
const metricsColor = negativeReturn ? '#FFC52F' : '#EA2D2E';
const depOffset = zeroPoint;
const profOffset = negativeReturn ? (zeroPoint – profBarHeight) : zeroPoint;
let tooltipClasses = 'tc-custom-tooltip';
if (idx === 0) tooltipClasses += ' edge-left';
if (idx === timeline.length – 1) tooltipClasses += ' edge-right';
const markupBlock = `
${year}
`;
hostContainer.innerHTML += markupBlock;
});
tableContainer.innerHTML = tableHTML;
}
// Initialize Chart
tcRedrawChart(‘GTCO’);
// Deselect touch tooltip when clicking outside
document.addEventListener(‘click’, function(event) {
if (!event.target.closest(‘.tc-chart-column’)) {
document.querySelectorAll(‘.tc-chart-column’).forEach(col => col.classList.remove(‘active-touch’));
}
});
Access has only operated in Kenya for five years, and the figures suggest it is still paying the cost of expansion: building scale before profitability.
The lending challenge
One explanation for the profit gap may lie in how Nigerian banks deploy the deposits they have gathered.
While deposits have grown sharply, lending activity has not always kept pace. GTCO’s loan book shrank significantly despite strong deposit growth, while Access has struggled to convert balance-sheet expansion into earnings.
In Kenya, lending remains central to banking profitability. KCB’s 2025 results illustrate the opportunity. Loans issued through digital channels increased by 30% in 2025, equivalent to roughly KES1.1 billion ($8.5 million) disbursed daily. The bank reported a net profit of KES68.4 billion ($530 million) in 2025.
After repeatedly criticising commercial banks for failing to pass lower interest rates to borrowers, the Central Bank of Kenya approved risk-based pricing models in 2025. This framework allows banks to price loans using customer transaction histories, payment behaviour and business activity, potentially expanding credit access while improving risk management.
Competition is also intensifying beyond traditional banking.
Safaricom has expanded lending through its M-PESA platform, introducing new credit products for small and medium-sized businesses with limits of up to KES400,000 ($3,089).
Still betting on Kenya
Despite the mixed results, Nigerian lenders are not pulling back.
/* TechCabal Brand Utilities */
.tc-unit-btn {
flex: 1; padding: 10px 14px; border: 1px solid #E2E8F0; border-radius: 6px; background: #FFFFFF; color: #4A5568; font-weight: 600; cursor: pointer; transition: all 0.15s ease-in-out; font-size: 0.875rem; text-align: center; white-space: nowrap; -webkit-tap-highlight-color: transparent;
}
.tc-unit-btn.active { background: #EA2D2E; color: #FFFFFF; border-color: #EA2D2E; box-shadow: 0 4px 10px rgba(234, 45, 46, 0.15); }
.tc-unit-btn:hover:not(.active) { background: #F6F6F6; border-color: #CBD5E0; }
/* Pipeline Layout – Desktop */
.tc-pipeline-container {
display: flex; justify-content: space-between; align-items: stretch; margin-top: 32px; gap: 12px; position: relative;
}
.tc-pipeline-stage {
flex: 1; display: flex; flex-direction: column; gap: 12px; position: relative; z-index: 2;
}
/* Cards */
.tc-unit-card {
background: #F6F6F6; border: 1px solid #E2E8F0; border-radius: 8px; padding: 16px; text-align: center; transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); position: relative; display: flex; flex-direction: column; justify-content: center; min-height: 80px; box-sizing: border-box;
}
.tc-unit-card.primary { background: #24292F; border-color: #24292F; color: #FFFFFF; }
.tc-unit-card.primary .tc-card-label { color: #A0AEC0; }
.tc-unit-card.danger { background: #FFF0F0; border-color: #FFE0E0; color: #EA2D2E; }
.tc-unit-card.danger .tc-card-label { color: #EA2D2E; }
.tc-unit-card.warning { background: #FEFCBF; border-color: #FDE68A; color: #D97706; }
.tc-unit-card.warning .tc-card-label { color: #D97706; }
.tc-unit-card.success { background: #ECFDF5; border-color: #A7F3D0; color: #047857; }
.tc-unit-card.success .tc-card-label { color: #047857; }
.tc-card-label { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: #718096; margin-bottom: 4px; }
.tc-card-value { font-size: 1.5rem; font-weight: 800; letter-spacing: -0.5px; }
.tc-card-subtext { font-size: 0.65rem; color: #A0AEC0; margin-top: 4px; }
/* Arrows connecting stages */
.tc-arrow-right {
display: flex; align-items: center; justify-content: center; color: #CBD5E0; font-size: 1.5rem; font-weight: bold; width: 24px;
}
.tc-arrow-down { display: none; }
/* Mobile Adaptations – Grid Matrix Layout */
@media (max-width: 680px) {
#tc-unit-economics-engine { padding: 16px; }
.tc-unit-btn { padding: 8px 4px; font-size: 0.75rem; flex: 1; min-width: 0; }
#tc-btn-container { display: flex; justify-content: space-between; gap: 4px; }
.tc-pipeline-container { flex-direction: column; align-items: stretch; gap: 6px; margin-top: 20px; }
/* Force stages to flow horizontally on mobile */
.tc-pipeline-stage { flex-direction: row; width: 100%; max-width: 100%; gap: 8px; justify-content: center; }
.tc-pipeline-stage > div { flex: 1; } /* Ensure child cards split 50/50 */
.tc-unit-card { min-height: 65px; padding: 12px 6px; border-left-width: 3px !important; }
.tc-card-label { font-size: 0.58rem; letter-spacing: 0; }
.tc-card-value { font-size: 1.2rem; }
.tc-card-subtext { font-size: 0.6rem; }
.tc-arrow-right { display: none; }
/* Reveal vertical downward flow arrows */
.tc-arrow-down { display: flex; align-items: center; justify-content: center; color: #CBD5E0; font-size: 1.2rem; font-weight: bold; height: 16px; width: 100%; margin: 2px 0; }
}
The Unit Economics X-Ray (2025)
If ₦100 is deposited in Kenya, how efficiently is it managed?
A TechCabal Tool
// Mathematical Breakdown for 2025 (Normalized to 100 Deposits)
const tcUnitData = {
GTCO: {
loans: 13.6, // (30.9 / 226.4) * 100
cash: 22.2, // (50.3 / 226.4) * 100
income: 12.2, // (27.6 / 226.4) * 100
expense: 6.4, // (14.5 / 226.4) * 100
profit: 1.5, // (3.5 / 226.4) * 100
summary: “The Efficiency Play: GTCO operates an incredibly lean machine[cite: 1]. For every ₦100 deposited, they only lend out ₦13.6, but their operational costs are a mere ₦6.4. This tight cost-control allows them to squeeze out a steady ₦1.5 profit on every ₦100 handled.”
},
UBA: {
loans: 29.4, // (53.1 / 180.3) * 100
cash: 34.0, // (61.4 / 180.3) * 100
income: 13.3, // (24.0 / 180.3) * 100
expense: 10.4, // (18.7 / 180.3) * 100
profit: 2.8, // (5.0 / 180.3) * 100
summary: “The Turnaround: UBA is actively deploying capital, lending ₦29.4 of every ₦100 deposited[cite: 1]. Their income engine (₦13.3) finally outpaced their overhead costs (₦10.4) in 2025, yielding a healthy ₦2.8 net profit per ₦100.”
},
Access: {
loans: 22.8, // (31.2 / 137.0) * 100
cash: 45.0, // (61.7 / 137.0) * 100
income: 7.4, // (10.1 / 137.0) * 100
expense: 16.0, // (21.9 / 137.0) * 100
profit: -8.9, // (-12.2 / 137.0) * 100
summary: “The Expansion Burn: Access Bank is aggressively absorbing costs to gain market share[cite: 1]. For every ₦100 deposited, they generate only ₦7.4 in income but burn ₦16.0 on operating expenses, resulting in a severe ₦8.9 loss on every ₦100 they manage.”
}
};
function animateValue(obj, start, end, duration) {
let startTimestamp = null;
const step = (timestamp) => {
if (!startTimestamp) startTimestamp = timestamp;
const progress = Math.min((timestamp – startTimestamp) / duration, 1);
const currentVal = (progress * (end – start) + start).toFixed(1);
// Handle negative formatting
if (parseFloat(currentVal) < 0) {
obj.innerHTML = `-₦${Math.abs(currentVal).toFixed(1)}`;
} else {
obj.innerHTML = `₦${currentVal}`;
}
if (progress b.classList.remove(‘active’));
document.getElementById(`tc-unit-btn-${bankKey}`).classList.add(‘active’);
const data = tcUnitData[bankKey];
// Update Summary
document.getElementById(‘tc-unit-summary-text’).innerHTML = data.summary;
// DOM Elements
const elLoans = document.getElementById(‘tc-val-loans’);
const elCash = document.getElementById(‘tc-val-cash’);
const elIncome = document.getElementById(‘tc-val-income’);
const elExpense = document.getElementById(‘tc-val-expense’);
const elProfit = document.getElementById(‘tc-val-profit’);
const cardProfit = document.getElementById(‘tc-card-profit’);
const subProfit = document.getElementById(‘tc-sub-profit’);
// Extract current values for smooth animation
const currLoans = parseFloat(elLoans.innerText.replace(/[^0-9.-]+/g,””)) || 0;
const currCash = parseFloat(elCash.innerText.replace(/[^0-9.-]+/g,””)) || 0;
const currIncome = parseFloat(elIncome.innerText.replace(/[^0-9.-]+/g,””)) || 0;
const currExpense = parseFloat(elExpense.innerText.replace(/[^0-9.-]+/g,””)) || 0;
const currProfit = parseFloat(elProfit.innerText.replace(/[^0-9.-]+/g,””)) || 0;
// Animate Numbers
animateValue(elLoans, currLoans, data.loans, 600);
animateValue(elCash, currCash, data.cash, 600);
animateValue(elIncome, currIncome, data.income, 600);
animateValue(elExpense, currExpense, data.expense, 600);
animateValue(elProfit, currProfit, data.profit, 600);
// Dynamically Style the Profit/Loss Box
setTimeout(() => {
cardProfit.className = ‘tc-unit-card’; // reset
if (data.profit < 0) {
cardProfit.classList.add('warning');
subProfit.innerText = "Net Loss per ₦100";
} else {
cardProfit.classList.add('success');
subProfit.innerText = "Net Profit per ₦100";
}
}, 300); // Shift color halfway through animation
}
// Initialize with GTCO
tcRedrawUnitChart('GTCO');
In April, Zenith completed its acquisition of Paramount Bank Kenya, a mid-tier lender, giving it immediate access to customers, employees and operational infrastructure in the country.
“This acquisition marks a significant step towards our long-term strategic growth agenda and a strong inroad into the East African markets,” the bank said in a regulatory filing.
Access is betting that scale will eventually solve its profitability challenge. Following its acquisition of NBK from KCB Group in 2025, the lender will use the legacy brand to deepen its presence in the market and accelerate customer acquisition.
The focus now is on growth. Speaking to shareholders on the group’s full-year earnings call in May 2026, Ogbonna said the group’s priority was to expand the scale of its Kenyan operations rather than pursue another round of acquisitions.
“It is organic growth that we refer to by consolidation,” he said. “Kenya should grow, the Kenyan market should grow scale.”
GTCO, meanwhile, injected an additional ₦51.74 billion ($37.98 million) into its Kenyan subsidiary in 2025, increasing its ownership stake to 100%. Access invested ₦23.07 billion ($16.93 million) in its Kenyan subsidiary.
These investments are part of efforts by banks to demonstrate that overseas investments can generate sustainable returns.
For now, the Kenyan expansion remains a work in progress, and fintechs like Moniepoint, which completed its acquisition of a 78% stake in Kenya’s Sumac Microfinance Bank in March, will be paying attention.
Note: exchange rate used: ₦1,362.21/$
