SpendLens app icon

SpendLens

The UPI tracker that can't leak your data, because it can't reach the internet.

Android Offline-first Open source v0.1.1-alpha
Zero network permission. SpendLens has no internet access at all, so your financial data cannot leave your phone, by design and not just by promise.

What it does

SpendLens is an offline Android expense tracker that reads the payment notifications you already get from UPI and banking apps and quietly turns them into a private spending ledger, stored entirely on your device. No manual data entry, no logins, no cloud, no ads. It captures spends from 19+ UPI and bank apps, can recover months of history from your existing bank SMS, imports CSV statements, and lets you split payments, tag trips, and see where your money actually goes.

Key features

Automatic capture

Reads payment notifications from 19+ UPI and bank apps using grammatical shape-matching, not fragile app-specific parsing.

Historical recovery

Optionally reads existing bank SMS in your inbox to rebuild months or years of past spending.

CSV import

Bring in bank statements through a file picker for a complete, reconciled picture.

Split payments

Split a bill among named people with repayment tracking, and amounts that always sum back exactly.

Tags & trips

Group spends into tags and trips with date-aware journey progress indicators.

Spending insights

See spending across 7, 30 and 90-day windows by day, merchant, tag, and payment rail.

Screenshots

SpendLens screenshot SpendLens screenshot SpendLens screenshot SpendLens screenshot SpendLens screenshot SpendLens screenshot SpendLens screenshot

How it works

Every notification and message flows through a small, Android-independent core that reads structure rather than app identity, then dedupes the same payment seen across multiple sources before it ever touches storage.

parse dedupe fuse resolve merchant persist (encrypted) nudge

Merchants are identified through a six-rung resolution ladder (explicit rules, captured name, VPA structure, directory, fuzzy match, then a safe fallback). Money is stored as integer paise to avoid floating-point rounding, and split amounts are balanced to the last paisa (₹1,000 three ways becomes 333.34 / 333.33 / 333.33).

Built with

KotlinJetpack ComposeSQLDelight SQLCipher (AES-256)Android KeystoreGradle (Kotlin DSL) JUnit (102+ tests)JDK 21 · SDK 36

Privacy & security

No internet, at all

The APK ships with no INTERNET permission, so there is no data-exfiltration path regardless of future code.

Encrypted at rest

The ledger lives in a SQLCipher database with AES-256, its key sealed by the Android Keystore.

No SDKs, no tracking

No analytics, crash reporting, advertising, accounts, or third-party services. Notification contents are never logged.

Six permissions

The standard build requests only six permissions, none of them classified as dangerous by Android.

Download

Two builds, both signed. Verify against SHA256SUMS.txt from the release if you like. Current release: v0.1.1-alpha.

Standard build Recommended

Reads payment notifications only. The right choice for most people.

Android APK Download standard APK

Full build

Adds SMS reading for historical recovery. Distributed as a direct APK due to SMS policy.

Android APK · includes READ_SMS Download full APK

This is an alpha. On install, Google Play Protect may warn about the notification-listener permission; that is expected for an app that reads notifications, and you can approve it to continue. F-Droid submission is prepared and a Play listing (standard build) is coming soon.

Discussion

Tried the app or have a question? Leave a comment below.