Expenses & receipts
A group operating several companies under shared administration
Paper receipts, retyped by hand at every month end
Several companies, one admin team, and a month of paper receipts retyped into a spreadsheet days before the accountant's deadline.
BeforePaper receipts, retyped by hand before the accountant's deadline
AfterSnapped at the till, read automatically, ready for the accountant


Before
- 1Carried in pockets all month
- 2Retyped by hand, company by company
- 3Some never make it
After
- 1Photographed at the till
- 2Every field read from the photo, with how sure it is
- 3Checked company by company, then sent to the accountant
Illustrative interface. All values synthetic.
- Sector
- Other
- Scale
- SMB
- Duration
- Under a week
- Engagement
- Build sprint
In plain terms
- The problem
- A group of companies had people carrying paper receipts around in their pockets all month, then typing them into a computer at the end of it. Some receipts went missing, and the numbers were often wrong.
- What was delivered
- We built something where you photograph the receipt at the till. It reads the shop, the date, the amount and the tax by itself — in Greek or in English — and works out which of the companies it belongs to.
- Outcome
- The month-end scramble is gone. And when somebody corrects a mistake it made, it remembers, so it gets that one right next time without anyone having to set anything up.
The detail
The problem
Expense handling was a monthly scramble: photographed receipts in a phone gallery, a shoebox of paper, and one person retyping VAT numbers into a spreadsheet days before the accountant's deadline. Every company in the group did it slightly differently.
Constraints
- Receipts arrive in Greek and English, as photos, PDFs and email attachments
- Several companies under one administration, with strictly separate data and access
- Documents contain personal and commercial data, so storage and AI processing needed explicit consent
- No appetite for a per-seat SaaS subscription, and no willingness to send documents to an unknown processor
Approach
- Made phone-camera capture the primary path, because anything slower than photographing a receipt loses
- Built extraction on a routing layer across five AI providers with a configurable fallback order, so no single vendor is load-bearing
- Recorded versioned consent for private storage and automated processing before any company data loads
- Made every correction a training signal — supplier and category rules derive from what users fix
- Added read-only mail intake with sender and subject filters and checksum deduplication
What was delivered
- Multi-company workspaces with role-based access, invitations and membership revocation
- Greek and English extraction of totals, VAT and product-level lines, with editable values and audit history
- A dense receipt inbox with one-screen acceptance and safe auto-accept for trusted suppliers
- Filtered reporting and CSV export by date, status, currency, document type, category and VAT
- Company-scoped AI credentials, encrypted at rest
Outcome
Receipt capture
Retyped at month end
Photographed at the till
Before: Retyped at month end. After: Photographed at the till.
Languages handled
—
Greek and English
Before: —. After: Greek and English.
Including VAT and product-line extraction, not just totals
AI provider dependency
N/A
Five, with fallback
Before: N/A. After: Five, with fallback.
No single provider outage stops document processing
Stack
Next.jsTypeScriptPostgreSQLNeonClerkVercel Blob
Where AI helped, and where it didn't
This one is AI twice over — it uses AI to read documents, and AI-assisted development built it in days rather than months. The judgement that does not come from a model: making corrections the source of the rules, so the system gets better by being used rather than by being configured.
The situation
Every small group has this problem and everyone tolerates it. Receipts accumulate in a phone gallery and a drawer. Somebody spends two evenings a month retyping them, usually the person whose time is worth the most. VAT gets missed. The accountant asks for the same three documents twice.
The market answer is a per-seat SaaS subscription that sends your documents to a processor you have not evaluated. For a group of small companies that is both expensive and uncomfortable.
receipt capture · inbox / 1 of 12
ΚΑΦΕΚΟΠΤΕΙΟ ΑΙΓΑΙΟΥ
ΑΠΟΔΕΙΞΗ ΛΙΑΝΙΚΗΣ
2 × Coffee beans 1kg€ 54.84
1 × Filter papers€ 8.06
4 × Service€ 21.78
ΚΑΘΑΡΗ ΑΞΙΑ84.68
ΦΠΑ 24%20.32
ΣΥΝΟΛΟ105.00
photographed at the till
| vendor | Καφεκοπτείο Αιγαίου | high |
| date | 2026-09-14 | high |
| company | Company 2 of 4 | rule from card ending 41 |
| net | € 84.68 | high |
| VAT 24% | € 20.32 | high |
| total | € 105.00 | high |
| category | Client hospitality | learned corrected once |
Three decisions that made it work
Capture has to be faster than not capturing. The primary path is photographing the receipt at the till, on a phone, with HEIC support so an iPhone photo just works. Anything that requires getting to a laptop loses to the drawer.
No single AI provider is load-bearing. Extraction routes across five providers with a configurable fallback order, and each company can supply its own API key, encrypted at rest. When one provider is slow or down — which happens — processing continues. This also means the group controls where its documents go, which is what made the approach acceptable at all.
Corrections become rules. When someone fixes a supplier or a category, that becomes a company-scoped rule, reviewable and switchable. The system improves by being used rather than by someone sitting down to configure it, which is a thing that never happens.
What it runs on
Fourteen tables in Postgres, migrated by a script we wrote rather than an ORM’s generated ones — at this size the migration history is short enough to read, and reading it is the point. Clerk for identity, Vercel Blob for the original documents, and a provider-agnostic AI layer so swapping extraction models is configuration rather than a rewrite. Mail intake is read-only Gmail scope: the narrowest permission that does the job, because the broad one is the kind of thing that makes an accountant say no.
The compliance part, done properly
These are documents with personal and commercial data in them, processed automatically. So consent is versioned and recorded before any company data is loaded, originals live in private storage, and there is an audit history on every change.
Mail intake is read-only, filtered by sender and subject, with checksum deduplication so the same receipt forwarded twice does not become two expenses.
None of that is exciting. It is the difference between a tool the group can actually use and one its accountant vetoes.
What actually changed
Before, expenses were a thing that happened to the group at the end of every month, and the cost was two evenings of somebody expensive.
Now a receipt is dealt with in the four seconds it takes to photograph it, and the month ends without an event. The work did not get faster — it stopped being work.
Client anonymised. Most of this work touches commercial or operational internals; references available on a call.