') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - rxjith/Filous: A minimal. secure and local budget/spendings tracker app for Android, themed with Material You/Material 3 design philosophy. Special feature: Logging digital payments via SMS interception! · GitHub
Skip to content

Repository files navigation

Filous Icon

💸 Filous | فلوس

A Smart, Minimalist, and Clean Budget/Spendings Tracker for Android


Latest releaseLicenseDownloads


Download · Features · Screenshots · Support

Warning

SMS Permissions - Filous needs access to read your SMS to intercept payment information. Battery Optimization - Filous needs unrestricted access to run in the background to allow for SMS interception and also to keep you logged in at all times.

Note

DISCLOSURE - Filous does NOT send off any data from your device, everything stays local and ON your device.


🚀 Features

  • Dual Tracking Modes — Choose between a goal-oriented Budget Tracker (categorized) or a detailed Spending Tracker (ledger style).
  • Automatic SMS Logging — Effortlessly record transactions in real-time by automatically parsing incoming bank SMS notifications.
  • Smart Categorization — An intelligent heuristic engine automatically guesses transaction categories based on merchant details.
  • Visual Insights — Stay on top of your finances with live charts and progress bars that visualize your spending habits.
  • Multi-Currency Support — Track spending across 50+ currencies with live, automated exchange rate fetching.
  • Modern Material 3 Design — A clean, modern interface featuring Material You dynamic coloring and customizable themes.
  • Privacy First — All your financial data is stored securely, and locally ON your device using high-performance storage.
  • Reliable Backups — Keep your data safe with flexible manual exports and scheduled automatic backups (Daily/Weekly/Monthly).

Screenshots

Login Interface

Budget Mode

Budget Mode SelectedTotal Monthly BudgetSelect CategoriesCategory LimitsPermissionsBudget Mode's DashboardEdit Category Limits

Spending Tracker Mode

Spending Tracker Mode SelectedSpending Tracker Mode DisclaimerSpending Mode: Select CategoriesPermissionsSpending Tracker Mode: Dashboard

Common

Adding a new transactionTransaction HistoryDeleting Transaction(s)Settings Page

Download Now

Download from GitHub

If you face any issues installing the app onto your device due to Play Protect interference, please head to the Play Store and follow these steps:

  1. Click your Profile photo on the top right.
  2. Click Play Protect.
  3. Click the gear icon on the top right.
  4. Toggle the "Scan apps with Play Protect" to OFF.
  5. Toggle the "Improve harmful app detections" to OFF.
  6. Install Filous from the downloaded .apk file.
  7. Toggle ON both settings that were previously disabled.

Important

Disclaimer I am not responsible for any threats, malware, or viruses installed onto your device after neglecting to re-enable Play Protect as outlined above. Filous does NOT contain any malware, nor does it transmit your personal data to any third-party servers.


Support The Project!

Support Me on Ko-Fi Button

About

A minimal. secure and local budget/spendings tracker app for Android, themed with Material You/Material 3 design philosophy. Special feature: Logging digital payments via SMS interception!

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages