Back to Technology

Can an AI Agent Collect Your Missing Receipts?

An AI agent can fetch some missing receipts and should chase almost none of them in the order you expect. Close to two hundred thousand expense lines in our own ledger have no document, seven in ten are under a hundred euros, and the ranking signal that matters was broken in our code.

Category
General
Updated

Every bookkeeping product now promises to find your missing receipts. Pleo, announcing its agents in June, put the mechanism plainly: when an expense needs a receipt, it looks in the employee's inbox first. Right instinct, and the easy half of the problem.

The hard half is that a real ledger does not have a receipt problem, it has a receipt backlog, and a backlog needs an order. Close to two hundred thousand expense lines in our own ledger this year carry no document at all, and handing someone a list that long is not automation. The question is which of them an agent should chase, in what order, and which it should leave alone.

Where the missing receipt actually is

Four places, with very different retrieval economics.

The inbox is the richest and where everyone starts. It is noisier than it looks: a vendor mail carries a logo, a tracking pixel, a signature image and sometimes the invoice, so a real fetcher needs an allowlist of document types and a filename denylist before it uploads anything, or the ledger fills up with header.png.

The vendor portal holds the subscription invoices, behind a login. Browser agents are moving fast here, and Anthropic shipped skills and connectors into its Chrome extension on 12 August 2026, roughly the capability you need to log in, filter to new invoices and download them. The blockers are not intelligence, they are MFA, CAPTCHAs and the fact that credentials for a payments portal are exactly what you should not hand an agent.

The wallet, paper and card slips, nobody automates. It needs the human at the moment of purchase.

Then the fourth, always underestimated: already in your system, attached to nothing. Of the documents we hold from this year, close to two in five are linked to no transaction. People forward, scan and drop files in, and the file lands without a booking to sit against.

So the first job of a receipt agent is not retrieval. It is a join.

Why we retired mailbox access and kept a single message

We had broad Gmail mailbox access. We gave it up.

What replaced it is a Workspace Add-on scoped to the message you have open, under Google's gmail.addons.current.message.action scope, plus a migration that revoked the stored tokens and cleared the sync cursors. The agent can no longer walk your mail history; it can attach the invoice in front of you.

I still think that is the right trade, and not only for privacy optics. A mailbox crawler is a standing grant over years of correspondence in exchange for a document set you can also get at the moment of intent, and dropping the background sync removes a class of quiet failure: no silent token expiry, no half-imported month, no history cursor to reconcile. The cost is real: we lost the tail of vendors whose invoice arrives by mail and is never opened by a human.

Which missing receipt matters: a ranking, not a list

The distribution decides the design. Of those document-less expense lines:

  • About one in six is over 250 euros.
  • Roughly one in nine falls between 100 and 250 euros.
  • Roughly seven in ten are under 100 euros, and nearly half are under 25 euros.

A flat backlog is therefore mostly card payments of a few euros, and that matters legally rather than aesthetically: above the small-value invoice threshold a German business needs a full invoice to claim input VAT, which our guide to the 250 euro rule covers, and below it the requirements are lighter. The top sixth carries most of the recoverable VAT; the bottom half is a tidy-up.

Our agent playbook for tax advisors encodes exactly that: critical above 250, high between 100 and 250, medium below, then highest amount and oldest first, grouped by vendor, with a confirmation step before any reminder goes out.

What decides priority

SignalWhere it comes fromWhy it ranksCost to compute
Amount bandThe bank lineAbove the small-value threshold, input VAT needs a full invoiceFree
Category expects VAT, none recordedCategory metadata plus the bookingMoney left on the table, and the row will look odd in a reviewOne query
Falls in the period closing nextReport datesA gap in an open period is a filing blocker, not a choreOne query
A held document matches amount and windowUnattached documentsIt is a join, not a request to the userBulk pass
Vendor recurs monthlyCounterparty historyOne portal visit fixes twelve gapsCheap

The ordering that falls out of this is not "newest first" and not "biggest first". It is closer to:

priority =
      vat_at_risk(tx)          # category expects VAT, none is recorded
    + over_invoice_threshold(tx)
    + closes_in_current_period(tx)
    + recurring_vendor(tx)     # one fetch resolves many
    - already_held(tx)         # a document we have matches amount and window

