ADVERTISEMENT

NAMFREL launches app to verify May 2025 poll results

Published May 9, 2025 03:46 pm

At A Glance

  • NAMFREL has launched a mobile app allowing the public to scan QR codes on election returns and help independently verify the results of the 2025 National and Local Elections.
The National Citizens' Movement for Free Elections (NAMFREL) has launched the NAMFREL Operation QR Count (2025) or OQC 2025, a way for Filipinos to participate in independently verifying the transmitted results of the 2025 National and Local Elections.
In the NAMFREL OQC 2025, any person with a smart device and internet connection can contribute to verifying the transmitted results of the elections at the different polling places by scanning the QR codes of the Election Returns (ERs) posted outside the doors of polling places during the counting period. The QR codes may be scanned using the NAMFREL 2025 app, a NAMFREL-developed mobile application, which can now be downloaded from the Google Play Store and Apple App Store.
As an accredited citizens' arm of the Commission on Elections (Comelec), NAMFREL will be receiving transmitted election results in real time, which NAMFREL will make available to the public through the NAMFREL website. The election returns posted outside the polling places will be printed prior to transmission.
Results scanned from the QR codes of these election returns will be received by NAMFREL HQ, and will then be matched with the transmitted results from the same polling places. It will be possible to see in the NAMFREL website which transmitted results also received corresponding QR ER results data from the public.
NAMFREL expects to receive from the public duplicate scans of the QR codes of the same ERs from polling places, which will further help strengthen the verification of the transmitted results from said precincts. Any person can scan the ER QR codes from as many polling places as they can. ERs stay posted outside polling places for up to three days after election day.
"Everybody is encouraged to download the NAMFREL 2025 app to help independently verify the transmitted election results in their own polling place, voting center, barangay, city and municipality. Every voter should be an observer. You can do this even if you are not a NAMFREL volunteer," NAMFREL National Chairperson Lito Averia said during the virtual launch.
"We especially encourage young people, and even local candidates and their supporters to download and use the NAMFREL 2025 app to ensure that the votes in their communities are verified via the NAMFREL OQC 2025," he added.
"We want the public to help independently verify the transmitted results using the election returns posted outside because these will be printed prior to electronic transmission. These are the same votes verified by the voters themselves while they were inserting their ballot through the automated counting machines," he said.
The NAMFREL 2025 app is available for download today, for use on Election Day.

Related Tags

NAMFREL NAMFREL operation QR count May 2025 elections NAMFREL 2025
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.