AI that cuts the back-and-forth
Using AI where it removes work: checking every receipt against German VAT rules the moment it’s uploaded, so employees can fix issues before an accountant sends the expense back.

245K+ expenses a month, 31% fewer receipt rejections
Leading design for AI
Right expense, wrong receipt
40% of expense rejections had nothing to do with the spending. The expense was fine, but the receipt wasn’t. It was unreadable, not an invoice, or missing details German VAT law requires.
What makes a receipt valid depends on its type, and most employees have no reason to know the rules. Most issues surfaced only at the end, when an accountant reviewed the expense and sent it back. In our survey and interviews, accountants named wrong document types as one of their biggest frustrations, and one of the slowest to resolve.
Accountants can only reject. Employees can fix it.
Problem first, AI second
We didn’t set out to add AI. Checking a receipt means reading the document, working out what kind it is, and knowing which details that type needs under German VAT rules. Accountants were doing this by hand on every expense, which made it a good fit for AI.
AI Receipt Check sits inside the upload flow employees already use.



Making decisions that shaped the submission experience
Making the wait visible
Reading a receipt, working out its type and checking its requirements takes longer than a plain scan. It’s close to five seconds on average, and more on a slow connection. The old loading state was a receipt animation that didn’t show what was happening.
The new one shows each step, “Uploading” and then “Scanning,” so employees can see progress. If scanning takes longer than usual, they’re told, and it times out instead of leaving them waiting. At any point, they can stop waiting and fill in the expense manually.
Three warnings, three fixes
A generic “invalid receipt” tells employees something is wrong, but not what to do. So each warning comes with one fix:
Unreadable: retake the photo.
Invalid receipt: replace it, for example when a booking confirmation was uploaded instead of the invoice.
Missing info: add what’s missing, named in the warning.

To name what’s missing, the check first sorts each upload into one of eight document types, each with its own requirements under German VAT law.
For receipts over €250, the warning shows the company’s registered name and address, so the employee knows exactly what the invoice should say. In usability tests, this did more than fix one receipt: people understood why it was flagged and what to ask for next time.
A warning, not a wall
The check is made by a model, and models can be wrong. Blocking a receipt on a wrong call would stop someone from submitting a valid expense, so the warnings never block. Employees can still submit, and the accountant makes the final call. Also, keeping in mind real life situations.
Business impact
After release, document-related rejections dropped by 31%. Employees fixed receipts when they uploaded them, instead of waiting for an accountant to send them back.
With 245K+ expenses a month going through the check, that means less back-and-forth for both sides. It matters for the companies too: under German VAT law, an invoice has to meet these requirements before the company can claim back the VAT on it.
This is also the first step toward AI-assisted reviews. The accountant side comes next.