ADVERTISEMENT

Philippine banks' bad loan ratio hits 3-month low on strong lending — BSP data

Published May 19, 2025 12:00 am  |  Updated May 17, 2025 04:33 pm

At A Glance

  • The Philippine banking system's gross non-performing loan (NPL) ratio dropped to the lowest level in three months, as robust growth in total bank lending helped offset the slower rise in soured loans, according to the Bangko Sentral ng Pilipinas (BSP).

The Philippine banking system’s gross non-performing loan (NPL) ratio dropped to its lowest level in three months, as robust growth in total bank lending helped offset a slower rise in soured loans.

The latest data from the Bangko Sentral ng Pilipinas (BSP) showed that the banking industry’s NPL ratio improved to 3.3 percent in March, down from a steady 3.38 percent in January and February—marking its best performance in three months.

It was also better than March 2024’s gross NPL ratio of 3.39 percent.

BSP data showed bad loans increased by 0.55 percent to ₱516.1 billion as of end-March from ₱513.3 billion in February. Year-on-year, soured loans hiked by 11.1 percent from ₱464.7 billion in March last year.

Loans become non-performing if unpaid for at least 90 days past due date, posing a credit risk as borrowers are less likely to repay.

Philippine banks’ total loan portfolio climbed by three percent to ₱15.63 trillion as of end-March from ₱15.17 trillion in the first two months. The end-March figure also jumped by 14.2 percent from the ₱13.69 trillion recorded at the end of March last year.

Past due loans increased by 1.4 percent to ₱646.4 billion as of March from ₱637.8 billion a month ago. It also increased by 9.9 percent from ₱588.4 billion in the previous year.

This brought the past due ratio to 4.14 percent, declining from 4.2 percent in February and 4.3 percent last year.

Past due loans are those where the borrower has failed to pay principal, interest, or any installment on time, including restructured loans and other financial assets.

Rizal Commercial Banking Corp. (RCBC) chief economist Michael Ricafort said that banks’ gross NPL ratio as of March was the “best in three months or since December 2024 and among the best in 4.5 years or since August 2020.”

He said the improvement was likely due to “double-digit growth in bank loans,” which “effectively” increased the total amount of loans. This made the percentage of bad loans look smaller, especially since bad loans did not expand as quickly.

Interest rates and borrowing costs have eased following a cumulative 100-basis point (bps) rate cut by the US Federal Reserve and the BSP since late 2024. These improved “some borrowers’ ability to pay their loans/debts and partly helped reduce the NPL ratio,” Ricafort said.

“Possible further rate cuts by the BSP, especially possible additional BSP rate cuts of 75 bps for the rest of 2025, would further reduce borrowing costs that would help improve the payment of debts, thereby would help the improving trend of banks’ NPL ratio,” he added.

Related Tags

Bangko Sentral ng Pilipinas (BSP) non-performing loan (NPL) ratio
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.