How I automated expense reports for a 20-person team
Northwind contractors: receipts to reimbursement, hands-off — built in a week, saved everyone hours per month.
By Awadesh Madhogaria · Published Aug 21, 2025
Twenty contractors work with Northwind in any given month, and every one of them spends money we eventually pay back. For a long time, getting that money back was a chore for them and a data-entry job for us.
Expenses are the kind of admin nobody signs up for. Nobody enjoys filing a receipt, and nobody enjoys typing one in. The old process was a spreadsheet and a lot of goodwill: a contractor would email a receipt, someone in finance would open it, read it, and type the numbers into a sheet by hand.
That broke down in predictable ways. Receipts arrived in every format imaginable — PDFs, photos, screenshots — so finance fell behind, reimbursements were slow, and people had to chase. Manual typing meant the occasional wrong amount or wrong category. The real cost was friction: slow reimbursement makes contractors feel like an afterthought, and chasing expenses is nobody’s idea of a good week. So I built a flow where neither side has to do much at all.
How the flow works
The goal was simple — a contractor sends a receipt, and the money turns up. Everything in between should be machine work, with one human checkpoint where judgement is actually needed:
- A contractor forwards their receipt to
[email protected]. - A script captures the email and its PDF attachment.
- Claude parses the amount, vendor, and category from the receipt.
- A clean row lands in the
Expensessheet. - Finance reviews the batch weekly, and approved rows trigger a Wise transfer.
The whole path from a forwarded email to a sheet row takes under a minute, with no human touching it until the weekly review. Contractors send what they already have, the machine does the typing, and finance keeps the final say on the one step that matters — where money actually moves.
What I underestimated
Receipt formats. Vendors are wildly inconsistent, and that turned out to be the thing I had to design around. The Claude parser hallucinated less than I expected, but a few things still caught me out: photo receipts taken at an angle parse worst, so lighting matters more than I thought; the parser occasionally guessed a category confidently and wrongly; and logging the raw text alongside every parse made review fast and trustworthy.
That parse log turned out to be the most important feature of the whole build. It means finance can trust the numbers without re-reading every receipt — the original text is right there if a figure looks off. If you want the parsing piece on its own, I cover it in Build an AI invoice and receipt parser, and the contractor-facing side is close to Build a form-driven expense claim system.
Was it worth it
Yes, comfortably. The build took about a week, and it saves everyone — both contractors and finance — hours every month:
- Contractors file an expense by forwarding an email — no form, no spreadsheet.
- Finance reviews a clean batch once a week instead of typing all month.
- Reimbursements are faster, so nobody has to chase.
When a process has two unhappy sides, the fix is to automate the handoff between them. Let people send what they already have, let the machine do the typing, and keep one human checkpoint where money actually moves.