This policy describes how the Expeny iOS app handles information. Expeny is a local-first app: your financial records are stored on your device, and the developer does not operate a server that collects or stores your personal data. Limited information is sent to the third-party services listed below to make specific features work.
Expeny stores the following on your device, entered by you or generated by your use of the app:
Profile: an optional first name and an optional monthly-income figure, stored in the device Keychain.
Financial records: expenses and income (amount, merchant/description, category, payment method, date, notes, income/expense flag, currency), bills, recurring income, credit cards, loans/debts, investments and holdings, savings goals, price alerts, and learned merchant-to-category mappings, stored in the app's local database.
Preferences: selected currency, monthly budget, starting balance and its date, dark-mode setting, text-size setting, selected language, carry-over-balance setting, notification toggle, premium status, and a lifetime count of receipt scans, stored in app preferences (UserDefaults) within the app's App Group.
Camera images: when you scan a receipt, the photo is processed on-device by Apple's Vision framework to extract text. The image is used only for that extraction and is not uploaded by the app.
Notification feed: records of local notifications the app has generated, stored locally.
The app does not ask you to create an account and does not collect an email address, password, or contact list.
Your records and preferences are used to display balances, budgets, statistics, financial-health summaries, and home-screen widgets.
Transaction descriptions and merchant text are matched against built-in rules to guess a category, and learned mappings improve future autocomplete.
Receipt photos and any text you pass to the "Log From Message" intent are parsed locally to extract amount, merchant, and category.
With your permission, the app schedules and fires local notifications (bill and payday reminders, goal reminders and milestones, and — for Premium users — budget-exceeded and weekly-insight alerts). Your first name, if set, is used only to personalize these on-device messages.
For investments and price alerts, the symbols/queries you enter are sent to market-data providers to return search results and prices.
For purchases, the app communicates with RevenueCat and Apple to process and verify the Expeny Premium purchase.
Your data is stored locally on the device: in a SwiftData/SQLite database inside the app's App Group container, in the device Keychain (name and income, marked accessible only on this device when unlocked), and in app preferences. Data persists on the device until you delete it. You can remove it via Settings → Developer → "Clear All Data" (which deletes your financial records and cancels pending reminders) and by deleting the app. Delivered notifications are pulled into the in-app feed and then cleared from the system. The app defines no automatic expiry or retention period for stored records — [PLACEHOLDER: state a retention period if one is adopted]. Data held by third-party services is governed by their own policies and retention practices.
The following external services are integrated in the app:
RevenueCat — manages in-app purchases and entitlement status. Receives purchase/receipt and an app-generated user identifier to determine whether Premium is active.
Apple App Store / StoreKit — processes the in-app purchase and restores.
Finnhub (finnhub.io) — stock symbol search, quotes, and company logos. Receives the ticker/search text you enter.
CoinGecko (api.coingecko.com) — cryptocurrency search and prices. Receives the search query/coin identifier you enter.
Apple Vision — on-device receipt text recognition (no data sent off the device by this component).
Apple User Notifications — local notification scheduling and delivery (no remote push server is used).
When market-data results include logo images, those images are loaded from their hosting URLs, which may expose your device's IP address to the image host.
Because the app is local and has no account system, you control your data directly on the device:
Access: all your data is visible within the app.
Deletion: use Settings → Developer → "Clear All Data" to delete your financial records, and delete the app to remove the remaining local data.
Notifications: you can disable notifications in-app or in iOS Settings at any time.
Purchases: you can restore purchases via Settings → "Restore Purchase"; purchase and refund handling is provided by Apple.
The codebase implements no other rights-fulfilment mechanism (for example, no data-export or server-side erasure endpoint).
The app is a native iOS app and does not use web cookies. It contains no third-party advertising or analytics SDK in the codebase. Locally, it uses on-device storage (Keychain, the app database, and UserDefaults) to function. No additional tracking or device-advertising-identifier collection is present in the code.