That last term matters most, because subtracting it turns a request into a suggestion. We run it as a bulk pass during filing preparation: for every document-less expense in the period, look for an unattached document whose number appears verbatim in the bank description and whose amount matches within tolerance. The tolerance is the whole trick: 30 cents absolute or 0.3% relative, whichever is larger, a one-day window around the value date, up to 30 days after an invoice date because debits land after payment terms, and no substring matching on numbers shorter than five characters, since "2026" matches everything.

It is also a lesson in not overselling a matcher: among the lines over 250 euros, fewer than two in a hundred have a held document matching on amount and window at all. At the expensive end, the document is genuinely not in the building.

The gap we found: our money-at-risk signal never fired

While measuring for this piece I found a bug in the signal I most wanted to rank by.

Our filing preparation raises a warning for expenses whose category normally carries VAT but where none is recorded, above a small floor, excluding reverse charge and cross-border rows. Carefully scoped, phrased as a statement about the data rather than advice, and it compares the amount against that floor with a greater-than-or-equal test.

Expenses in our ledger are stored as negative numbers, so the comparison matched almost nothing: the only rows it could fire on were the few expenses carrying a positive sign, which are themselves anomalies. The warning has effectively never run in production.

Take the absolute value and the same rule matches a couple of thousand lines this year, and about nineteen in twenty of those also have no document attached. The money-at-risk signal and the missing-document signal point at the same rows, so the ranked head of the backlog was computable all along and a sign error kept it invisible.

That is the second time this month our own audit of our own data found the flaw in the boring layer rather than in the model, after the missing actor column in our change log. I have stopped being surprised.

Frequently asked questions

How can I collect missing receipts automatically?

Three mechanisms, in order of yield. Match documents you already uploaded against document-less transactions by amount, date window and document number, which needs no new access. Attach from the mail you have open, using a mail add-on. Fetch recurring invoices from vendor portals, where browser agents are heading but MFA and credentials still stop most of it.

Our bookkeeping spends too much time collecting receipts. What helps?

Stop treating the backlog as a list and rank it: gaps in the period you are about to file, gaps where the category expects VAT and none is recorded, gaps above the invoice threshold, then the rest. Batch per vendor rather than per transaction, since one portal visit usually resolves several months, and sweep everything under the small-value threshold monthly.

What if I have no receipt for a business expense at all?

The expense is not automatically lost, but the documentation burden shifts to you. For small unavoidable cases German practice allows a self-issued receipt, an Eigenbeleg, recording what was bought, when, from whom and why; our Eigenbeleg guide covers the fields. Input VAT is what you generally cannot rescue that way.

Do I need a receipt for small amounts too?

For bookkeeping every business expense needs a document, but invoice requirements are lighter below the small-value threshold of 250 euros, where a simplified invoice suffices for input VAT. Above it you need the full set of mandatory fields, including your own details as recipient, which is why any sensible prioritisation puts the over-250 gaps first.

Can an AI read receipts out of my email inbox?

Only if you grant it mailbox access, and you should ask what that grant covers. We went the other way: broad mailbox access was retired in favour of an add-on scoped to the message you have open, so the agent attaches the invoice in front of you instead of crawling your history. Ask any vendor whether the scope is per-message or standing.

Conclusion

Structured invoicing will eventually shrink this problem: receiving e-invoices has been obligatory in Germany since January 2025 and issuing becomes obligatory from 2027 above 800,000 euros turnover and from 2028 for everyone else, and an invoice that arrives structured needs no fetching or matching at all. It will not touch the café card payment or the parking meter, which is where nearly half of today's backlog sits.

Until then: the receipt agent everybody is building is a fetcher, and the one that helps is a ranker with a fetcher attached. Fetching is bounded by things a model cannot argue with, portal logins and paper, while ranking is pure data work that pays off at once: the difference between a two-hundred-thousand-item backlog and a fifty-item worklist is arithmetic over signals you already store. We had the taxonomy and a sign error hiding the best signal in it, which is roughly the state of the industry. Everyone demos retrieval; the ordering is where the value was sitting all along. For the manual side, our receipt management guide covers what to keep and for how long.

Norman handles the operational finance work behind the scenes

From invoicing to bookkeeping, Norman keeps recurring finance work organized so you can stay on top of deadlines with less manual effort.