Turn bank SMS into a clean, searchable money timeline with on-device AI assistance. 100% private, no cloud processing.
⭐ Star us on GitHub — join 300+ supporters!
Your bank already texts you every transaction — PennyWise turns those SMS into a private, zero-setup expense tracker with on-device AI. No accounts, no cloud, no effort.
- Grant SMS permission (read-only) — no account creation, no inbox changes, no messages sent.
- PennyWise parses your transactions instantly — extracts amount, merchant, category, and date. New SMS are detected in real-time.
- Get insights — analytics, budgets, subscriptions, and an on-device AI assistant you can ask anything.
Key Differentiators
- 🔒 100% On-Device & Private — All AI processing runs locally, no cloud, no servers, no tracking
- ⚡ Zero Setup — Just grant SMS permission, no accounts to create, works instantly
- 🆓 Free & Open Source — AGPL v3 licensed, no ads, no trackers; an optional PennyWise Pro upgrade (unlimited rules, PDF statement imports, CSV export, account merge) supports the solo developer
Core Features
- 🤖 Smart SMS Parsing — 139 banks across 23 countries with real-time detection of incoming SMS
- 🌍 Multi-Currency — Native support for INR, USD, AED, THB, NPR, ETB, and more with exchange rate management
- 💬 On-Device AI Assistant — Ask "What did I spend on food?" — powered by Qwen 2.5, runs entirely on your phone
- 🏷️ Auto-Categorization & Smart Rules — Pattern-based rules that auto-categorize transactions
- 💰 Budget Tracking — Multiple budget groups (Limit/Target/Expected types), daily allowance, category-level budgets
- 📊 Analytics & Charts — Bar charts, line trends, heatmaps, category breakdowns, top merchants, custom date ranges
- 🏦 Multi-Account & Balance Tracking — Track multiple bank accounts with live balance from SMS and balance history
- 🔄 Subscription Detection — Automatic recurring payment detection with due date alerts
- 🎨 Custom Categories — Create your own with custom colors and icons
More Features
- 🔐 Biometric App Lock — Fingerprint/face unlock with configurable timeout
- 📱 Home Screen Widgets — Budget progress and recent transactions at a glance
- 📤 Data Export & Backup — CSV export for taxes, full backup/restore (.pennywisebackup)
- 🎭 Material You Theming — Dynamic colors, multiple cover styles (Aurora, Gradient, Wave), light/dark/system themes
- ✏️ Manual Transactions — Add and edit transactions manually
- 🔍 Search & Filters — Filter by category, merchant, period, currency, transaction type
- 🎯 Guided Onboarding — Spotlight tutorial for first-time users
Rules let you auto-categorize, modify, or block transactions based on configurable conditions. A rule consists of one or more "When" conditions and a "Then" action.
Available condition fields:
| Field | Description | Example value | Supported operators |
|---|---|---|---|
AMOUNT |
Transaction amount | 200 |
<, >, = |
TYPE |
Income/Expense/Transfer | INCOME |
contains, equals, starts with |
CATEGORY |
Assigned category | Food & Dining |
contains, equals, starts with |
MERCHANT |
Merchant/vendor name | Amazon |
contains, equals, starts with |
NARRATION |
Transaction description | Monthly rent |
contains, equals, starts with |
SMS_TEXT |
Raw SMS body | OTP |
contains, equals, starts with |
BANK_NAME |
Bank name from SMS | HDFC Bank |
contains, equals, starts with |
TIME / HOUR |
Transaction time | 09:00 / 9 |
before, after, at or after, at or before |
DAY_OF_WEEK |
Day (1=Mon .. 7=Sun) | 1 |
is, is any of, is not |
DAY_OF_MONTH |
Day of month (1-31) | 15 |
is, is any of, before, after |
DATE |
Transaction date | 2026-03-21 |
is, before, after |
ACCOUNT |
Bank account composite | Select from picker | is, is not |
Account condition (ACCOUNT) — Restricts the rule to transactions from a specific bank account. The value is stored as a BankName||Last4 composite key (e.g. HDFC Bank||1234). When selected, the UI shows an account picker populated from your tracked accounts. Only EQUALS and NOT_EQUALS operators are available.
Conditions can be combined with AND / OR logic, and multiple conditions per rule are supported.
Available actions:
- Set — Override a field (category, merchant, type, description)
- Append / Prepend — Add text to a field (merchant, description)
- Clear — Remove a field value
- Block — Prevent the transaction from being saved
JSON representation (stored locally, not exposed via API):
{
"conditions": [
{"field": "ACCOUNT", "operator": "EQUALS", "value": "HDFC Bank||1234"},
{"field": "AMOUNT", "operator": "GREATER_THAN", "value": "500"}
],
"actions": [
{"field": "CATEGORY", "actionType": "SET", "value": "Food & Dining"}
]
}Supporting 139 banks & services across 23 countries with multi-currency capabilities:
AU Small Finance Bank, Airtel Payments Bank, Amazon Pay, American Express, Axis Bank, Bandhan Bank, Bank of Baroda, Bank of India, CRED, Canara Bank, Cashfree, Central Bank of India, City Union Bank, DBS Bank, Department of Post, Dhanlaxmi Bank, Equitas Small Finance Bank, Federal Bank, Greater Bank, HDFC Bank, HDFC Mutual Fund, HSBC Bank, ICICI Bank, IDBI Bank, IDFC First Bank, India Post Payments Bank, Indian Bank, Indian Overseas Bank, IndusInd Bank, JK Bank, Jana Small Finance Bank, Jio Payments Bank, JioPay, Jupiter, Karnataka Bank, Kerala Bank, Kerala Gramin Bank, Kotak Bank, LazyPay, NSDL Payments Bank, Navi Mutual Fund, OneCard, Punjab & Sind Bank, Punjab National Bank, Saraswat Co-operative Bank, Slice, South Indian Bank, Standard Chartered Bank, State Bank of India, UCO Bank, Union Bank of India, Utkarsh Bank, Yes Bank
Citizens Bank, Everest Bank, Laxmi Sunrise Bank, Lumbini Bikash Bank, Machchhapuchchhre Bank, Manjushree Finance, NMB Bank, Nabil Bank, Nepal Bank Limited, Nepal SBI Bank, Prime Commercial Bank, Siddhartha Bank, Standard Chartered Bank Nepal
BAAC, Bangkok Bank, CIMB Thai, Government Savings Bank, KTC, Kasikorn Bank, Krungsri, Krungthai Bank, Siam Commercial Bank, TTB, UOB Thailand
ALECU, AdelFi, Altana Federal Credit Union, Charles Schwab, Chase, Citi Bank, Discover Card, Huntington Bank, Navy Federal Credit Union, Old Hickory Credit Union
CRDB Bank, Diamond Trust Bank, M-Pesa Tanzania, Mixx by Yas, NMB Bank Tanzania, Selcom Pesa, Tigo Pesa
Abu Dhabi Commercial Bank, Emirates Islamic, Emirates NBD, First Abu Dhabi Bank, Liv Bank, Mashreq Bank
Bankino, Mellat Bank, Melli Bank, Parsian Bank, blu Bank
Access Bank, Jaiz Bank, Keystone Bank, Opay, Zenith Bank
Al Rajhi Bank, Alinma Bank, SABB, STC Bank, Saudi National Bank
Commercial Bank of Ethiopia, Dashen Bank, Telebirr, Zemen Bank
M-Pesa Mozambique, Millennium BIM, Standard Bank Mozambique, eMola
National Savings Bank, Nations Trust Bank, Sampath Bank
Arab Bank, CIB Egypt
BPCE, Sparkasse Rhein-Maas
bKash
Priorbank
Bancolombia
mBank CZ
M-PESA
Bank Muscat
Faysal Bank
T-Bank
Enpara
More banks being added regularly! Request your bank →
All AI processing happens on your device using MediaPipe's Qwen 2.5 model — no cloud, no API calls, no data leaving your phone. There are no accounts to create, no sign-ups, no servers collecting your data. Your SMS and financial information stay entirely on your device. The entire codebase is open source (AGPL v3) so anyone can verify exactly what the app does.
In-app screenshots (light & dark themes)
Light Theme
| Home | Analytics | Categories | Details | AI Chat |
Dark Theme
| Home | Analytics | Account Detail | Accounts | AI Chat |
# Clone repository
git clone https://github.com/sarim2000/pennywiseai-tracker.git
cd pennywiseai-tracker
# Build APK
./gradlew assembleDebug
# Install
adb install app/build/outputs/apk/debug/app-debug.apk- Android 12+ (API 31)
- Android Studio Ladybug or newer
- JDK 11
Architecture: MVVM • Jetpack Compose • Room • Coroutines • Hilt • MediaPipe AI • Material Design 3
- Discord: Join the community, share feedback, and get help — Join Discord
- Issues: Report bugs or request features — Open an issue
See CONTRIBUTING.md for guidelines.
Please read our Code of Conduct before participating.
./gradlew test # Run tests
./gradlew lint # Check stylePlease review our Security Policy for how to report vulnerabilities.
Thanks goes to these wonderful people (emoji key):
Lucifer1590 👥 🐛 📓 |
akshaynexus 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!
GNU Affero General Public License v3.0 - see LICENSE
This project is licensed under AGPL v3, which means:
- ✅ You can use, modify, and distribute this software
- ✅ You must share your modifications under the same license
- ✅ If you run a modified version on a server, you must make the source code available to users
- ✅ Patent rights are explicitly granted and protected