Capture and Check Receipts Automatically: AI Instead of a Shoebox
The shoebox full of receipts is no joke, it is reality for most founders, only in digital form: an email inbox, a downloads folder, three portals. Capturing receipts automatically is the way out, and it is easier than you think.
We built this for Flowhouse and for our own brands. Here is the process in four steps, including the failure cases nobody likes to talk about.
Why receipts are the most annoying bookkeeping problem
Transactions are easy. The bank delivers them cleanly and completely. Receipts are the opposite: they arrive by email, as a download in a customer portal, as a photo of a restaurant bill, sometimes never at all.
And the tax office says: no booking without a receipt. So there you sit at the end of the month, playing memory. Which receipt belongs to which debit?
That memory game is exactly what you can automate. The trick: treat receipts as a data stream rather than as documents. The full picture of our bookkeeping system is in Automating bookkeeping with AI, this article covers the receipt part only.
Step 1: Bundle every inbound channel
Before any AI reads anything, you need one place where all receipts land. For us that is essentially three channels:
- Email. Most invoices arrive by mail. A dedicated address or a forwarding rule collects them.
- A Google Drive folder. Anything that comes up manually goes in there: downloads from portals, photos of paper receipts. Our system imports the folder automatically.
- Qonto itself. Our bank lets you attach receipts directly to transactions. Whatever is already attached there is already matched.
The rule behind it is simple: a receipt that sits in none of those channels does not exist for the system. That forces discipline in exactly one place instead of ten.
Start here even if you automate nothing else. A single inbound folder beats any shoebox.
Step 2: AI reads the receipt
Now the AI comes in. Every new receipt goes through a language model that extracts the core data:
- Issuer
- Invoice date
- Invoice number
- Gross and net amount
- VAT rate
This step used to be called OCR and it was painful: rigid templates that broke with every new invoice layout. Modern language models read a PDF or a photo the way a human does. Whether the invoice comes from Meta, from the fulfilment provider or from a trade fair builder barely matters any more.
One detail matters: have the model give you structured data rather than prose. What you want in the end are fields a program can compare.
Step 3: Check against the bank transaction
This is the step almost everyone skips, and it is the most valuable one. An extracted receipt is only worth something once it matches a real payment.
Our system takes the extracted data and looks for the matching bank transaction in Qonto. What gets compared, above all:
- Amount. Has to match.
- Date. The payment sits in a plausible window around the invoice date.
- Counterparty. The issuer matches the recipient of the payment.
This check is more than convenience, it is quality control. It finds duplicate invoices. It finds invoices that were never paid. And it finds debits with a missing receipt, before your tax advisor asks about them.
With us the check runs in both directions: receipts look for their transaction, and transactions without a receipt show up on an exceptions list.
Step 4: Matching and filing
If everything lines up, the receipt is attached to the transaction automatically. From then on it sits where it belongs: in the export for the tax advisor, the receipt reference travels along with the booking.
A human only looks at two lists: uncertain matches and transactions without a receipt. For us that is a short round instead of half a day. The same pattern as everywhere with us, see 3 brands with 2 people: machines handle the standard case, humans handle the exceptions.
The failure cases, named plainly
Capturing receipts automatically sounds like magic. It is not. These cases cause trouble in practice:
- Batched debits. One payment, several invoices. The amount check fails because no single receipt matches the total. A human has to untangle that.
- Foreign currency. Invoice in dollars, debit in euros with an exchange rate and a fee. The amounts differ, so the exact check does not bite. You need tolerances here, and tolerances mean more manual checking.
- Bad photos. A crumpled restaurant bill, photographed at an angle in poor light: even the best AI reads a wrong amount there sometimes. Without the bank comparison the error would slip through. With it, the error shows up.
- Deposit and final invoice. Two receipts, two payments, amounts that only make sense together. Automation rarely gets this right.
- The missing receipt. The most common disruption has nothing to do with technology. Someone simply filed no receipt. The system can chase it, and it cannot invent it.
With us the clear majority of receipts goes through with no intervention. The rest lands on the review list, and that is fine. The goal is to be left with only the work that needs judgement. Zero manual work was never the target.
Where to start
If you are starting today, in this order:
1. Define one inbound channel. One email address plus one folder. From now on every receipt lands there.
2. Pick a bank with an API. Without clean access to your transactions there is no automatic matching. That was a main reason we went with Qonto.
3. Build or buy the extraction. The AI part is the easiest building block these days.
4. Make the check mandatory. No receipt counts as done before it has been checked against a payment.
And automate only once you have run the process manually and cleanly at least once. Otherwise you automate chaos. Where automation makes no sense at all, I wrote up in When automation makes no sense.
Conclusion
Capturing receipts automatically consists of four steps: bundle the channels, AI extraction, check against the bank, match and file. The check is the most important one, because it turns a filing system into a control system.
For us it replaced the shoebox completely. Not perfect, and good enough that the monthly close no longer scares anyone.
If you want this for your business and would rather not build it yourself: at Flowhouse we build exactly these systems. Just get in touch.