Overview
Reconcile is a native Android app that tracks spending automatically. It reads supported Indian bank and UPI transaction SMS, records income and expenses, and organizes them into budgets, accounts, and categories. Cash can be added by hand. Everything stays on the device: the app has no internet permission and no backend.
Features
- Automatic entry: incoming and historical SMS are parsed into transactions, with duplicate and self-transfer detection.
- Smart categories: transactions are categorized automatically, and corrections are remembered for next time.
- Budgets and goals: monthly and per-category budgets with rollover, plus savings goals.
- Credit cards: bill cycles, due dates, and scheduled reminders.
- Shared expenses: track money others owe you and mark it settled.
- Spending insights: trends, top merchants, category breakdowns, recurring payments, and month-end projections.
- Everyday Android: home-screen widget, quick-add shortcut, CSV export, and light and dark themes.
How it works
- SMS messages pass through a Kotlin parser that extracts amount, account, merchant, and reference.
- The repository checks for duplicates, assigns a category, and links the account before writing to Room.
- ViewModels expose changes through Flow and StateFlow, and the Jetpack Compose UI updates live.
Tech stack
- Language: Kotlin, Coroutines, Flow
- UI: Jetpack Compose, Material, Navigation Compose
- Storage: Room (financial records), DataStore (preferences)
- Architecture: MVVM with a repository layer
- Testing: JUnit, with 32 unit tests across SMS parsing, financial calculations, and reminder cycles
Engineering highlights
Accurate money math. Amounts are stored as integer paise, so totals never drift from floating-point rounding.
Reliable duplicate detection. SMS fingerprints, transaction references, and time-based matching catch the same payment reported twice by a bank and a UPI app.
Honest totals. Transfers between your own accounts and excluded transactions stay out of spending figures, and shared expenses track what you are owed separately.
Private by design. With no internet permission and no hosted backend, financial data never leaves the phone.

