Last updated: 7 August 2026
Wafra ("the app") is a personal money manager for Android and iOS, published by Naser Khanjar ("we", "us").
Not legal advice. Have a lawyer review this before publishing.
SMS (READ_SMS, RECEIVE_SMS). If permission is granted, Wafra reads bank transaction alerts to extract an amount, merchant, date, card or account tail, direction and any quoted balance. Inbox scanning and parsing happen on the Android device.
Messages that do not look financial are ignored. When the parser cannot confidently understand a bank format, Android may keep a short local excerpt so the user can review or report it. That excerpt is not uploaded automatically and can be deleted in Settings.
Bank-app notifications (optional). If notification access is enabled, Wafra applies the same local processing to bank-app notifications. This is off until the user enables it.
Apple does not give third-party apps access to the SMS inbox. Wafra therefore uses a personal automation that the user creates in Apple's Shortcuts app:
The relay also stores a random device identifier, the device's public key and a SHA-256 hash of the bearer token. It stores no name, email address, phone number, bank login or raw message archive. An inactive device registration is deleted after one year.
If the silent-wake path described below is enabled, the relay additionally stores that device's Apple push token, encrypted at rest, alongside the Expo project it belongs to and an expiry date. The token is a delivery address for push notifications and nothing else — it carries no transaction data and is deleted with the device registration.
Shortcuts can send an alert while Wafra is closed. After the first unlock following a restart, iOS may wake Wafra silently and stage the sealed, structured transaction in a separate encrypted inbox. The protected main ledger incorporates it on foreground. APNs background delivery is best-effort, and Apple pauses silent wakes after the user force-quits Wafra until the next open, so Wafra does not promise a background update at an exact time.
Private Mode disables this relay path. Because iOS has no local SMS-inbox API, automatic SMS capture is unavailable on iPhone while Private Mode is on.
Transactions, accounts, cards, budgets, bills, goals and settings are stored in the app's private encrypted storage. The iPhone relay private key and foreground credentials are stored with iOS Keychain through Expo SecureStore. A least-privilege sync credential and separate SQLCipher inbox key are available only after the first unlock; neither contains the Shortcut ingest token or email-forwarding token.
iOS Keychain items can survive an uninstall. To erase the relay registration and its local key deterministically, use Settings → Erase all data while online before uninstalling. If the relay cannot be reached, Wafra keeps the key so the user can retry deleting the remote registration.
If app lock is enabled, Wafra asks the operating system to authenticate with the enrolled face, fingerprint or device credential. The operating system performs that check and returns success or failure. Wafra does not receive or store biometric templates.
Wafra does not include advertising, third-party analytics or crash reporting.
Wafra extracts transaction fields and suggests a merchant and category. These labels are visible only to the user, have no legal or financial effect and can be corrected. Wafra does not use bank alerts for advertising, credit decisions or training a server-side model.
Network traffic to the iPhone relay uses HTTPS. Queued structured rows use X25519, HKDF-SHA-256 and AES-256-GCM so the relay cannot decrypt them after sealing. Bearer tokens are stored by the relay only as SHA-256 hashes.
No system is risk-free. A relay security incident could expose transient raw text while a request is being processed, sealed queue data, public keys and token hashes. It should not expose a stored raw-message archive because no such archive exists.
The iPhone relay is hosted on Cloudflare Workers and D1, with Cloudflare, Inc. acting as processor. Naser Khanjar is the entity responsible for that processing.
Workers execute at Cloudflare edge locations worldwide, and the D1 database has a primary region fixed when it was created. Processing therefore may occur outside the user's own country. What crosses the network is one bank alert at a time; what is retained is a sealed structured row the relay cannot decrypt.
Android sends nothing to the relay and no Android data leaves the device, so none of this applies to the Android build.
The user can:
Acknowledged relay rows are deleted immediately. Unacknowledged structured rows expire within 30 days. A disconnected device registration is deleted immediately; an abandoned one expires after one year.
Exported files remain wherever the user saved or shared them and must be deleted there separately.
Wafra is not directed at children and is not intended for anyone under 13.
If this policy changes, the date at the top changes with it. Material changes will be surfaced in the app.
khanjer496@gmail.com