Privacy Policy for Full Frills Balance
Effective date: November 12, 2026 · Last updated: November 12, 2026
The short version
- Your financial records are stored on your device. We don't store them on our servers.
- No bank logins, no required app account, or app-provided online sync. If device backup is enabled, Apple or Android may back up app data.
- SMS import is optional, Android-only, and parsed on your device. Transaction SMS you capture are kept on your phone until you clear app data, reset, or uninstall.
- Gmail is optional. Google's
gmail.readonlypermission can read messages across your mailbox; Full Frills Balance checks only new Inbox messages on your device. Unmatched messages and full message bodies are not retained. Selected details from matches stay on your device until you reset or clear app data. The app does not add a separate encryption layer to its local database; its optional App Lock gates access using your device authentication. Exported ZIP backups are not encrypted. - We do not intentionally send Gmail content, amounts, balances, merchant names, SMS text or your notes in analytics or crash reports. Analytics is on in release builds and there is currently no in-app switch to turn it off.
- Voice entry is optional. Your phone's speech-recognition service turns speech into text and, depending on your phone, may process the audio online.
- If device backup is on, Apple or Android may back up the app's data to your iCloud or Google account.
- Backup files you export are not encrypted by the app and can include original SMS text, so keep them somewhere safe.
What changed on November 12, 2026
This update makes the Gmail data-protection safeguards and retention and deletion rules explicit, including the local database's lack of separate app-level encryption and the unencrypted nature of exported backups. The homepage now describes optional Gmail transaction capture and its broad read-only permission. The November 9 update's Gmail access and use disclosures and the October 16 update's SMS, voice, analytics, backup and website disclosures remain in force.
1. Overview
Full Frills Balance is designed primarily as an offline personal money management application. It does not connect to bank accounts; financial records are based on information you enter, SMS messages you choose to import, files you choose to import, or transaction emails you choose to connect.
Your financial records are stored on your device and are not uploaded to our servers. Data does leave your device for the purposes described in this policy: Google sign-in and Gmail API requests if you connect Gmail (section 4), allowlisted analytics and crash reports (section 6), voice entry through your phone's speech service (section 5), exchange-rate and update-check requests (section 7), and Apple or Android device backup if you have it turned on (section 8). Section 10 lists everyone who may receive data.
2. Financial Data Stored Locally
The following data is stored on your device:
- income and expense entries, including planned (future-dated) entries
- balances
- journals
- account names
- categories and budgets
- transaction descriptions
- imported transaction records, including retained transaction SMS (section 3) and selected details from matched Gmail messages (section 4)
- rule-based tagging preferences
We do not store this financial data on our own servers.
The app may also store the version of this Privacy Policy you acknowledged and the acknowledgement time. That local record is the app's acknowledgement state and remains on your device. If product analytics is enabled, the app may send a best-effort pseudonymous acknowledgement event to PostHog with the policy version as its event-specific data, alongside the standard analytics and device context described below. This telemetry is not a signed legal record. It does not send the policy text, a signature, or your financial records.
3. SMS Access and Transaction Import
On Android, Full Frills Balance may request SMS permissions to check messages for transaction details. Automatic SMS import is optional and starts only after you enable it in Settings.
SMS access is used only to:
- scan your inbox when you manually start an import
- read incoming SMS messages while automatic import is enabled
- detect whether a message is transaction-related
- extract transaction details such as amount, sender, and transaction type
- create transaction entries inside the app
How automatic import works
Everything below happens on your phone:
- The first time you turn on automatic import, the app scans up to 50 recent inbox messages as a catch-up.
- While it's on, the app checks every incoming SMS to see whether it's a transaction, including messages it then ignores.
- Android may start a short background task when an SMS arrives, even if the app isn't open.
- The app also checks for missed messages when it starts and when you return to it. If Android restricts or force-stops the app, it catches up when it can run again.
- Matching messages go to the SMS review flow, and may be auto-posted under rules you set up.
- Turning automatic import off stops processing new arrivals.
What is kept on your device
For transaction messages the app captures:
- The sender and original message text are kept on your phone, including after you review, dismiss, import or auto-post them. Journal details can show the original SMS so you can check the entry against it.
- New captures keep one copy in the shared device inbox; each workplace's records point to it rather than copying the text. Older records may still hold their own copy.
- Imported entries also keep extracted details (amount, currency, merchant, reference number) and a one-way fingerprint used to avoid duplicates.
- Privacy maintenance hashes older duplicate-check identities and strips raw SMS fields from automatic audit records. It does not erase kept source messages or notes you wrote.
- New SMS imports never copy the raw message into journal notes, audit fields or analytics.
- Kept SMS text has no automatic expiry. Importing, auto-posting, dismissing or turning off automatic import doesn't delete it. It stays until you clear app data, use Factory Reset, or uninstall the app.
- Privacy Mode hides the original SMS text in journal details. SMS rules may keep the conditions you chose.
SMS review notifications
SMS review notifications are optional and scheduled locally on your device. Their enablement and detail-preview settings apply to this device and are not included in exported backups. By default they contain a generic review prompt. You can choose detailed previews with extracted transaction information; the app hides these details while Privacy Mode or app lock is enabled. Notification routing uses local inbox and workplace identifiers rather than raw SMS content. The pending inbox is shared on the device; posting, dismissing, and rule decisions belong to each workplace (a separate set of books in the app).
SMS permissions are optional, and the app remains usable without granting SMS access or enabling automatic import. Automatic import requires Android's SMS read and receive permissions. We do not intentionally upload full SMS content, sender details, or message bodies to external servers.
4. Gmail Access and Transaction Email Import
On supported iOS and Android devices, you may connect a Google account and grant Full Frills Balance the Google gmail.readonly permission. This permission can read messages across your Gmail mailbox, not only transaction emails. The app's capture search is limited to Inbox messages received after you connect it to a Workplace, and it may inspect unrelated Inbox messages on your device while matching. Google does not offer a read-only permission limited to transaction emails. Connecting Gmail is optional. Ordinary local use does not require it. Automatic transaction capture and background Gmail checks on supported devices are separate optional settings.
When Gmail is connected, the app checks Inbox messages received after you connect Gmail for a Workplace. It may inspect messages unrelated to transactions to decide whether they match. The app reads message sender, subject, received time, message identifiers, and text content for this on-device check. For a matched transaction email, the app processes the content on your device to identify transaction direction, amount, currency, merchant, reference number, and possible account. A transaction goes to the local inbox for review unless you separately enable automatic capture and the message meets the app's verification and matching requirements. Automatic capture applies only to eligible messages received after you enable it.
The app does not send Gmail message content or your financial records to Full Frills Balance servers. Email parsing and transaction matching happen on your device. The app does not save the full email body as a transaction record. For a matched email, it stores selected details locally: sender, subject, received time, Gmail message identifiers, parsed transaction fields, processing status, and account-recognition details used for matching. These details are kept in the local transaction inbox and may also be present in related journal records and exported backups. Unmatched messages are not saved. Message content temporarily fetched for matching, previews, or signature checks is processed in memory and is not intentionally written to the app database, logs, analytics, or crash reports.
Google processes sign-in and Gmail API requests under Google's own terms and privacy policy. Gmail API requests go directly from your device to Google over HTTPS. Google Sign-In components manage access credentials; the app does not write tokens to transaction records, app logs, analytics, or exported backups. Analytics and crash-reporting providers do not receive Gmail bodies, sender details, subjects, access tokens, or parsed transaction content. If you enable verified automatic capture, the app queries Google Public DNS with the sender domain and DKIM key selector to look up a public signing key; it does not send email content in that DNS request. The app stores a local association between the selected Workplace and Google account identifier, along with the Gmail history cursor and local capture settings.
The app's use of information received from Google APIs follows the Google API Services User Data Policy, including its Limited Use requirements, and the Google Workspace User Data and Developer Policy. Gmail data is used only for the transaction capture and bookkeeping features described here.
Data protection for Gmail information
Matched Gmail details are stored in the app's private on-device SQLite database. The app does not add a separate encryption layer to this database. The optional App Lock gates in-app access with your device biometrics or credentials, and Privacy Mode hides amounts and source text on screen; neither encrypts stored files. Use a device screen lock and protect your files. Exported ZIP backups are not encrypted by the app.
Retention and deletion of Google user data
- Unmatched messages and full message bodies: not retained by Full Frills Balance. Message content is held in memory only while the app checks it, previews it at your request, or verifies a sender signature.
- Matched transaction details: retained on this device without automatic expiry, including after you dismiss an inbox item or disconnect Gmail. There is no separate delete control for an individual Gmail inbox item. Use Factory Reset, clear app data, or uninstall the app to remove the app's local records; these actions also remove other app data.
- Gmail connection data: disconnecting a Workplace removes its local account binding and Gmail history cursor and stops future checks for that Workplace. When no other Workplace uses the account, the app asks Google to revoke access and signs out. If revocation fails, you can revoke access in your Google Account security settings. Revocation stops future app access but does not delete records already stored on the device.
- Messages in Gmail: this app has read-only access and cannot delete or change source messages. Delete those messages in Gmail if you want them removed from your Google account.
- Copies outside the app: exported ZIP files and enabled Apple or Android device backups may retain Gmail-derived details. Resetting or uninstalling the app does not delete those copies; manage them in the location where you saved them or in your device-backup settings.
You can turn off automatic capture and background checks in Gmail settings, or disconnect Gmail from a Workplace. Disconnecting stops future checks and removes its local connection and history cursor. If no other Workplace uses the same Google account, the app also asks Google Sign-In to revoke access and signs out. You can review or revoke access from your Google Account security settings.
5. Voice Entry
You can optionally dictate a transaction instead of typing it. Voice entry asks for microphone and speech-recognition permission only when you start it. Speech is converted to text by your device's speech-recognition service, which, depending on your device and settings, may be provided by your phone's operating system vendor (for example Google on Android) and may process audio online under that provider's own privacy terms. The app then parses the resulting text on your device. We do not receive or store your audio recordings. Analytics may record that voice entry was started or that permission was denied, but not what you said.
6. Analytics and Crash Reporting
We use PostHog and Expo Insights for product analytics and technical improvement. Analytics may include only allowlisted event fields and values, including:
- pages visited inside the app
- onboarding completion
- journal and budget creation (event counts only, not monetary values)
- import and export actions (counts and formats, not row contents)
- feature-usage events, such as starting voice entry
- SMS import setting changes (enabled or disabled) and whether an SMS rule auto-posted a transaction (boolean values only)
- Gmail feature setting changes, sync success or failure, and counts of captured transactions, without email content or parsed transaction values
- in-app account creation events (account type and currency code only)
- selected currency preference
- app version, build, and variant
- operating system name and version, and tablet flag
- pseudonymous analytics identifiers
- privacy policy acknowledgement events (policy version as event-specific data)
We do not intentionally send:
- transaction or budget amounts
- conversion or funnel monetary values
- merchant names
- SMS text
- Gmail email bodies, sender details, subjects, or parsed transaction content
- balances
- user-entered notes
- privacy policy text or signatures
Analytics and crash reporting are turned on in release builds of the app. There is currently no in-app setting to turn them off; if you object, contact us (section 15). Analytics identifiers are pseudonymous and are used only to understand app usage and improve functionality. PostHog session replay is disabled. We do not record in-app screenshots or screen replays for product analytics.
Sentry (crash reporting) is separate from PostHog. When enabled, error reports and performance traces may include error types, code locations (function names, file paths and line numbers from the app's own code), and navigation timing; error message text is removed before sending. Default personal data collection is turned off. Native crash reporting is disabled because its reports bypass the app's privacy filters, so native crashes, freezes and out-of-memory terminations are not reported. We do not attach screenshots or screen layouts, and we do not enable Sentry session replay or screen recording.
Bug reports you choose to send. If you use the in-app bug report option, the app builds a diagnostic ZIP (app and device details plus recent app logs) and opens your phone's share sheet. Nothing is sent unless you pick where to share it.
7. Internet Use
Although Full Frills Balance is primarily offline, internet access is used for limited features:
- Exchange rates. Current rates are fetched from ExchangeRate-API. Historical rates for a past date are fetched from the open currency-api dataset (served via the jsDelivr CDN, with a Cloudflare-hosted fallback) or from Frankfurter's European Central Bank rates. These requests contain currency codes and, for historical rates, a date. They do not include your transaction history, amounts, or personal financial records.
- Update check. Release builds may download a small public version-policy file from GitHub to tell you when an app update is available or required. The request does not include your financial data.
- Analytics and crash reporting, as described in section 5.
- Google sign-in and Gmail API requests, only if you connect Gmail, to check Inbox messages for transaction capture. Message content is fetched directly by the app on your device.
- Google Public DNS, only if you enable verified Gmail automatic capture, to look up an email signing key using its sender domain and DKIM key selector. The DNS lookup does not include email content.
Like any internet request, these services can see standard network information such as your IP address and the time of the request.
8. Export, Backup and Device Backup
You may export app data as ZIP backup files containing your personal records. Exported files remain under your control on your device or wherever you choose to save or share them.
Backups are not encrypted by the app, so you are responsible for protecting exported files. Backups you explicitly export may include original SMS content associated with the exported workplace records, including older journal source fields; the shared Device pending feed is not part of a workplace backup. Clearing app data does not delete backup files you previously saved or shared.
Apple and Android device backup. If iCloud Backup or Android device backup is enabled, the operating system may include the app's local data in a backup associated with your Apple or Google account and may restore it to another device. The app allows Android's built-in app-data backup. These backups are controlled by your operating system and account settings, not by us, and we cannot access them. Factory Reset or clearing app data on this device does not delete copies already held in device backups.
9. No Required App Account
Full Frills Balance does not require an app account or sign-in for ordinary local use. Gmail capture is optional and requires you to connect a Google account and grant Gmail read-only access. The app does not require:
- login
- email registration
- phone number verification
- cloud account
10. Data Sharing
We do not sell personal data. Data may be processed by these parties, only for the purposes described:
- PostHog and Expo: product analytics (section 5).
- Sentry: crash reports and performance traces (section 5).
- Your phone's speech-recognition service (for example Google on Android): audio when you use voice entry (section 4).
- Apple (iCloud Backup) and Google (Android device backup): the app's local data, if device backup is turned on (section 8).
- Google (sign-in and Gmail API): sign-in and mailbox requests, only if you connect Gmail (section 4). The app does not send Gmail content or parsed transaction details to its own servers or analytics providers.
- ExchangeRate-API, jsDelivr/Cloudflare (currency-api) and Frankfurter: exchange-rate requests (section 6).
- GitHub: the app-update check (section 6).
- Vercel: hosting, page-view analytics and performance measurement for this website (section 13).
- FormSubmit: your email address if you join the iOS waitlist on this website (section 13).
Files you export or bug reports you share go only where you choose to send them.
11. Permissions
Depending on features you choose to use, the app may request:
- SMS read and receive permission, for SMS transaction import (Android)
- Google sign-in and Gmail read-only access, if you connect Gmail
- microphone and speech-recognition permission, for voice entry
- notification permission, for SMS review notifications
- biometric or device-credential authentication, for the optional app lock
- storage access on older Android versions (Android 12 and below), for export and backup files
- internet access, for the features in section 6
Permissions are optional where possible and used only for app functionality. The app does not request access to your photos or videos.
12. Planned Future Online Features (Not Currently Available)
The current app does not offer account registration, online sync, or cloud backup. Future versions may offer optional encrypted backup or multi-device sync. If introduced, the intended privacy principles are:
- sync requires a separate, clear opt-in after a notice explains what categories of data would be uploaded and why
- declining sync keeps local use available
- financial records are encrypted on your device before upload; the service is designed to store ciphertext without the keys needed to read the financial content
- sync uses encrypted operations or snapshots rather than uploading the raw local database; balances, reports, and other derived views are rebuilt locally
- sync is limited to the workplace you choose, but the service may still process account, device, membership, operation-size, timing, and security metadata needed to authenticate, authorize, route, and operate the service
- recovery methods, device enrollment and revocation, key changes, retention, and deletion are explained before sync is activated
- encryption and recovery keys are intended to remain under your control; losing your devices and recovery method may make synced books unrecoverable
- raw SMS text is not uploaded or parsed on the server, and server-side tax, legal, or financial-reporting workflows are not part of the planned sync design
If online sync is introduced, this Privacy Policy and the in-app disclosure will be updated before the feature is enabled. Stopping sync would stop future uploads, but it would not automatically recall data already downloaded to a device or delete a server backup unless a separate deletion process is completed.
13. Security
On native devices, the app stores financial records in an app-private SQLite database and does not add a separate encryption layer to that database. The optional App Lock requires your device's biometrics or credentials to open the app; Privacy Mode hides amounts and source text on screen. These controls restrict in-app access or display but do not encrypt stored files. Secure your device with its screen lock. Exported ZIP backups are not encrypted by the app, so protect or delete them yourself.
14. This Website
This website (fullfrills.sahilsoni.in) uses Vercel Web Analytics and Speed Insights to count page views and measure page performance. If you join the iOS waitlist, the email address you enter is sent through the FormSubmit form service so we can notify you when the iOS app is available. We use it only for that purpose.
15. Children's Privacy
Full Frills Balance is not directed to children. If you are below the age at which you can provide valid consent under the law that applies to you, use the app only with a parent or legal guardian involved.
16. Privacy Requests and Contact
Your local financial records and Gmail-derived transaction details are stored on your device, so we generally cannot access or recover them from our servers. Use the app's Settings controls for export, restore, factory reset, and Gmail disconnection. Disconnecting stops future checks but does not delete transaction records already saved locally. You can revoke Google access in your Google Account settings.
For data processed by Full Frills Balance or its service providers, you may contact us about privacy questions or requests such as access, correction, deletion, or withdrawal of consent where applicable. We may need to verify a request and may retain information where required by law.
Sahil Soni
sscsps@gmail.com
17. Changes to This Policy
This Privacy Policy may be updated when app features or data practices change. When an update materially changes how data is handled, we will update the effective and last-updated dates and provide an in-app or other appropriate notice where practical.
Update history:
- November 9, 2026 — documented optional Google sign-in and the mailbox-wide Gmail read-only permission, while clarifying that capture searches only new Inbox messages; also documented on-device parsing, locally retained matched-email details, optional automatic and background capture, the effect of disconnecting, dismissing, Factory Reset, and clearing app data, and adherence to Google's Limited Use requirements.
- October 16, 2026 — aligned the public policy with the current app: optional automatic SMS import on Android and local retention of original transaction SMS; SMS review notifications; allowlisted analytics and crash reporting (native crash reporting disabled, error message text removed); optional voice entry; exchange-rate providers and the app-update check; Android system backup; user-initiated bug reports; expanded permissions list; and this website's analytics and waitlist. No online sync or cloud backup was enabled by this update.
- October 4, 2026 — documented optional automatic SMS import on Android at startup and on new-message arrival; documented retention of original transaction SMS for journal details and user-controlled backups, privacy maintenance, and allowlisted diagnostics and analytics.
- September 7, 2026 — clarified current local-first and no-bank behavior, export files, analytics and crash reporting, and planned privacy principles for optional encrypted sync. No sync feature was enabled by this update.
- March 5, 2026 — initial policy published.