Your files never leave your device. All processing happens locally in your browser.
How do I scan receipts and categorize my expenses for free without uploading the photos?
Open AnyTool’s Receipt OCR + Categorizer, drag in your receipt photos or PDFs (many at once), and click Process. Each receipt is read entirely in your browser — a photo is OCR’d with tesseract.js, a digital PDF reads its text layer with pdfjs — then a rule-based engine pulls out the merchant, date, grand total, tax/VAT/GST, subtotal and a payment hint, and auto-assigns an expense category (Meals, Travel, Fuel, Office, Software…) by matching the merchant against a keyword map. Every receipt becomes one editable row with running totals (sum, tax, by-category), and the category is a dropdown so you can correct it. Export a real two-sheet Excel (.xlsx) or a CSV expense report, or copy the table. Everything runs locally, so your receipts are never uploaded — safe for personal and business receipts. Receipts are noisy (thermal print, photos, skew), so it pattern-matches rather than understands: always review and correct the total and tax before submitting a claim or filing taxes.
Upload receipt photos or PDFs — tesseract.js OCRs images, pdfjs reads digital PDFs, all in your browser
Extracts merchant, date, total, tax/VAT/GST, subtotal & a payment hint, then auto-categorizes by merchant
Editable expense list with running totals (sum, tax, by-category); category is a correctable dropdown
Export a real two-sheet .xlsx (Expenses + By Category), a CSV report, or copy the table into a spreadsheet
100% client-side — receipts never uploaded; rule-based, so verify the total & tax before any claim or tax filing
What is
Receipt OCR and expense categorization
Receipt OCR is the process of reading a receipt image or PDF and turning it into structured data — the merchant, date, subtotal, tax and grand total — so the spend can be filed as an expense; categorization then assigns each receipt to an expense bucket (Meals, Travel, Fuel, Office, Software, …) based on the merchant. AnyTool’s Receipt OCR + Categorizer does both entirely in the browser: it OCRs photos with tesseract.js (and reads a digital PDF’s text layer with pdfjs), parses the recognised text with rule-based heuristics and regular expressions, and matches the merchant against a keyword map to suggest a category. Because receipts are noisy — thermal print fades, photos are skewed, the merchant name at the top fades first — it is pattern matching rather than true comprehension: every field is editable, the category is a dropdown, and it is meant to produce a reviewed expense report, not a final accounting record. No receipt is ever uploaded.
Generators
Related terms
Receipt OCRExpense reportMerchant / vendorGrand total vs subtotaltesseract.jsExpense categorization
Frequently Asked Questions
Upload the receipt photo (or PDF) and click Process. The tool OCRs it in your browser and shows the merchant, date, total and tax as editable fields, plus an auto-assigned expense category you can correct — then export an expense report.
Open the Receipt OCR + Categorizer and drag in one or more receipts — phone photos (JPG, PNG, WebP) or PDFs. When you click Process, the tool reads each receipt locally: a photo is recognised with tesseract.js optical character recognition, and a born-digital PDF reads its embedded text layer with pdfjs. It then parses that text with rule-based heuristics: the merchant is taken from the first substantial line at the top, the date from a date pattern, the grand total from a labelled “Total / Amount Due / Balance” line read bottom-up (with the largest amount as a fallback), and the tax from a “Tax / VAT / GST” line. Each receipt appears as an editable row with a confidence on each field, and the merchant is matched against a keyword map to pick an expense category. Correct anything that looks off, then export.
No. Each receipt is opened, OCR’d and categorized entirely in your browser. Nothing is sent to a server, so it is safe for personal and business receipts.
The Receipt OCR + Categorizer runs completely client-side. Photos are recognised with tesseract.js, digital PDFs are read with pdfjs, and the Excel workbook is built with exceljs — all libraries load from the app’s own bundle, with no server, no API, no AI and no CDN call for your receipts — and the page works offline once cached. The files you upload never leave the page; nothing is sent, logged or stored, and object URLs and the OCR worker are cleaned up when processing finishes or you leave. That is the key difference from most receipt-scanning apps, which upload your receipt photos to their servers (and sometimes use them to train models). Because your receipts stay on the device, the tool is safe for personal and business expenses, and only the Excel or CSV you choose to export ever leaves the page.
It assigns common business/personal expense buckets — Meals, Travel, Car & Vehicle/Fuel, Office, Supplies, Software & Subscriptions and more — by matching the merchant, and each category is a dropdown you can correct.
Categories follow the buckets receipt-scanning and expense apps use: Meals, Travel, Car & Vehicle (fuel, parking, tolls), Office Expenses, Supplies, Software & Subscriptions, Professional Fees, Utilities, Telephone & Internet, Shipping & Postage and others, plus Uncategorized when nothing matches. The tool matches the detected merchant (and, failing that, the whole receipt text) against a keyword map — for example a coffee shop maps to Meals, a gas station to Car & Vehicle, a SaaS vendor to Software & Subscriptions. The match is a suggestion: every category is a dropdown, so you can override any receipt. If you edit a merchant, the tool re-runs categorization for that row unless you have already picked the category yourself, in which case your choice is kept.
Treat it as a fast first draft, not a final record. Receipts are noisy, so OCR and the detected total, tax, merchant and category will sometimes be wrong — always verify the total and tax before submitting a claim or filing taxes.
Accuracy depends heavily on the receipt. A clean, born-digital PDF extracts very well because it uses the real text layer, but most receipts are photos of thermal print, which fades (the merchant name at the top fades first), and phone photos are skewed and low-contrast, so OCR misreads characters. The field logic is rule-based, not AI, so a common slip is grabbing the subtotal instead of the grand total when the layout is ambiguous, or missing the tax line. That is why every field is editable, each carries a confidence, and the category is a dropdown. Use it to do the bulk of the data entry and to keep your receipts on your device, but review and correct each receipt — especially the total and tax — before you rely on it for an expense claim, reimbursement or tax filing. It is not AI, not an accountant, and not tax advice.
Detailed Explanation
⚙️Methodology
Reading a Receipt Photo or PDF In the Browser: tesseract OCR + pdfjs Text Layer
AnyTool’s Receipt OCR + Categorizer turns uploaded receipts into structured expense rows entirely on the device, and the first step is getting the text. Because most receipts are phone photos, an uploaded image (JPG, PNG, WebP, …) is recognised directly with tesseract.js. A receipt PDF is handled like an invoice: it reads the embedded text layer with pdfjs-dist (walking each page’s positioned text items, bucketing them by Y coordinate to reconstruct lines and sorting by X to preserve reading order), and any page with too little embedded text is treated as a scan and rendered to a canvas at 2× for OCR. Many receipts can be queued at once and are processed sequentially with a live per-receipt progress bar and status (queued → reading/OCR → parsing → done). Both pdfjs and tesseract.js load from the application’s own bundle — no CDN worker URL and no server — so the receipt’s text is obtained without the file ever leaving the browser.
Receipt photos are OCR’d with tesseract.js; digital PDFs use the pdfjs text layer (no OCR), scanned pages fall back to OCR
Batch upload — many receipts processed sequentially with per-receipt progress and status
pdfjs and tesseract.js load from the app’s own bundle — no CDN, no server
An image thumbnail is shown for photos; PDFs show a receipt icon
The OCR worker is terminated and object URLs revoked when processing finishes or the component unmounts
🔧Technical Details
Rule-Based Field Extraction and Keyword Categorization
Once the text is available, a rule-based engine (receiptExtractEngine, regular expressions plus layout heuristics) pulls the fields an expense claim needs — not AI. The MERCHANT is inferred from the first substantial, mostly-alphabetic line near the top (skipping “receipt”, “invoice”, phone/tax-id lines). The DATE is matched against numeric, slash/dash and written-month patterns, preferring one near a “date” label. Money fields are read by scanning lines bottom-up (totals sit near the end): the grand TOTAL comes from a labelled “Total / Amount Due / Balance / Amount Paid” line that is explicitly NOT a subtotal/tax/discount line, with a fallback that takes the largest monetary value if no labelled total is found; the TAX from a “Tax / VAT / GST” line and the SUBTOTAL from a “Subtotal” line. A payment hint (card type + last-4, or Cash / Apple Pay / UPI) and the currency (from a code or the most frequent symbol) are detected too, and amounts are normalised across US (1,234.56) and European (1.234,56) formats. Each receipt is then CATEGORIZED by matching the merchant (and, failing that, the full text) against the same keyword→category map used by the business-expense tool (businessExpenseEngine.BUILTIN_RULES), giving buckets like Meals, Travel, Car & Vehicle (fuel), Office, Supplies and Software & Subscriptions. Each receipt becomes one editable row (merchant, date, total, tax with per-field confidence, plus a category dropdown); editing the merchant re-runs categorization unless the user has already chosen a category. Running totals (sum, tax, by-category) update live and the list exports as a real two-sheet .xlsx (Expenses + By Category) via exceljs, a CSV expense report or a copied table.
Merchant from the top lines; date from labelled or pattern matches; total/tax/subtotal read bottom-up by label
Grand total excludes subtotal/tax/discount lines, with a largest-monetary-value fallback
Amounts normalised across US (1,234.56) and EU (1.234,56) formats; currency and a payment hint detected
Every field editable with confidence; category is a dropdown; export two-sheet .xlsx (exceljs) / CSV / copy
🔒Privacy & Security
Privacy and the Honest Limits
The whole pipeline — opening each receipt, OCR’ing photos or reading PDF text, parsing the merchant/date/total/tax, categorizing and building the workbook — runs in the browser. There is no server, no API, no AI/LLM and no CDN call for the receipts, and the page works offline once cached, so personal or business receipts never leave the device; the tesseract worker is terminated and object URLs revoked when processing finishes or the component unmounts, and only the Excel or CSV the user exports ever leaves the page. This is the deliberate contrast with most receipt-scanning apps, which upload your receipt photos to their servers (and sometimes use them to train models). The tool is equally clear about what it is not: it states prominently that it uses in-browser OCR plus rule-based field extraction and keyword categorization, NOT true understanding — it pattern-matches — and that receipts are notoriously noisy: thermal print fades (the merchant name at the top fades first), phone photos are skewed and low-contrast, so OCR misreads characters and the detected merchant, date, total, tax and category WILL sometimes be wrong, including the common slip of grabbing the subtotal instead of the grand total. Because of that, every field is editable, each carries a confidence and the category is a dropdown, and the repeated guidance is explicit: treat the output as a draft and review and correct each receipt — especially the total and tax — before submitting an expense claim, reimbursement or tax filing. It is not financial or tax advice.
Receipt OCR + categorization: AnyTool vs cloud receipt-scanning apps vs manual entry
Capability
AnyTool
Cloud receipt-scanning app / AI
Manual entry
Approach
In-browser tesseract OCR + pdfjs + rules
Server-side OCR / AI model
Human typing
Input
Receipt photos or PDFs, many at once
Photos / PDFs
Anything
Categorization
Auto by merchant keyword; editable dropdown
AI/learned categories
You decide
Editable output
Yes — every field & category editable
Sometimes
Inherently
Processing
Runs in your browser
Uploads your receipt photos
No software
Privacy
Never uploaded; safe for personal & business
Photos sent off-device; may train models
Private but slow
Honesty
States it pattern-matches; verify total & tax
Marketing may overstate accuracy
Error-prone, tedious
AnyTool OCRs and categorizes each receipt locally and never uploads it; it is rule-based pattern matching, not AI — always verify the total and tax before claiming or filing taxes.