Budgetify · Verifiable privacy
An expense tracker with no internet permission — and how to check for yourself
Most budgeting apps ask you to trust a promise. Budgetify asks you to trust
the operating system instead: it ships without Android's INTERNET permission,
so it is incapable of uploading your financial data — not unwilling, incapable.
Below is the complete permission list and four ways to confirm it yourself in under a minute.
An Android app that has not declared android.permission.INTERNET cannot open a
network socket. The kernel refuses it. That makes "your data never leaves your phone" a property
Android enforces, rather than a policy the developer is choosing to honour today.
Why this is different from "offline mode"
Nearly every expense tracker now advertises privacy. Almost all of them do it with a setting — a "private mode" toggle, a "local only" option, an offline-capable sync engine. Those are real features, but they are all decisions made by an app that still holds full network access. The permission is there; the app is choosing not to use it. A future update, a changed business model, or a bug can change that choice without you noticing.
| Approach | Who enforces it | What a bad update could do |
|---|---|---|
| Privacy setting / offline mode | The app's own code | Start uploading; the permission is already granted |
| Promise in a privacy policy | Nobody, technically | Anything the policy is later reworded to allow |
No INTERNET permission |
Android itself | Nothing — it would have to add the permission, which is visible on the store listing |
That last row is the whole argument. If a future version of Budgetify ever wanted to send your
transactions somewhere, it would have to declare INTERNET first — and that change is
public, on the Play listing, before you install it.
The complete permission list
Every permission in the shipping release build, and why it is there. This is the full list, not a selection:
| Permission | What it is for |
|---|---|
RECEIVE_SMS, READ_SMS | Reading bank transaction messages, on the device, to turn them into entries |
POST_NOTIFICATIONS | Telling you when a transaction was logged |
USE_BIOMETRIC, USE_FINGERPRINT | The fingerprint / face app lock |
VIBRATE | Haptic feedback |
WAKE_LOCK, FOREGROUND_SERVICE, RECEIVE_BOOT_COMPLETED | Scheduled background scans, so a message that arrives while the app is closed still gets read |
ACCESS_NETWORK_STATE | Pulled in by the AndroidX WorkManager library. Reads whether a connection exists; it does not grant network access |
ACCESS_NETWORK_STATEis listed here deliberately, because you will find it when you check and we would rather you heard it from us. It is a "normal" Android permission that exposes connectivity status only — it cannot send or receive a single byte. It arrives with WorkManager, the standard library used to schedule the background scans.INTERNET, the permission that would actually allow a network connection, is absent.
Four ways to verify it yourself
- On the Google Play listing (no install needed) Open the app's Play Store page, scroll to About this app, then find App permissions and tap See more. Play generates this list from the uploaded package, not from anything the developer writes.
- On your phone, after installing Settings → Apps → Budgetify → Permissions. Android shows what the app may request.
-
With adb, if you have developer tools
Run
adb shell dumpsys package com.jayrk.budget_trackerand read the requested permissions section. This reads the installed package's manifest directly. -
From the APK itself
aapt dump permissions <file>.apklists every declared permission in the binary you are about to install.
None of these ask you to take our word for anything. That is the point: a claim you can falsify in a minute is worth more than a paragraph of reassurance.
Common questions
If it has no internet, how does the app get updated?
The Google Play Store app downloads and installs updates. It has its own network access; Budgetify does not need any. The same mechanism covers in-app purchases and the Play rating prompt — those run inside Play's own process and reach Budgetify over inter-process communication, never over a socket the app opens.
Then where is my data stored?
In a SQLite database in the app's private storage on your phone, which no other app can read. Nothing is synced, mirrored or backed up anywhere unless you export it yourself. See the Privacy Policy.
How do I move my data to a new phone, then?
Budgetify writes an AES-256 encrypted backup file protected by a passphrase you choose. You move that file however you like — cable, your own cloud drive, anything — and restore it on the new device. The app never handles the transfer, so it never sees where the file goes.
Does it need internet to read my bank SMS?
No. The messages are already on your phone, delivered by your mobile network. Budgetify parses them locally, matching against a built-in list of over 1,600 Indian bank sender IDs. Nothing is sent anywhere to be interpreted — there is no server-side parsing step and no AI service in the loop.
Is Budgetify open source, so I can read the code?
The source is not currently published under an open-source licence, so the permission list is the strongest independent check available. It also happens to be the check that matters most: source code tells you what a build should do, whereas the manifest on your device tells you what this build can do.
Budgetify is a free Android expense tracker for India — automatic bank and UPI SMS tracking, budgets, and analytics, all on-device. Get it on Google Play, or read how offline tracking works.