The short version
- Kifayat stores your financial records encrypted on your own device.
- If you create an account, your records also sync to your private account on our server, over HTTPS.
- Your transactions, amounts and notes are never sold or shared with anyone, in any form.
- There are no ads inside the app. We do use ordinary analytics — which screens get opened, which features get used — and an advertising ID, to understand the app and to measure which adverts bring people to it. Never what you spend.
- The app reports its own crashes, with your financial details stripped out before they are sent. What that means, exactly.
- You can export everything or delete everything, from inside the app, at any time.
- Kifayat never asks for your bank login and has no connection to any bank.
The rest of this page is the detail behind those seven lines. Where a line draws a distinction — between your money and your taps, between advertising inside the app and advertising for it — the distinction is the point, and the detail below says exactly where it falls.
Who we are
Kifayat ("the app") is published by Devkal ("we", "us"). For anything in this policy, write to support@devkal.com.
What Kifayat collects
1. Account information
Collected only if you choose to create an account:
- Email address — used to sign you in and to send password-reset links.
- Password — stored only as a cryptographic hash by our authentication provider. We never see or store your actual password.
- Display name — whatever you type on your profile.
- Profile photo — optional, and only the single image you pick.
2. The financial information you enter
Everything in this category is typed by you. Kifayat has no access to any bank, card or payment account, and cannot import anything on its own.
- Transactions — amount, date, category, account, type, and your optional note
- Accounts you create — name, type, icon, colour, opening balance
- Budgets and their limits
- Recurring entries such as salary, rent or subscriptions
- Transfers between your own accounts
- Udhaar — money you have lent or borrowed, and the name you type for the person it is with
- Committees (kameti) — the agreement you record, what you have paid in, and when your payout falls
- Gold — the weight and purity of what you hold
A note about the names in udhaar and committees. Those are other people, and you typed them. They are stored the same way as everything else here: encrypted on your device, synced only to your own account, never sold, never shared, and never sent to any analytics or advertising service. Please enter only as much as you need to recognise the person — a first name is usually enough, and the app never asks for anyone's phone number or address.
3. App preferences
- Language, theme, and your notification settings
- Whether the app lock is on
4. Crash reports
When Kifayat crashes or hits an internal error, it sends us a report so the fault can be found and fixed. This is the one thing the app sends that you did not type, and it is worth being precise about.
What a report contains:
- Where in our own code the fault happened — file names and line numbers
- An error label from a fixed list we wrote, such as
local.write_failed - Your device model, operating system version, and the app version
- A random identifier for the app installation, so we can tell "one person hit this fifty times" apart from "fifty people hit it once"
What a report cannot contain:
- Amounts, balances, or any figure from your ledger
- Your notes — not truncated, not partially masked, not present
- Account or category names
- Your email address, display name, or photo
- Anything a database or network error quoted back at us, which is the usual way financial values leak into a crash report elsewhere
That second list is enforced in the app's code rather than promised. A crash report is assembled from a fixed set of safe fields — an error type and a code from a closed list — instead of being assembled from the error text and then filtered. Nothing is sent and later scrubbed, because scrubbing is the part that fails quietly. An automated test fails our build if any error message stops being one of the fixed codes.
The identifier is per installation, not per person. It is not your account, not your email, and not an advertising ID; it is regenerated if you reinstall, and it cannot be connected to your ledger, which never leaves your device unencrypted.
Crash reporting is handled by Firebase Crashlytics, a Google service, acting for us. Reports are not used for advertising, and Google Play requires us to have this working well enough to spot a bad release.
5. How the app is used, and the advertising ID
Kifayat sends us ordinary product analytics, through Firebase Analytics, a Google service. This is the part of the policy most apps leave vague, so here it is exactly.
What is sent:
- Which screen you opened, which feature you used, which step of setup you reached — events with names like
transaction_addedandbudget_created - Plain numbers, yes/no flags, and fixed choices from a list we wrote — for example how many accounts you have, whether the app lock is on, or which of the transaction types you picked
- Your device model, Android version, app version, country and language
- Your Android advertising ID, and which advert or link brought you to the Play Store listing
What can never be sent:
- Any amount, balance or total
- Your notes, merchant names, or the name of anyone in udhaar or a committee
- Names you gave your own accounts or categories
- Any free text of any kind, from anywhere in the app
That second list is a property of the code, not a promise. Analytics values in Kifayat can only be a number, a true/false, or one option from a fixed list — there is physically no way to put a piece of text into one. An automated test fails our build if that stops being true. So "we do not send your spending" is not something we remember to do; it is something the app is unable to do.
The advertising ID is a resettable number Android gives to apps. We use it to measure which adverts actually bring people to Kifayat, and to show the app to people like those who already use it. It is not linked to your ledger and cannot be used to look up anything you have entered. You can reset it, or switch it off entirely, in Android Settings → Privacy → Ads, and the app keeps working exactly as before.
Unlike Supabase and Crashlytics, which handle data purely on our instructions, Google also uses analytics and advertising-ID data for its own purposes. Under Google Play's own rules that counts as sharing, and our Data safety listing says so. We would rather write that here plainly than let you discover it on a form.
6. Where you came from
When you install Kifayat, Google Play tells the app which advert, link or campaign you arrived through. That comes from Play rather than from your phone — nothing about you is sent to get it — and we use it to work out which of our adverts are worth paying for.
What Kifayat does not collect
This list is exhaustive and deliberate. The app contains no code to do any of it:
- No adverts inside the app. No banners, no sponsored rows, no ad network. A money app that sells screen space to a lender has picked a side, and it is not yours
- No selling of your financial data, to anyone, in any form, aggregated or otherwise
- No profile of what you spend, what you earn, or what you owe — the analytics described above carry none of it
- No location data of any kind
- No contacts, calendar, call logs or SMS
- No bank credentials, card numbers, or payment details
- No browsing history
- No access to your photo library — only the one image you hand it through Android's own photo picker
The line we hold is financial data, not telemetry as a category. That is a narrower promise than "we collect nothing", and we make it deliberately, because it is one we can actually keep. Which screens people open tells us where the app confuses them. What you spend tells us nothing we have any business knowing.
Where your data is stored
On your device
Your ledger is held in a SQLCipher-encrypted database on the phone itself. The encryption key is generated on your device the first time you open the app and is kept in the Android Keystore. It never leaves the device, is never transmitted, and we do not have a copy of it.
Android's automatic cloud backup is deliberately disabled for this app, so your ledger is never copied into a Google backup.
On our servers
If you sign in, your records sync to your own account on infrastructure provided by Supabase, Inc., which supplies our database, authentication and file storage. Every request travels over HTTPS; the app refuses to connect to any address that is not HTTPS.
Access is restricted at the database level so that your rows are readable only by your own authenticated account.
Supabase operates data centres in several regions, so your data may be processed outside the country you live in. Supabase acts purely as our processor — it handles the data on our instructions and does not use it for its own purposes.
Who we share it with
Your financial records: nobody. We do not sell them, we do not share them for advertising, and we do not hand them to data brokers. Usage analytics is a different question, and it is answered honestly in the table below rather than buried.
Every outside service that receives anything at all:
| Who | What for | What they get |
|---|---|---|
| Supabase, Inc. | Hosting our database, sign-in and file storage | Your account details and synced records, held on our behalf |
| Google (Firebase Crashlytics) | Telling us when the app crashes, so it can be fixed | Crash diagnostics only — see Crash reports. No ledger data, no account details |
| Google (Firebase Analytics) | Understanding which screens and features people use, and which adverts bring them here | Screen and feature events, numbers and fixed choices, device and country, and your advertising ID — see above. No amounts, no notes, no names |
| Google Play | Telling us which campaign you installed from; showing Play's own "rate this app" card and update prompts | Nothing of yours. These ask Play for something, or ask Play to display something. Play already knows you installed the app — it installed it |
Supabase and Crashlytics are processors — they handle what we send on our instructions and not for their own ends. Supabase stores your ledger on our behalf; Crashlytics is never sent it at all.
Firebase Analytics is not. Google also uses that data for its own purposes, which under Play's rules makes it shared rather than merely collected, and our Data safety listing is filled in that way. What it never receives is your money: no amount, no note, no name, by construction rather than by policy.
That is the whole list. Adding a service to it is a deliberate decision in our codebase, not a dependency upgrade — an automated test fails the build when any new network-reaching library appears, until this list is updated to match. The failure is the point.
We would disclose data if the law genuinely compelled us to — a valid court order, for instance. Nothing else.
Things worth spelling out
Fingerprint and face unlock
If you turn on the app lock, the check is performed entirely by Android. Kifayat receives only a yes-or-no answer. Your fingerprint or face data is never seen, received, or stored by this app, and never leaves your phone.
Notifications
Reminders — a budget running low, a bill due, a weekly summary — are scheduled locally on your device by the app itself. Their contents are never sent to a server, and there is no push-notification service involved.
Exports
PDF and CSV exports are generated on your device and go wherever you choose to send them. Once you share a file, what happens to it is governed by whichever app you shared it with.
Udhaar and committees — other people's names
When you record that someone owes you, you type their name. Kifayat treats that exactly like your own data: encrypted on your device, synced only to your own account, and never sent to analytics, advertising or anyone else. The other person is not contacted, is not told, and has no account here — this is your private record of an arrangement, not a shared one.
Hisaab Share
Sharing a balance builds a short piece of text on your device — a person's name and what the balance is — and hands it to whichever app you pick, or your clipboard. It is not sent to us, and there is no invitation and no shared record. Once it leaves through WhatsApp or anything else, what happens to it is governed by that app.
Gold rates
To value gold holdings the app fetches a current rate from our own server. When the rate it has is more than half a day old, the app first asks our server to refresh it, and the server fetches the price from a public currency feed. Neither request says anything about what you hold. Your weights and valuations stay in your ledger.
Permissions the app requests, and why
| Permission | Why |
|---|---|
INTERNET | Signing in and syncing your data |
ACCESS_NETWORK_STATE | Checking there is a connection before trying to send anything |
POST_NOTIFICATIONS | Showing the reminders you turned on |
RECEIVE_BOOT_COMPLETED | Restoring your scheduled reminders after a restart |
USE_BIOMETRIC, USE_FINGERPRINT | The optional app lock |
VIBRATE | Haptic feedback |
WAKE_LOCK | Letting a scheduled reminder finish waking the phone, and letting a queued report finish sending |
AD_ID | Reading the advertising ID Android gives us, to measure which adverts bring people to Kifayat. Resettable by you in Android Settings → Privacy → Ads |
ACCESS_ADSERVICES_AD_ID, ACCESS_ADSERVICES_ATTRIBUTION | Android's newer, more private way of doing the same advert measurement, used on Android 13 and above |
BIND_GET_INSTALL_REFERRER_SERVICE | Asking Google Play which campaign you installed from |
That is the complete list, read off the built app rather than written from memory. There is one more that never appears in Android's permission screen: a private signature permission the app defines for its own internal messaging, which grants nothing outside Kifayat.
Kifayat requests no location, camera, contacts, calendar, call log, storage or SMS permission. Those are the ones that would let an app reach into the rest of your phone, and none of them is here.
An earlier version of this page said the app refused the advertising ID. That changed in this release, deliberately, and the table above now says so. We would rather correct it in public than leave a flattering sentence standing.
How long we keep it
Your data is kept for as long as your account exists. When you delete your account, it is removed from our live systems straight away and purged from our encrypted backups within 30 days. Data held only on your device disappears the moment you delete it or uninstall the app.
Crash reports and analytics are the exceptions, and we would rather spell that out than have you find it. Neither is attached to your account, so deleting your account does not delete them — there is no link along which to find them.
- Crash reports age out after 90 days. What survives is a stack trace through our own code and a device model.
- Analytics events are held by Google for a limited window set on our account, then deleted. What survives is which screens were opened on some device in some country — never an amount, a note or a name.
You can cut the advertising ID out of this at any time, without leaving the app, in Android Settings → Privacy → Ads. Resetting it makes past events unattributable to your device; deleting it stops one being sent at all.
Your rights
You can, at any time and without asking us:
- See everything the app holds — it is all visible in the app
- Correct anything, by editing it
- Export the lot, as a PDF statement or a CSV file
- Delete your account and all of its data — see below
Depending on where you live you may also have statutory rights of access, rectification, erasure, portability and objection. Write to us and we will honour them.
Deleting your account
In the app: Settings → Data & privacy → Delete everything. This removes your account from our servers first, then wipes the local copy. It cannot be undone.
Already uninstalled the app? Use the account deletion request page.
Children
Kifayat is intended for adults and is not directed at children. We do not knowingly collect data from anyone under 18. If you believe a child has created an account, write to us and we will delete it.
Changes to this policy
If this policy changes, the date at the top of this page changes with it. Anything that materially affects how your data is handled will also be announced in the app before it takes effect.
16 September 2026
A correction to Gold rates. It said the app only reads a rate from our server. The app can now also ask the server to refresh a rate that is more than half a day old, and the server fetches it from a public currency feed. That request carries nothing about what you hold, and nothing else about how your data is handled has changed.
14 September 2026
The honest version of a change we could have described more gently. This release adds usage analytics and the Android advertising ID, so two claims this page used to make are now retired: that the app had no analytics, and that it refused the advertising ID. Both are corrected in place above rather than quietly dropped.
What has not changed is the part that matters: your transactions, amounts, notes and the names in udhaar and committees are still never sold, never shared, and still cannot reach an analytics or advertising service — not because we promise it, but because the code cannot express it.
Also new in this release, and described above: udhaar, committees, gold holdings and Hisaab Share; the permission table has grown accordingly and is now read directly off the built app.
17 August 2026
Added crash reporting, and said so. Until this version the app sent us
nothing at all when it broke, which meant a crash affecting every user on a
particular phone could go unnoticed for weeks. It now sends a crash report
with your financial data stripped out before sending — see
Crash reports for exactly what is and is not in
one. The ACCESS_NETWORK_STATE permission was added for the same
reason. Nothing else about how your data is handled has changed, and no
advertising or usage analytics has been added.
Contact
Questions, requests, or complaints about privacy: support@devkal.com. We aim to reply within 30 days.