Scanning receipts on Android without uploading them

Short answer. A receipt can be read without sending it anywhere: a bundled ML Kit text recognizer turns the image into lines, app-owned Korean and English rules propose the store, date, amount and currency, and nothing counts until you confirm those four fields against the image. "On-device" describes recognition only. The document scanner is a Google Play services module that may need a download, and a cloud photo provider needs its own connection.

Dotori Receipt Scanner app icon

Dotori Receipt ScannerScan Korean and English receipts, review amounts, and share records as CSV.

Get it on Google Play

This note describes version 1 of Dotori Receipt Scanner on Android 8.0 (API 26) and newer. It reads one Korean or English receipt per image and keeps a summary per receipt: store, date, amount, currency and a few optional fields. There is no app account and no developer-operated receipt server. Implementation details such as row assembly, the money type and the backup rules are in the tech notes; this page covers the flow and how to check the result.

What stays on the phone, and what does not

"The app does not send receipts to a server" and "getting the image never uses the network" are two different statements. Only the first one holds for every step.

StepWhere it runsNetwork
Scan (document scanner)A Google Play services module with its own camera accessMay need a module download first
From photos (Photo Picker)The Android system picker; only the chosen file is handed overOnly if you pick from a cloud photo provider
Text recognitionML Kit Text Recognition v2 with the Korean model, bundled in the appNone
Field extractionKorean and English label rules owned by the appNone
Records and imagesApp-private storage, excluded from cloud backupNone
Ads and ML Kit diagnosticsSeparate SDKs with separate data practicesYes, but receipt images and text are not passed to ad requests

The app itself requests no dangerous permissions: the scanner uses its own camera access and the picker grants only the selected image. Because the scanner module can arrive through Play services, the very first capture is not guaranteed to work offline.

From receipt to confirmed record

  1. On the home screen, tap Scan to crop and straighten one receipt with the document scanner, or From photos to use an image you already have. Cancelling the scanner is not an error and does not open the picker on its own.
  2. The app shows Reading the receipt…, then saves the result as a draft immediately, so leaving the screen does not lose it.
  3. On Review, a value marked ! needs a look. Tap the ! to confirm it, or edit the value; an edited value also counts as confirmed and later recognition does not overwrite it.
  4. The receipt can be confirmed once Store, Date, Amount and Currency are confirmed. It counts in totals only when Type is also confirmed as Purchase or Refund.
  5. Tap Confirm, or Keep draft if you want to check it later. Drafts stay out of totals and exports until you confirm them.
Monthly totals kept separate by currency
Confirmed receipts add to this month’s totals, shown separately for each currency.
Receipt review screen
Check each suggested field against the image, then confirm or keep a draft.

What to check against the image

The rules propose candidates; they do not decide the accounting. These are the cases where a proposed value deserves a second look.

What you seeWhyWhat to do
The amount is not the one you paidOnly total labels such as 합계, 결제금액, Grand total and Amount paid are candidates. Subtotal, Balance due, tip, change, discounts and points are notPick the paid total from the image
The currency is marked for review$ and ¥ stay ambiguous, and the receipt's language is never taken as its currencyType the three-letter code, such as USD or KRW
The currency is already filled inMain currency in Settings is only offered first when the receipt does not sayConfirm it against the receipt anyway
A date like 04/05 is markedIt reads differently as MM/DD and DD/MM. Date format hint only decides which reading is offered firstConfirm the date in YYYY-MM-DD
The date or year is missingA missing date is never filled in from today or the capture timeEnter it yourself or keep a draft
An amount has an unusual number of decimalsAmounts are kept exactly; 12.345 is not rounded to 12.35Correct it to what the receipt means

A foreign card slip can print both the shop currency and the card currency. The app keeps the one amount and currency pair you confirm and does not add or split them.

What the totals and CSV contain

The home screen shows the current month per currency: spent, refunded and net. There is no exchange-rate conversion. Only confirmed receipts with a confirmed type count; drafts and receipts left as Not sure stay out until you classify them.

Export CSV shares one row per confirmed receipt through the Android share sheet:

schema_version,date,time,merchant,currency,amount,transaction_type,tax,payment_method,memo

Images, backup and deletion

How this works help screen
A short guide to scanning, confirming values and how totals are counted.
Receipt image retention, theme and language settings
Choose whether to keep receipt images, plus theme and language.

Limits of version 1

Version 1 uses OCR and extraction rules, without generative AI. It does not extract individual items, classify purchases into categories, calculate taxes, search records, show totals for months before the current one, flag duplicate receipts, read multi-page or PDF receipts, or sync and restore records. Recognition can make mistakes, so every result is a draft until you confirm it.

Dotori Receipt Scanner reads Korean and English receipts on the device, leaves every value for you to confirm, totals each currency separately and shares confirmed records as CSV. More about Dotori Receipt Scanner

Get it on Google Play

Related notes