1. Introduction
This Privacy Policy explains how Odit ("the Service") collects, uses, stores, and
safeguards your information, with particular attention to the SMS banking data that
powers the Service. If you do not agree with this policy, please do not use the Service.
2. Information We Collect
2.1 Account Information
When you create an account, we collect:
- Name and email address;
- Account credentials (passwords are hashed and never stored in plain text);
- Social login profile data (if you sign up via Google or GitHub);
- Your consent status and timestamps for these Terms and Privacy Policy.
2.2 SMS Data
The core of the Service involves reading SMS messages from your Android device and
syncing them to our servers. The app applies on-device filtering before any data is
transmitted, so personal messages never leave your phone (see Section 3). Syncing
happens automatically — both in real time as new messages arrive and via a
recurring background worker — and you can preview and deselect individual senders
before each upload. For each synced message, we collect:
- Raw message content: The full text body of each SMS;
- Message metadata: Sender address (phone number or short code), contact name, timestamp, message direction, thread ID, and read status;
- Extracted financial data: For messages from recognized banking addresses only — transaction type, amounts, fees, balances, currency, and sender/receiver identifiers parsed from the message.
Important: Messages from Ethiopian phone numbers (09/07/+251 prefixes)
are always excluded on-device and never transmitted to our servers. Only messages from
non-personal sources — such as bank short codes, service alerts, and institutional
senders — are synced. Only messages from recognized banking addresses are processed
for financial data extraction on our servers.
2.3 Device Information
When you connect a device, we collect:
- A unique device identifier (UUID generated by the app, not your hardware ID);
- Device name (as you label it);
- The association timestamp.
2.4 Automatically Collected Information
When you access the web dashboard, we may collect:
- IP address, browser type, and pages visited;
- Device information (operating system, screen size);
- Session cookies for authentication.
2.5 Receipt Images (Optional)
The Android app includes an optional receipt scanner that uses your device camera to
capture paper receipts. Text recognition runs on-device using Google ML Kit; the
recognized text never leaves your phone unless you proceed to AI-assisted
categorization.
If your plan includes AI receipt extraction, choosing to extract a captured receipt
uploads the receipt image and its on-device OCR text to our servers for parsing
(amount, merchant, line items, suggested category). Receipt extraction is a
per-capture user action; receipts are never uploaded automatically. On the free
plan, captured receipts remain entirely on-device.
3. SMS Filtering — Privacy by Default
The Odit Android app applies strict on-device filtering before any SMS data is
transmitted to our servers. Personal messages never leave your phone.
3.1 What Is Excluded
Messages from Ethiopian phone numbers are always excluded from the sync. Messages from senders matching the following patterns are
filtered out on-device and never leave your phone:
- Numbers starting with 09 or 07 (Ethiopian mobile prefixes);
- Numbers starting with +251 (Ethiopia country code, including +25109 and +25107).
In addition to personal numbers, the following are always discarded on-device before
any upload:
- Drafts, outbox, failed, and queued messages — only delivered inbound and sent messages are eligible;
- Group conversations — any thread ID with more than one recipient is excluded entirely;
- Concatenated recipient blobs — digit-only sender fields longer than a valid international phone number, which some Android OEMs leak into the SMS table from group MMS.
This means only messages from non-personal sources — such as bank short codes,
service alerts, and institutional senders — are synced. Personal SMS conversations
between Ethiopian phone numbers never reach our servers.
3.2 What Is Synced
Only messages from non-personal senders pass through the filter. This includes:
- Messages from banking short codes (e.g. CBE, Telebirr, BOA, Awash Bank, Dashen Bank, Zemen Bank);
- Messages from service providers and institutional senders;
- System notifications and alerts from non-phone-number addresses.
Of the synced messages, only those from recognized banking addresses are processed
for financial data extraction. All other synced messages are stored but not parsed.
Before each sync, the app shows you a preview of which senders it intends to upload
and lets you deselect individual senders. Deselected senders are excluded from the
upload alongside the on-device filters above; this choice is remembered for future
syncs.
3.3 Trade-off
If a banking institution sends messages from a standard Ethiopian phone number
rather than a short code, those messages will be excluded by the filter and will
not appear in your dashboard. This is an intentional privacy-first design choice.
3.4 Android Permissions Used
The Odit Android app declares the following permissions. Most are requested at
install time; the asterisked ones require a runtime prompt that you must approve:
- READ_SMS*: read inbox messages for parsing and sync (subject to the filters in this Section);
- READ_CONTACTS*: resolve a sender phone number to a display name so transactions show recognizable counterparties — looked up per-sender, never bulk-uploaded;
- POST_NOTIFICATIONS* (Android 13+): show sync status, new-transaction summaries, and recurring-payment reminders;
- CAMERA*: capture receipts in the optional receipt scanner (see §2.5);
- USE_BIOMETRIC: back the optional biometric app lock (see Section 6);
- INTERNET, ACCESS_NETWORK_STATE: communicate with the Odit API and check connectivity before sync;
- FOREGROUND_SERVICE, FOREGROUND_SERVICE_DATA_SYNC: run the upload worker reliably while the user is aware of it;
- RECEIVE_BOOT_COMPLETED: re-arm the recurring background sync after device reboot.
4. How We Use Your Information
We use the information we collect to:
- Parse and extract financial transaction data from your banking SMS;
- Detect and categorize transactions, identify wallets, and track balances;
- Provide the web dashboard, analytics, and financial insights;
- Deduplicate messages across device resyncs and device changes;
- Improve our SMS parsing patterns and accuracy;
- Send technical notices, updates, and support messages;
- Detect, prevent, and address technical issues and security incidents;
- Comply with legal obligations.
5. Sharing of Your Information
5.1 We Do Not Sell Your Data
We do not sell, rent, or trade your personal information or SMS data to third parties.
5.2 Third-Party Service Providers
We use the following named third-party processors to operate the Service. Each
processor receives only the data described and is contractually or by terms-of-use
bound to use it solely for the stated purpose:
- Firebase Crashlytics (Google): receives Android crash reports —
stack traces, app/OS version, and device model. Crash payloads do not include
SMS content, financial data, or your message body.
- Firebase Analytics (Google): receives anonymous Android usage
events (screens visited, feature taps). The Android advertising ID is explicitly
stripped from the manifest. No SMS content or extracted financial data is
forwarded to Analytics.
- Axiom: receives server-side application logs for debugging and
operational telemetry. Logs are scrubbed of message bodies and extracted
financial details and contain only operational signals (request paths, latency,
error codes).
- Telegram (operator alerts): when an account-deletion event
occurs we post a short alert to an internal Telegram channel containing the
triggering user's email, session IP, and request context. This is used only to
detect abuse and verify completed deletions.
- Cloud hosting and CDN providers: the web dashboard, API, and
database are hosted on commercial cloud infrastructure. These providers process
data in transit and at rest under standard cloud-provider terms.
- Google and GitHub: if you choose social login, the respective
provider authenticates you and returns the profile data listed in Section 2.1.
5.3 Legal Requirements
We may disclose your information if required by law or in response to valid legal
process (e.g. a court order or government agency request).
5.4 Business Transfers
If Odit is involved in a merger, acquisition, or sale of assets, your information may
be transferred. We will notify you before your information becomes subject to a
different privacy policy.
6. Data Security
We implement technical and organizational security measures to protect your data,
including:
- Encrypted data transmission (TLS) between your device and our servers;
- Hashed and salted password storage;
- Access controls and authentication on all API endpoints;
- Rate limiting and abuse detection;
- Optional biometric app lock on the Android app — when enabled,
unlocking the app requires fingerprint or device biometric authentication. This
gates access to the locally cached SMS preview and dashboard data; it does not
affect server-side authentication.
However, no method of electronic transmission or storage is 100% secure. While we
strive to protect your information, we cannot guarantee absolute security.
7. Data Retention
We retain your data for as long as your account is active. Specifically:
- Account data: Retained until you delete your account;
- SMS data: Only non-personal messages (those not filtered out by the rules in Section 3) and their extracted financial data are stored, retained until you delete your account;
- Session cookies: Retained for the duration of the session, up to 90 days;
- Operational telemetry and logs: Server logs (held in Axiom) and
mobile crash reports (held in Firebase Crashlytics) are retained for up to 90
days for debugging and security purposes. These contain operational signals
(request paths, latency, error codes, stack traces) — not message bodies, not
extracted financial data, and not contact information.
When you request account deletion (in the Android app or on the web dashboard),
your account is scheduled for deletion with a 30-day grace
period. During the grace period:
- Your sessions are signed out and the account is unreachable from any client;
- Your data remains intact on our servers but is not processed for new syncs;
- Signing back in with the same credentials cancels the pending deletion and restores access automatically — no support request required.
After 30 days, a daily purge job hard-deletes the account row,
every device owned by it, all synced SMS data (parsed messages, raw export
batches, extracted financial data), wallets, participants, goals, recurring
transactions, manual entries, categories, category rules, notifications, and
authentication sessions. Anonymous, scrubbed telemetry already emitted to
third-party log processors persists for the remainder of their retention window
described above, after which it is purged automatically.
8. Your Privacy Rights
You have the right to:
- Access: Request a copy of the personal and financial data we hold about you;
- Correction: Request correction of inaccurate information;
- Deletion: Request deletion of your account and all associated data;
- Data scope: Personal messages are always filtered on-device and never reach our servers;
- Portability: Request export of your data in a standard format;
- Withdraw consent: Stop using the Service and request account deletion at any time.
To exercise these rights, please contact us through our support channels.
9. Cookies and Tracking
We use session cookies for authentication and user preferences. We may use analytics
tools to understand how the Service is used. You can configure your browser to refuse
cookies, though some features of the Service may not function properly without them.
10. Third-Party Links
The Service may contain links to third-party websites. We have no control over and
assume no responsibility for the content or privacy practices of those sites.
11. Children's Privacy
The Service is not intended for children under 13. We do not knowingly collect
information from children under 13. If you become aware that a child has provided us
with personal information, please contact us.
12. International Data Transfers
Your information may be transferred to and stored on servers outside your country of
residence. We take reasonable steps to ensure your data is treated securely and in
accordance with this policy regardless of where it is processed.
13. Changes to This Privacy Policy
We may update this policy from time to time. When we make material changes, we will
notify you through the Service and update the "Last updated" date. Material changes
to how your SMS data is handled will require you to re-accept the updated policy
before continuing to use the Service.
14. Contact Us
If you have any questions about this Privacy Policy, please contact us through our
support channels.