Frequently asked questions

If your question isn't here, email support or open a GitHub issue.

SMS & permissions

Why does PesaTrack need SMS permission?

To detect M-PESA and NCBA transaction SMS the moment they arrive and parse the amount, recipient, and transaction code into an expense — automatically, without you retyping anything. Without the permission the app still works, but you have to enter expenses manually or import them from a PDF statement.

Does PesaTrack read all my SMS?

No. PesaTrack only processes SMS whose sender matches a supported financial sender — currently MPESA and NCBA. Personal SMS from your contacts, promotional messages, OTPs from unrelated services, and any other traffic are ignored at the receiver level and never reach the parser or the database.

What SMS senders are supported?

Currently MPESA and NCBA. More Kenyan banks are on the roadmap — the constraint is that each bank’s SMS format has to be stable enough for the parser to rely on. If your bank isn’t supported yet, you can still import via M-PESA statement or Excel, or add expenses manually.

Can I use PesaTrack without granting SMS permission?

Yes. Skip the permission prompt during onboarding (or deny it later in Android Settings) and you can add expenses manually or import from a PDF/Excel file. You lose real-time detection but the rest of the app — categories, budgets, analytics, backups — works identically.

Privacy & data

Does PesaTrack send my data anywhere?

Your transaction data — the amounts, recipients, categories, budgets, and any notes you type — never leaves the device. It lives in a private Room database in the app’s sandbox and is not synced anywhere.

The app does hold the INTERNET permission, used only for opt-in anonymous usage analytics (Firebase Analytics), which is off by default. If you turn it on, we receive events like “opened Analytics screen” — never the amount, recipient, category name, or note text. See /privacy for the exhaustive list.

Does PesaTrack use any analytics or trackers?

The only telemetry is opt-in anonymous Firebase Analytics — off by default, gated behind a one-time prompt, and toggleable at any time in Settings → Privacy. When it’s on we receive screen-open and feature-use events plus your app version, Android version, device model, and country. When it’s off, nothing goes out.

No ad SDKs. No third-party trackers. No cross-app identifiers.

How do I delete my data?

Two ways. Uninstall removes everything — Android deletes the app’s database and preferences with it. Or Android Settings → Apps → PesaTrack → Storage → Clear data if you want to wipe without uninstalling. There’s no server to contact, no account to close.

Budgets & categories

How does the app auto-categorise my expenses?

Three passes, in order: (1) explicit keyword rules (KeywordRulesEngine) that match common merchants — Uber, KPLC, Naivas, OpenAI, and so on; (2) learned recipient mappings — if you’ve categorised a recipient before, PesaTrack remembers; (3) payment-type heuristics as a fallback. Unmatched expenses land in UNCATEGORIZED and get a low-priority notification so you can tag them when it’s convenient.

Can I customise categories and budgets?

Yes. Add or edit categories from Settings → Categories. Budgets are set per category from the Budgets screen, and you can pick the day your budget month starts on (e.g. the 25th if that’s your payday) so the numbers align with when money actually lands.

What is category 606?

Category 606 is the reserved bucket for transaction fees — M-PESA charges, withdrawal fees, and the like. PesaTrack always breaks these out as separate expenses rather than folding them into the parent transaction. They add up, and pretending they don’t isn’t honest.

Imports

How do I import an M-PESA PDF statement?

Open the M-PESA app → Statement → email yourself the PDF. Open the PDF on your phone, tap Share, pick PesaTrack. The parser reads the statement locally and inserts new rows, skipping any transaction ID it’s seen before. Nothing about the file leaves your device.

Can I import an Excel spreadsheet?

Yes — Settings → Import → Excel. PesaTrack lets you map your spreadsheet’s columns onto the fields it needs (date, amount, description, category). Rows that match an existing M-PESA transaction ID are skipped. If your sheet has a category column, the label mapping step teaches the app what your labels mean.

Troubleshooting

A transaction is missing or wrong — what do I do?

Open the Expenses screen, long-press the row to edit or delete it, or tap the ”+” button to add a missing one. If the SMS wasn’t parsed at all, run Settings → Import → Rescan SMS inbox and PesaTrack will try to re-parse historical messages. If it still can’t parse a recognisable M-PESA or NCBA SMS, please open an issue on GitHub with the SMS format (redact your phone number and code).

New SMS aren't being detected — what's wrong?

Three things to check. (1) In Android Settings, confirm PesaTrack still has SMS permission — some OS updates revoke it. (2) Some manufacturers (Xiaomi, Oppo, Vivo) aggressively kill background receivers; add PesaTrack to your battery whitelist / auto-start allow-list. (3) Confirm the sender is exactly MPESA or NCBA — a bulk-SMS reseller that uses a different sender ID won’t match.

How do I back up and restore my data?

Settings → Backup → Export creates an encrypted archive of your database that you can save to Google Drive, email to yourself, or copy to another device. Restore uses the same file. Because the backup is encrypted with a passphrase you set, only you can open it — and the file only leaves your device if you share it.