Two small models, both on your phone
How Spenti reads a Thai slip and answers a spending question without sending either to a server, by default, and never to ours. The actual pipeline, start to finish.
People ask what's actually under the hood. Here's the honest version: many scanner apps send your receipt to a server for recognition. Spenti runs OCR and a couple of small, fine-tuned models instead — and by default all of it runs on your phone. Here's the actual pipeline, start to finish.
Reading a receipt
When you add a receipt, a few things happen in sequence, all on the device by default. The OCR stage lifts every character off the image — including dense Thai script. An image classifier then checks it's actually a receipt before anything is trusted; if it isn't, the photo is skipped and nothing is stored. A fine-tuned extractor — around 270 million parameters — turns that loose text into structured fields: merchant, amount, date, and line items. The result is filed as an expense in a local database and pinned to the corkboard in your room, where you can review and correct it. No copy is sent to Spenti.
Answering a question
The spending chat works the same way. You ask something in English or Thai — “how much did I spend on food this month?” A fine-tuned, Thai-native chat model reads what you actually asked, pulls the matching expenses straight from the local database, and replies with a grounded answer drawn only from your own data. One model runs the whole conversation. It reasons over your receipts; it never phones home for them.
Small, specialized models — not one big generalist
Each stage uses the smallest model that does its one job well. The eyes are a compact OCR stack chosen because it holds up on the way Thai receipts actually look — dense Thai script, mixed Thai and English, low-contrast slip screenshots. The reader is the ~270M-parameter extractor, fine-tuned on Thai bank and PromptPay slips; because it understands the text instead of pattern-matching it, a new bank layout doesn't break it the way it breaks a regex template. The voice is a language model built in Thailand, for Thai, fine-tuned to handle multi-turn questions and reason over your local data.
Runs on the phone you already have
On-device AI usually means “on a flagship” — most apps that run models locally quietly require the newest chips and 8 GB of RAM. Spenti was built the other way around: small fine-tuned models, quantized and profiled until the whole pipeline fits in 4 GB. It works best on an iPhone 12 or newer, and older phones still work, more slowly. It uses the platform's own text recognition where it is fastest and Spenti's own readers for the other scripts. After the model downloads (about 230 MB for the receipt reader on your first scan, plus an optional 850 MB for chat), the core flow needs no internet at all. What that means day to day is in our offline expense tracker guide.
Ten more scripts, on the phone
Thai and English are where Spenti started, and they remain its most tested. It now also reads receipts in ten more scripts, still on the phone: Burmese, Devanagari, Khmer, Lao, Chinese, Japanese, Korean, Cyrillic, Arabic and Hebrew. The receipt language in Settings, or the country you picked when you set up the app, decides which reader looks first. The newer scripts have had less real-world testing than Thai, so check the fields before you save.
One thing we keep deliberately vague is the exact model names — not to be cagey, but because they change as better on-device options ship. The promise that doesn't change is the one worth printing: recognition and chat run on your device unless you choose your own AI, and the only place your records go is where you send them — optional Basic or Pro backup to your own iCloud or Google Drive. Never to a server of ours. The privacy policy lists every network use, and Privacy is control, not secrecy explains why we built it this way.
Your own AI, if you want it
On Pro there is one more choice: Your own AI. Connect Gemini, ChatGPT, Claude, OpenRouter or another service, and it reads the text from each receipt and answers your chat questions, in any language. Only text goes, straight from your phone to that provider under your own account; never the photos, never your bank messages, and never to Spenti. It is off until you turn it on, and the on-device path stays the default.