Supplier invoice intake and matching
Invoices arrive, get extracted, matched against open purchase orders, and filed — with only the exceptions reaching a human.
This is a reference design we build from — one of a set that are not delivered client projects, and the figures are estimates rather than measured results.
Trigger
Email to invoices@, or a PDF dropped in a watched folder
Timeline
1 wk audit → 3 wks build → 2 wks supervised run
Stack
Cloud Run (Python) · Document AI / Azure Document Intelligence · Xero / QuickBooks / Business Central API · Postgres matching ledger · Slack or Teams for exceptions
Outcome
Every invoice arrives structured and pre-matched. Humans only touch exceptions.
The process today
Invoices arrive by email and post, get manually keyed into the accounting system, matched to purchase orders by eye, and filed by hand. The work is unskilled, unavoidable, and expands to fill month-end.
What the automation does
Extracts supplier, invoice number, date, line items, VAT and total. Matches against open purchase orders and delivery notes. Posts matched invoices to the accounting system as drafts — never as posted entries, because a human still owns the ledger. Routes mismatches and low-confidence extractions to an exception queue with the source page highlighted. Files the PDF under a deterministic naming scheme.
Where a human stays in the loop
Every exception, and every extraction below the confidence threshold. The threshold is agreed during the audit and tuned during the supervised run.
What you end up owning
The Cloud Run service and its infrastructure definitions, the matching rules, the runbook, and the extraction evaluation set — all in your own repository.