Budgetify

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.

The short answer

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.

ApproachWho enforces itWhat 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:

PermissionWhat it is for
RECEIVE_SMS, READ_SMSReading bank transaction messages, on the device, to turn them into entries
POST_NOTIFICATIONSTelling you when a transaction was logged
USE_BIOMETRIC, USE_FINGERPRINTThe fingerprint / face app lock
VIBRATEHaptic feedback
WAKE_LOCK, FOREGROUND_SERVICE, RECEIVE_BOOT_COMPLETEDScheduled background scans, so a message that arrives while the app is closed still gets read
ACCESS_NETWORK_STATEPulled in by the AndroidX WorkManager library. Reads whether a connection exists; it does not grant network access

ACCESS_NETWORK_STATE is 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

  1. 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.
  2. On your phone, after installing Settings → Apps → Budgetify → Permissions. Android shows what the app may request.
  3. With adb, if you have developer tools Run adb shell dumpsys package com.jayrk.budget_tracker and read the requested permissions section. This reads the installed package's manifest directly.
  4. From the APK itself aapt dump permissions <file>.apk lists 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.

Try it

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.