No cloud. No account.
Just your receipts.
Receipt Scanner turns physical paper into structured, audit-ready financial records using 100% on-device Google ML Kit OCR. Camera frames, regex parsing, and SQLite storage stay strictly within your phone's memory — never touching an external telemetry endpoint.
Test the heuristic parser in real time.
Select a receipt scenario or paste custom text. Review the line-by-line bounding coordinates, edit line items and prices inline, inspect mathematical checksum validity, and export cleanly formatted JSON or CSV.
The heuristic parser will extract lines ending in numeric prices, determine subtotal, tax and total:
If optical ambiguity makes a number or tax rate mathematically unverifiable against the line items, the parser returns null and prompts human confirmation rather than hallucinating plausible figures.
Engineered under one non-negotiable axiom: zero telemetry.
Every layer of the mobile stack — from native C++ OCR bindings to SQLite indexing — exists to protect sensitive transactional data while providing instantaneous feedback.
Native Google ML Kit OCR
Powered by Google ML Kit's native text recognition engine compiled directly into the binary. Bitmaps are analyzed in volatile memory and immediately deallocated after tokenization.
Zero Cloud, Zero Identity
Paper receipts reveal sensitive location history, healthcare prescriptions, and card numbers. The app contains no user account schema, no tracking pixels, and no remote database.
Dual Vocabulary Heuristics
Receipt language often differs from device locale. Ships with comprehensive English and Italian token models (totale complessivo, imponibile, IVA), expandable by appending typed arrays.
Returns Null, Never Guesses
A hallucinated financial figure causes accounting reconciliation failures. If a printed number is smudged or ambiguous, the parser emits null and highlights it for review.
Embedded SQLite Persistence
Driven by Expo SQLite 57. Receipts and item rows are stored locally in relational tables with fast B-tree indexes, ensuring instant search across thousands of historical entries.
Data Sovereignty & Portability
No proprietary database silos or paywalled exports. Export all scans and line items into standard RFC 4180 CSV or structured JSON at any time for Excel, Numbers, or ERP systems.
Receipt Scanner vs. Cloud Expense Applications.
Many commercial expense apps use "cloud AI" as an architectural justification for aggregating your merchant transaction history into cloud data warehouses. Here is the direct architectural comparison.
| Architectural Dimension |
Receipt Scanner (OSS)
|
Expensify / QuickBooks / Cloud Apps |
|---|---|---|
|
OCR Image Processing Location
Where is the camera bitmap parsed?
|
100% On-Device (Google ML Kit Native) | Streamed to cloud vision servers |
|
Account & Personal Identification
Identity linkage & profile building
|
None. No account system exists. | Mandatory email, phone & billing info |
|
Offline Capability
Airplane, remote job site, underground subway
|
Full scanning & local search offline | Fails or queues until connection restored |
|
Pricing & License
Recurring cost structure
|
100% Free & Open Source (MIT) | $5 to $20 / month per seat |
|
Consumer Data Aggregation Risk
Purchase behavior telemetry
|
Zero risk (serverless on physical device) | Subject to privacy policies & acquisitions |
|
Ambiguous Smudge Handling
Degraded or torn thermal receipt printing
|
Returns null, flags for human review | LLMs hallucinate plausible guesses |
|
Persistence Layer
Relational database storage
|
Local SQLite (expo-sqlite 57) | Remote multi-tenant cloud clusters |
Tested on real Android & iOS hardware.
Automated unit tests ensure regex accuracy; physical device builds verify camera buffer handling and ML Kit performance.
Plain-language explanation of camera usage guaranteeing zero network streaming or photo upload.
Instant merchant indexing, sort by transaction date/amount, and pull-to-refresh backed by SQLite.
Multi-currency selection (EUR, USD, GBP, CHF), database purge controls, and privacy auditing.
How photons transform into relational SQL.
The processing pipeline runs sequentially on the device's native threads, isolated from background network runtimes.
expo-camera write frame directly to temporary cache.expo-sqlite relational tables ready for CSV export.// Dual vocabulary arrays for English & Italian receipts export const TOTAL_KEYWORDS = [ 'grand total', 'total due', 'amount due', 'total', 'totale complessivo', 'totale finale', 'importo totale', 'totale', ]; export const SUBTOTAL_KEYWORDS = [ 'subtotal', 'sub total', 'sub-total', 'totale parziale', 'subtotale', 'imponibile', ]; export const TAX_KEYWORDS = [ 'vat', 'tax', 'gst', 'sales tax', 'iva' ];
Core Architectural Decisions
Financial privacy is the primary purpose of this project, not an afterthought. Remote vision calls were ruled out by design.
Continuous edge warping consumes significant CPU and battery. A deliberate user tap is faster, predictable, and battery-friendly.
Relies on standard React Native Animated primitives to prevent Babel worklet incompatibilities across Expo SDK upgrades.
An invented total corrupts tax records. Returning null guarantees the human reviewer confirms ambiguous smudges.
Build locally or test in continuous integration.
Because ML Kit is a native binary module, local execution requires an Expo development build, or you can verify headless via the test scripts.
Clone the repository, install dependencies, and generate the native client with ML Kit linked:
git clone https://github.com/mirconegri/receipt-scanner.git cd receipt-scanner npm install npx expo prebuild npx expo run:android # or run:ios with Xcode
Validate regex parsers, test SQLite engine scripts, and typecheck without connecting hardware:
# Verify parser with realistic mock OCR samples npm run verify-parser # Verify SQLite schema against real local engine npm run verify-sql # Run strict TypeScript compiler npm run typecheck
Your finances. Your phone. Nothing else.
Explore the source code on GitHub, verify the offline parser test suites, or contribute new locale dictionaries.