Cutting month-end receipt sorting from six hours a client to forty minutes
A small bookkeeping practice sorted client receipts by hand at every month end. We built a pipeline that reads each receipt, matches it to a bank transaction and suggests a category, with a person approving every entry.
- Client
- A small bookkeeping practice
- Industry
- Accounting services, 8 staff
- Engagement
- 6 weeks, then ongoing monitoring
- Published
Note.Client name is anonymized and figures are illustrative until publication is approved.
- 40 min
- Month-end receipt work per client, from six hours
- 82%
- Receipts matched to a bank transaction automatically
- 4%
- Category corrections in review
Business context
A small bookkeeping practice looks after the books for about 70 small businesses, from cafes to trades. Eight people work there, and the practice bills clients by the month. The work clients value is advice: cash flow, tax timing, and knowing which costs are creeping up.
We built AI bookkeeping automation to take the receipt sorting off the accountants, so their month end went back to being about the numbers rather than the paperwork. It is one of several AI agent workflows we run for small teams; a related build is automated invoice payment reminders.
The problem
Clients sent receipts however they liked. Some photographed a paper receipt and texted it. Some forwarded supplier invoices as PDFs. Some handed over a folder of paper at the end of the quarter. There was no single format, and no client sent them at a steady rate.
At month end, staff matched each receipt to a bank transaction and chose a category. Most were obvious: a fuel receipt against the van account, a software subscription against the tools category. A stubborn few needed a phone call to the client, which meant the month-end work stretched for days.
The practice measured the cost honestly. Sorting and matching took about six hours per client per month. Across 70 clients that was more than 400 hours a month, and it happened in a rush at the same time as every other client's deadline. It was also the least interesting part of the job, which made it hard to hire for.
What we built
One inbox replaced the mess. Clients forward receipts to a single email address or upload them to a small portal, and everything lands in the same place regardless of format.
The pipeline reads each receipt and extracts the date, supplier, amount and tax. It then matches the receipt to a bank transaction by amount and date, allowing for the small differences that happen when a card settles a day later. Where a receipt matches, the system suggests a category based on that client's past entries, not a generic chart of accounts.
An accountant then reviews a queue in a simple screen. Each item shows the receipt image, the matched transaction, the suggested category and the reason for the suggestion. Approving takes one click. Rejecting asks for the right category, and that correction teaches the practice's own rules for next time. Nothing is posted to Xero until a person approves it.
Where the confidence came from
Every extracted field carries a confidence score. Date, supplier and amount are usually clear. Tax is the field that causes trouble, because suppliers format receipts in different ways and some include a tax number that looks like an amount. When confidence is low on any field, the item goes to a person rather than being matched. We would rather review a receipt twice than post the wrong tax figure.
Rollout
- Week 1 to 2: Collecting two months of real receipts to see every format the clients actually send.
- Week 3 to 4: Building extraction, matching and the review screen against that set.
- Week 5: Running the pipeline beside the manual process and comparing results item by item.
- Week 6: Turning it on for five clients, then adding the rest over the following month.
Before and after
| Step | Before | After |
|---|---|---|
| Receipt intake | Email, text, paper, in any format | One inbox and portal |
| Data entry | Typed by hand | Extracted, with a confidence score |
| Bank matching | Manual, line by line | Matched by amount and date |
| Categorizing | Chosen by the person each time | Suggested from that client's history |
| Posting | Direct to the ledger | Only after an accountant approves |
Results
Month-end receipt work per client fell from six hours to about forty minutes, a saving of more than 300 hours a month across the practice. The pipeline matched 82% of receipts to a bank transaction without help, and the accountant corrected only 4% of the suggested categories in review.
The saving did not turn into fewer staff. The practice used the recovered time to take on nine more clients without hiring, and to start a quarterly review call with each client. That call is the part clients now mention when they renew, which was not true of the paperwork they never saw.
Lessons learned
- Suggesting a category was useful. Posting it automatically would not have been trusted, so we never built that. Early on we did let the system auto-match, and it created duplicate entries when a client sent the same receipt twice under different names. The review step now catches those before anything reaches the ledger.
- We expected extraction to be the hard part. Matching was harder. A supplier might bill on the 30th and the card might settle on the 2nd, so a strict date rule failed often. Allowing a few days and a small amount difference fixed most of it.
- Clients did not change how they sent receipts, and we stopped asking. We built the intake to accept everything, because a system that requires clients to change sends the work right back to the accountants.