Spent Money collects nothing, and your expenses never leave your device.

No server of ours. No account system. No cloud sync.

No ads

There is no advertising anywhere in the app and no ad network inside it. No tracking permission is ever requested, and your device advertising identifier is never read.

No account

Nothing to sign up for - open the app and start typing.

No analytics of our own

No analytics or telemetry SDK watches what you do in the app, and there is no advertising SDK either - the app carries no ads at all. Purchases go through RevenueCat, which sees your subscription status and an anonymous install ID, never your expenses.

When the app goes online

Only to check your purchase through RevenueCat, which confirms it with the app store, to fetch today’s exchange rate when an expense is in another currency, and to ask the App Store at launch whether a newer version is out. The rate request carries a currency code and nothing else; the version check carries only the app’s own identifier.

No runtime permissions

Never asks for your camera, contacts, location, or microphone - not even vibration, which Android grants automatically without ever prompting.

You control what leaves

The only way data leaves your phone is if you export a backup yourself and choose where to send it. With Pro, that file is encrypted with a password only you know.

Where your data actually lives

Every number you enter is written to a SQLite database on your own device - nothing more.

Your phone

SQLite database

Backup file - only if you export one

If you delete the app, that data is gone - which is exactly why backup and restore exists, not as a bolt-on feature but as a direct consequence of being local-only.

App lock

An optional 6-digit PIN, required on launch and whenever the app is backgrounded - it re-locks automatically.

The PIN is never stored as plaintext. Only a scrypt hash with its own random salt is kept - deliberately slow and memory-hard, so guessing it stays expensive even for someone holding the database.

PIN-only, so unlocking your budget never asks for a Face ID / Touch ID permission grant either.

Backup & restore, on your terms

Export everything to a single JSON file you control - save it, email it to yourself, put it wherever you like. Pro adds “Protect with password”, which is on by default once you have it.

Restore that file on any device - the app spots an encrypted backup and asks for the password. It’s manual, not automatic cloud sync - the same “no server” choice, applied consistently.

AES-256-GCM, not just a password box

The file is sealed with AES-256-GCM under a key stretched from your password with scrypt, with a fresh random salt and nonce each time. GCM is authenticated: a wrong password, a flipped byte or a truncated file simply fails to open, instead of quietly restoring damaged records into your real data.

The password is yours alone

The key comes from you, never from the app - a key shipped inside the app could be extracted once and open everyone’s files. So there is no master password and no recovery: forget yours and that file can never be opened again. That is why the field has a reveal toggle - the password is typed once and never confirmed, so seeing it is the safeguard.

A note on the source

This is a personal project, and the app is closed-source - proprietary, © 2026 Samvel Sargsyan, all rights reserved. Being privacy-first here is a design commitment, not an open-source audit guarantee. What is true and checkable: your expenses live only in a local database on your device, no accounts exist to store them against, and there is no server of ours for them to go to. The app uses the network for exactly three things: checking your purchase through RevenueCat, which confirms it with the app store and keeps your subscription status against an anonymous install ID; asking the App Store at launch whether a newer version has been published, which sends only the app’s own identifier; and fetching today’s exchange rate when you save an expense in a currency other than your main one - a request that carries only a currency code, never an amount, a note, or a category.