Skip to content

Repository files navigation

Spentd

CI License: MIT PRs Welcome

Privacy-first Android expense tracker. Import PhonePe / GPay / bank payment screenshots and bank SMS. Your data stays on your phone — no cloud account, no server required.

Download APK


Get the app

  1. Download the latest APK from Releases.
  2. On your phone, open the file and allow Install unknown apps if Android asks.
  3. Open Spentd → create a username and 6-digit passcode.

If Play Protect blocks the install

Spentd requests SMS permission so it can read payment alerts. Apps outside the Play Store often trigger a warning:

  • Choose More details → Install anyway when offered, or
  • Temporarily turn off Scan apps with Play Protect, install, then turn it back on.

First-time setup

Goal What to do
Unlock later Enter your 6-digit passcode (username is remembered)
Import bank SMS Grant SMS when asked, or turn on SMS auto-import in Settings
Import a screenshot Import → pick a payment screenshot
Forgot passcode On the lock screen → recovery → unlock with phone lock / biometrics → set a new PIN or wipe data

Features

  • On-device only — expenses live in an encrypted vault on your phone; works offline
  • Screenshot import — OCR for UPI / bank payment screenshots
  • SMS import — parse bank and UPI alerts (with review before saving)
  • Search & filters — find expenses by merchant, amount, category, source, date
  • Smart categories — optional server inference (spentd-api) plus on-device rules; when you fix a category, Spentd remembers it for that merchant
  • Payment notifications — after auto-import, confirm the guessed category with Yes or open the app to pick another
  • Budgets & cash — monthly limits and cash / account balances
  • Export — share history as CSV or JSON
  • Themes — system, light, or dark

Privacy in short

  • Passcode unlocks a local vault; the PIN is not stored in plain text
  • No cloud login — there is nothing to “reset password” for remotely
  • Screenshots and SMS stay on the device
  • Leaving the app locks it again (so others can’t open your ledger)

Run from source

Need: Node.js 20+, and an Android phone or emulator.

git clone https://github.com/srineshr1/Paymenttracker.git
cd Paymenttracker
npm install
npm run build -w @paymenttracker/shared
npm run mobile

Then press a for an emulator, or scan the QR with Expo Go.

Expo Go limits: no SMS inbox, slower screenshot OCR. Full SMS + fast OCR need a native build (below).

Full features (native Android build)

npm run mobile:android
# or:
cd apps/mobile && npx expo run:android

This builds Spentd as a real app on the device/emulator (SMS + ML Kit work).

Project layout

apps/mobile       Spentd (Expo / React Native) — local-first app
packages/shared   Shared types + payment / SMS parsers

There is no backend in this repository. The optional sync API lives separately at
~/Projects/spentd-api (not required for the app).

More detail for contributors: CONTRIBUTING.md.


FAQ

Does this send my expenses to a server?
No. The shipped app stores everything on the device.

Why does it need SMS permission?
Only to read payment-related messages you choose to import. You can use screenshots or manual entry without SMS.

Can I use it without installing the APK?
You can run the JS app in Expo Go for a limited demo, but SMS import will not work. Prefer the release APK.

Is there a cloud API?
An optional server lives at ~/Projects/spentd-api. The app can call POST /categories/infer for category suggestions when EXPO_PUBLIC_API_URL is set; expenses and passcodes stay on-device. Without the URL, categorization uses the same rules offline.

I want to contribute
See CONTRIBUTING.md, Code of Conduct, and Security. Changelog: CHANGELOG.md.


License

MIT © 2026 Srinesh R

About

Spentd — privacy-first Android expense tracker. Import bank SMS, username+passcode auth, optional cloud sync.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages