Offline-first · Android
Your spending,
without the typing.
Your banking apps already announce every rupee that moves. SpendPot reads those alerts on your phone, turns them into a categorised ledger, and shows you where the money actually went — with no account, and no way to send any of it anywhere.
- No internet permission
- No account, no cloud
- Android 8.0 and up
01 / The problem
You know what you earn.
You have no idea where it goes.
The data is already on your phone. Every UPI payment, card swipe, ATM withdrawal, salary credit and EMI debit arrives as a message you have already been sent — sitting in your inbox, unstructured and unusable.
Manual entry apps
Abandoned in two to three weeks
Logging every coffee is a second job. The app survives exactly as long as the enthusiasm does.
Account aggregators
Want your bank credentials
They ask for a login or a consent flow before they show you anything. Most people close the tab, and they are right to.
Cloud auto-trackers
Your history lives on their server
They read the same messages SpendPot does — and then upload the results. Every rupee you have ever spent, on someone else’s machine.
SpendPot takes the fourth option: read the messages, keep the answers, and never have the ability to send them anywhere.
02 / The ledger
A month, answered
in one screen.
The dashboard opens on the single figure you came to check, then explains it: what you received, what is left, which categories moved, and what is still waiting for you to confirm.
Total spent · August 2026
₹48,240
₹6,180 less than last month (down 11%)
- Received
- ₹62,500
- Left over
- ₹14,260
- Savings rate
- 23%
Top categories
- Rent₹18,00037%
- Food & Dining₹9,46020%
- Groceries₹6,24013%
- Transport₹4,1809%
- Subscriptions₹2,8906%
- Shopping₹2,3405%
What came in
Salary, refunds, cashback, money from people — separated from spend, not netted against it.
What went out
Twenty categories out of the box, sub-categories one level deep, and any of your own.
What is left
Left over, or short by. Plus a savings rate, and what the month before looked like.
How it moved
Trends over six and twelve months, top merchants, and which day of the week costs you most.
03 / The engine
Eight steps between a bank alert and a number you can trust.
Every alert below is taken verbatim from SpendPot’s own parser corpus — the labelled set that was written before the rules, so it could not be tuned to them. Two of them are meant to be thrown away.
Incoming
Pipeline
- Allowlist filter
- Persist raw
- Exclusion scan
- Rule pack
- Merchant normalisation
- Confidence score
- Deduplication
- Categorisation
The posting app is checked natively first, against a bundled list of bank, wallet and UPI packages. A notification from anything else is dropped before it is read, let alone stored.
- amount
- ₹499.00
- direction
- DEBIT
- merchant
- Swiggy
- instrument
- Bank account ••1234
- category
- Food & Dining
- reference
- 123456789012
Confidence
0
- App on allowlist+30
- Amount extracted+25
- Direction determined+20
- Last-4 matched to an account+15
- Merchant extracted+10
When a bank changes the wording of its alerts, the score drops and the transaction lands in the review queue instead of disappearing. Confirming it once writes a local rule, and the next alert like it parses on its own.
04 / The pot
What is left over
stops being a surprise.
Every month SpendPot computes the same three numbers the same way: what came in, what actually moved, and what stayed. Transfers between two of your own accounts are detected and excluded, so moving money to savings never reads as spending it.
Kept this month
₹14,260
23% of ₹62,500 received
Drag the pot to turn it
Six months
- Mar
- Apr
- May
- Jun
- Jul
- Aug
KeptSpent
Illustrative figures. On your phone these come from your own messages, and nothing about them is ever sent anywhere.
05 / What it does
Nine things it does, and nothing it pretends to.
Every item here is built and shipping. The requirement each one answers is printed beside it, because a feature list is only worth reading if it can be checked.
The notification listener
Your banking, wallet and UPI apps already post a notification for every payment. SpendPot reads those, and only those: the allowlist of packages is fixed and bundled, and only a notification’s title, text and expanded text ever cross into the app — everything else is discarded natively, before any code that could store it runs.
You grant it, once
You turn it on once in Android’s own Notification Access settings. SpendPot deep-links you there and detects when you come back; it can never grant itself the access.
- PRD §5.1
Capture that never asks you to type
A notification listener reads alerts from a fixed allowlist of bank, wallet and UPI apps the moment they arrive, and deduplicates the ones that get announced twice.
- RQ-1 … RQ-4
A review queue instead of silent mistakes
A parse it is unsure of is held, shown beside the alert it came from, and never counted in a total until you confirm it. Confirming teaches it the source.
- PRD §5.8, F-3
Every correction becomes a rule
Rename a merchant or move a category once and SpendPot writes a local override that outranks anything bundled — and offers to apply it to the transactions you already have.
- AC-1 … AC-10
Accounts and cards it finds by itself
Instruments are discovered from the last-4 digits in your messages. Credit cards carry a billing cycle, outstanding and utilisation; transfers between two of your own accounts are detected and excluded from spend.
- BG-1 … BG-8
Budgets that follow your salary date
Per category or overall, monthly or weekly, with a custom cycle start day. Thresholds at 50, 80 and 100 percent fire as local notifications the moment ingestion crosses them.
- RC-1 … RC-8
Subscriptions you had forgotten about
Repeating charges are detected from interval clustering and amount variance, with the next expected date, the total paid so far, and a flag when the price moves more than ten percent.
- RP-1 … RP-9
Reports, and insights that stay quiet
Savings rate, month-over-month category deltas, six and twelve month trends, top merchants, day-of-week patterns — plus insight cards that only appear when something genuinely changed.
- SC-1 … SC-9
Encrypted at rest, locked on your terms
SQLCipher with a 256-bit key wrapped by Android’s hardware keystore, a PIN with optional biometric unlock, configurable auto-lock, and FLAG_SECURE so the app switcher shows nothing.
- BK-1 … BK-6
Your data, in formats you own
An encrypted local backup with its own passphrase, CSV export with column selection, a PDF monthly statement, and CSV import for migrating in.
All of it works with the phone in aeroplane mode.
There is no step where SpendPot needs a network, because there is no step where it could use one.
06 / The guarantee
It cannot phone home.
The release build ships without android.permission.INTERNET. There is no account, no sync and no server, because there is no socket to open one with. This is not a policy you have to trust — it is a capability the binary does not have.
No internet permission
Omitted from the release manifest entirely. It costs the app OTA updates and crash reporting; both were traded away on purpose.
No account, no cloud
Nothing to sign up for. Your ledger exists on exactly one device.
Only banking apps are listened to
The package allowlist is fixed and bundled. Notifications from every other app on your phone — messages, mail, anything — are dropped natively without being read.
Android Auto Backup is disabled
Left on, it would quietly copy the database to Google Drive. The manifest sets allowBackup to false.
Every permission is listed in the app
Settings → Privacy names each one and what it accesses, including the two inherited from Android support libraries.
Deleting means deleting
Erase all data destroys the encryption key with it. There is no copy anywhere else.
Check it yourself
npm run verify:no-internet
Reads the merged release manifest (or a built APK) and fails on INTERNET, ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE, WAKE_LOCK, RECORD_AUDIO, SYSTEM_ALERT_WINDOW or c2dm.RECEIVE — and on Android Auto Backup being enabled.
npm run verify:deps
Audits every dependency, transitive ones included, for network capability. A package that can open a socket cannot enter the build.
The cost of this is real and worth naming: no over-the-air updates, and no crash reporting. Fixes ship as a new build, and crashes are written to a local log you can read in Settings → Diagnostics.
Read the full privacy policy07 / Inside the app
Five screens, doing the work.
DB-1 … DB-8
The one figure you opened the app for
Total spent for the month, what it was last month, what came in, and what is left — then the categories, the budgets and anything waiting to be reviewed.
Rendered live from the app’s own tokens and copy. Figures are illustrative.
08 / Get it
Put your money
on the map.
Turn on notification access once, and every alert your banking apps post becomes a line in your ledger — without you typing anything, and without any of it leaving your phone.
Android 8.0 and up · Free · No account
- 01
Install it
SpendPot is one download from Google Play. No sign-up, no email, nothing to verify.
- 02
Allow notification access
Android asks in its own settings screen, not inside the app. You see exactly what is granted, and you can revoke it in the same place.
- 03
Spend as normal
Every alert your banking apps post becomes a categorised line. Anything the parser is unsure of waits for you rather than guessing.