Invoice Reader
Turns supplier invoices and receipts, from photos or PDFs, into checked accounting entries.
Open the evaluation boardProblem
Bookkeeping still means retyping invoices. OCR alone misreads totals and can’t tell line items from footers.
Try it live
Pick a sample, such as a clean PDF, a crumpled photo, a handwritten receipt or a euro invoice with VAT, or upload your own. Each field lights up on the document with its confidence. Fix a field, then export CSV or JSON.
Proves
Vision models with typed output, and validation that keeps arithmetic away from the model.
Signal chain
- OCR words + boxes
- screen for injection
- extract to schema
- validate and reconcile
- repair once
- map to boxes
- check duplicates
- journal entry
- export
Stack
Flask + an asyncio pipeline · OpenAI-compatible client to the gateway · Pydantic v2 structured output · RapidOCR (ONNX) in a locked-down process · Cloudflare R2 · Vue viewer
Engineering highlights
- The pipeline is async because every step waits on I/O: the model, storage and the OCR worker. Two documents in flight overlap, and a test proves it under the production server.
- Deterministic checks own the math. Line items must sum to the subtotal and VAT must match its rate, or the document goes back for one targeted repair. A document that still fails is returned with its failing check, never fixed silently.
- Duplicate invoices are caught by vendor, number and content hash before export.
| Operating limit | Value |
|---|---|
| Documents per visitor per day | 10 |
| File limit | 4 MB, 5 pages |
| Files kept | 1 h |
| Model calls per document (est.) | 2–5 |
Status The evaluation board for this part is open. It starts on curated samples, and your own text runs live within your daily allowance. Open the evaluation board