Employee Submits $5K Expense Claim—But the Receipt Is Photoshopped. How Do You Catch This in Beancount?

Last month, one of our employees submitted a $5,200 expense claim. I caught it during reimbursement review: the “receipt” photo was his personal credit card statement with vendor names inked over and dates photoshopped. Clearly fake. But here’s what scared me: our Beancount import pipeline would’ve caught NONE of it. We would’ve categorized it as a normal reimbursement, posted to expenses:employee:reimbursement, closed the month, and only discovered it if the employee got flagged by his bank.

Questions for the community: How do you prevent this in Beancount? We’re not running OCR or receipt scanning. Do you? At what reimbursement threshold do you require actual receipt photos (not just statements)? And for the paranoid question: have you caught AI-generated receipts yet?

The real issue: you only caught this because you manually reviewed. At scale (5,000+ reimbursements/year), you can’t verify manually. Corporate card reconciliation is your safeguard—fraud jumps out when claimed reimbursement doesn’t match the card statement. Automate that match, flag exceptions. Beancount records the transaction, but can’t validate its legitimacy upstream.

One client I worked with set a simple rule: any reimbursement over $100 requires manager approval before submission, AND a matching corporate card statement line. That eliminated 90% of the friction. The approval step catches most fraud (shame factor works), and the card match validates the claim. Your Beancount import just records what was approved—not a safety net, but part of a process.