Skip the intro
SpendPot

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

  1. Allowlist filter
  2. Persist raw
  3. Exclusion scan
  4. Rule pack
  5. Merchant normalisation
  6. Confidence score
  7. Deduplication
  8. 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
Committed automaticallyScore 80 or above. It appears in your ledger without asking you anything.

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

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 policy

07 / 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.

Get it on Google Play

Android 8.0 and up · Free · No account

  1. 01

    Install it

    SpendPot is one download from Google Play. No sign-up, no email, nothing to verify.

  2. 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.

  3. 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.