We build finance tracking apps that solve bank integration, transaction categorization, and multi-currency challenges. Clients expect automatic expense categorization, but banks provide data in inconsistent formats and even a single error in amount storage can cause reporting discrepancies. Our team of 8 engineers, each with 5+ years in financial mobile apps, has delivered 15+ projects in 5 years, including solutions with Open Banking, ML categorization, and sync via iCloud/Google Drive. We guarantee your app will pass App Store and Google Play review on the first attempt.
Why bank integration is the toughest challenge — mobile app development
We use three approaches:
-
Open Banking / PSD2 (Europe). Standardized APIs: Nordigen (GoCardless), Salt Edge, TrueLayer. Authorization via OAuth2 with redirect back through Deep Link (
ASWebAuthenticationSessionon iOS, Custom Tabs on Android). Transactions arrive in JSON, but each bank interprets fields differently: amount can be string or number, pending transactions get duplicated. We write adapters per bank. -
Statement import (CSV/OFX/MT940). If no bank API, we parse statements. MT940 format varies per bank. For OFX we use ready libraries; for CSV, a configurable parser with column mapping. This approach saves up to 30% of budget compared to Open Banking.
-
Manual entry. The foundation of any app. Quick entry via lock screen widget (iOS 16+ WidgetKit with intent) or Dynamic Island on iPhone 14 Pro. The user doesn't need to open the app to record an expense.
| Approach | Complexity | Integration Time | Budget |
|---|---|---|---|
| Open Banking (PSD2) | High | 4–6 weeks | Medium |
| CSV/OFX Import | Medium | 2–3 weeks | Low |
| Manual Entry | Low | 1 week | Minimal |
How we do transaction categorization
On-device ML is our choice. CoreML on iOS, TensorFlow Lite on Android. We train a custom model on labeled transactions: input creditorName and transactionAmount, output category. CoreML model runs 3x faster than cloud alternatives and works offline. If confidence is below 0.7, a rules-engine suggests the user confirm the category. This way we retrain the model without collecting data on the server.
Multi-currency: the golden rule
We store amounts in minor units (integers) to avoid floating-point precision issues when accumulating transactions. Exchange rates are cached from ExchangeRates API or Fixer.io, updated once a day. For reports, we convert using the rate on the transaction date, not the current rate.
Security: what's under the hood
Transactions are encrypted in the database via SQLCipher (React Native / Flutter) or NSFileProtection.completeUnlessOpen (iOS). Biometric lock via LocalAuthentication / BiometricPrompt. Bank API tokens are stored in Keychain (iOS) / Android Keystore. No UserDefaults or SharedPreferences. The Open Banking standard is described in the PSD2 Directive.
What's included in the work
- Requirements audit and stack choice (iOS/Android/Flutter/React Native).
- Accounting model design (double-entry or simplified).
- Development and testing on bank sandbox accounts.
- Push notification integration (APNs/FCM) and deep linking (Universal Links/App Links).
- In-app purchases (StoreKit 2 / Billing 6) for premium features.
- Publication to App Store Connect and Google Play Console, including TestFlight setup.
- Documentation and training for your team.
How we conduct bank integration: step by step
- Analyze bank API documentation.
- Develop adapter in Swift or Kotlin.
- Test on sandbox accounts.
- Validate on production environment.
- Monitor and support.
| Stage | Duration |
|---|---|
| Audit and design | 1–2 weeks |
| Manual tracking with categories and budgets | 5–8 weeks |
| CSV/OFX import | +2–3 weeks |
| Open Banking integration (1–2 banks) | +4–6 weeks |
| On-device ML categorization | +2–4 weeks |
| Widgets, shortcuts, iCloud/Drive sync | +3–5 weeks |
Process
We start with an audit: which banks, target countries, need for multi-currency, monetization model. Design the data schema, develop, test on real bank accounts in sandbox mode, then on production. After publication — support and refinements.
More about testing
We test the app on 50+ scenarios, including edge cases: negative amounts, duplicate transactions, multi-currency transfers. Each bank is verified separately on sandbox and production environments.Cost and timeline
Cost is calculated individually after requirements analysis. Approximate timelines: basic version — 5–8 weeks, full feature set — 16–24 weeks. Leave a request on our website to discuss your project. We'll get back to you within a day and offer the optimal solution.







