Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MoneyPrism — Indian Bank & UPI SMS Transaction Parser

Automatically scan your Android SMS inbox, parse every bank debit/credit, UPI transfer, and wallet payment into clean structured data — with income vs expense tracking, 19 spend categories, and a zero-setup web tester.

50+ banks (SBI, HDFC, ICICI, Axis, Kotak…) 100+ UPI handles (@paytm, @ybl, @okaxis…) 14 wallets (PhonePe, Google Pay, Amazon Pay…) Flutter (Android + iOS + Web)

Features

Feature Android iOS Web
Parse All SMS from inbox ❌ (OS restriction)
Paste & test individual SMS
Store parsed transactions (SQLite)
Filter by bank / category / type

Parser coverage (India)

  • 50+ banks — SBI, HDFC, ICICI, Axis, Kotak, PNB, BOB, and more
  • 100+ UPI handles — @paytm, @ybl, @okaxis, @oksbi, @okicici, @apl, etc.
  • 14 wallet providers — Paytm, PhonePe, Google Pay, Amazon Pay, MobiKwik, etc.
  • 19 spending categories — food, groceries, fuel, travel, shopping, EMI, salary, and more
  • Smart deduplication — SHA-256 hash of raw SMS prevents double-counting

Architecture

  • CountryParser interface → IndiaParserParserRegistry
  • Adding a new country = add one class + register in ParserRegistry

Setup

Prerequisites

Flutter ≥ 3.0.0
Dart ≥ 3.0.0

1. Get dependencies

flutter pub get

2. Run on Android

flutter run -d <android-device-id>

Grant SMS permission when prompted. Tap Parse All SMS on the Home tab.

3. Run on iOS

flutter run -d <ios-device-id>

iOS does not allow reading the SMS inbox. Use the Tester tab to paste and parse individual messages.

4. Run web tester

flutter run -d chrome
# or build for deployment:
flutter build web --release
# then serve the build/web/ folder

Project structure

lib/
├── main.dart                          # Entry point; wires Android SMS on Android only
├── app.dart                           # Root widget; web shows tester, mobile shows full app
├── core/
│   ├── app_state.dart                 # ChangeNotifier: parse all, load, totals
│   ├── database/
│   │   ├── db_helper.dart             # SQLite init + schema
│   │   └── transaction_dao.dart       # CRUD, bulk insert, aggregations
│   ├── parser/
│   │   ├── base_parser.dart           # CountryParser interface
│   │   ├── parser_registry.dart       # Tries parsers in order; first match wins
│   │   └── india/
│   │       ├── india_parser.dart      # Full India SMS parsing logic
│   │       ├── models/
│   │       │   ├── enums.dart
│   │       │   └── parsed_transaction.dart
│   │       └── constants/
│   │           ├── banks.dart         # 50+ bank keyword map + sender ID map
│   │           ├── upi_handles.dart   # 100+ UPI handles
│   │           ├── wallets.dart       # 14 wallet providers
│   │           └── categories.dart    # Merchant keyword → category rules
│   └── sms/
│       ├── sms_service.dart           # Platform-agnostic interface
│       ├── android_sms_impl.dart      # Android: flutter_sms_inbox + permissions
│       └── noop_sms_impl.dart         # Web/iOS stub
├── features/
│   ├── home/
│   │   └── home_screen.dart           # Dashboard + Parse All button
│   ├── transactions/
│   │   ├── transactions_screen.dart   # Full list with search + filters
│   │   ├── transaction_detail_sheet.dart
│   │   └── widgets/
│   │       └── transaction_tile.dart
│   └── tester/
│       └── tester_screen.dart         # Paste SMS tester (all platforms)
└── shared/
    ├── theme.dart                     # Orange/grey Material3 theme
    └── widgets/
        └── amount_text.dart           # ₹ amount with credit/debit colour

Adding a new country

  1. Create lib/core/parser/<country>/ mirroring the india/ structure.
  2. Implement CountryParser:
    class UsParser implements CountryParser {
      @override String get countryCode => 'US';
      @override bool canParse(String sms, String? sender) { ... }
      @override ParsedTransaction? parse(String rawSms, {String? sender}) { ... }
    }
  3. Register in lib/core/parser/parser_registry.dart:
    final List<CountryParser> _parsers = [IndiaParser(), UsParser()];

That's it. No other files need changing.

About

Open-source Flutter app that auto-parses every bank, UPI & wallet SMS on Android into structured income/expense data. 50+ Indian banks · 100+ UPI handles · 19 spend categories · Live web tester. India-first, built for global expansion.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages