Invoice Processing Agent

Reads the invoice, checks it against the purchase order, and only asks a person about the ones that do not add up.

Concept build

We built this in-house to show how the thing works. It was not built for a customer, so there are no business figures anywhere on this page.

The situation

What this kind of business is dealing with

Common in the trade, not a description of anybody in particular. If two or three of these sound like your week, the build below is the shape of the answer.

  • Invoices arrive as PDFs, phone photos and paper, and somebody types them in.
  • Checking every line against the purchase order is slow, so often it does not happen.
  • An overcharge is spotted when someone has time to look, which is not always.
  • The finance inbox is a queue with no visible bottom.
  • Month end is a scramble because the entering is what gets left until last.

What we built

The pieces of it

Each of these exists and runs. Ask for a walkthrough of any one of them.

Reading that copes with messy documents
Scans, photos taken on a phone, multi-page PDFs, and a layout that changes from one supplier to the next. Line items, tax, dates and totals come out as structured data.
A confidence score on every field
The agent says how sure it is, field by field, so a person checks the shaky ones instead of re-reading the whole document to find them.
Matching against the purchase order
Quantities, prices and totals compared line by line with what was ordered, and the two versions shown side by side where they differ.
A queue of only the exceptions
Invoices that match within your tolerance pass through. What is left is a short list of real disagreements with the reason attached to each one.
A human approval step, always
Nothing is paid or posted on its own. The agent prepares the work; a person approves it. Money moving unattended is where automation stops being worth the risk.
Run against a test set, not a demo document
We built it against our own set of scanned documents, including deliberately awkward ones, so the error rate is something that can be looked at rather than claimed.

How it works

What actually happens, in order

  1. 01

    An invoice arrives in a watched inbox or folder.

  2. 02

    The agent reads it and pulls out supplier, dates, line items, tax and totals.

  3. 03

    It finds the matching purchase order and compares it line by line.

  4. 04

    Anything inside the tolerance you set goes to the approved list.

  5. 05

    Anything outside it -- a price difference, a short quantity, a line nobody ordered -- goes to the exceptions queue with both versions shown.

  6. 06

    A person accepts, corrects or rejects, and the correction is saved against that supplier so the same odd layout is handled next time.

  7. 07

    Approved invoices are exported to the accounts package.

The build

Facts about the thing itself

What it is made of. There are no customer figures on this page, because there is no customer.

Built with

  • Python
  • Claude
  • OCR
  • PostgreSQL
  • REST API

Next step

Could this work for you?

Tell us what your version of this looks like. We will say what would carry across, what would have to be built differently, and roughly what that takes.