01
Capture
Invoices arrive the way they already arrive: a PDF attached to an email, a scan dropped in a folder, or a file from an EDI feed. The capture stage watches those sources and, for each new document, runs intelligent document processing to extract the fields that matter, vendor, invoice number, date, PO reference, subtotal, tax, total, and every line item.
This is not template OCR that breaks the moment a vendor redesigns their invoice. Extraction is model-based and grounded: each value is tied back to the region of the document it came from, so a reviewer can see why the agent thinks the total is $4,820.00, not just that it says so. Low-confidence fields are flagged, not guessed.
→ Out: a structured invoice record with a confidence score on every field, ready for matching. Nothing keyed by a human.
02
Match
With a clean record, the agent runs the three-way match, the control that keeps AP honest. It lines the invoice up against the purchase order that authorized the spend and the receipt that confirms the goods arrived. Quantities, prices, and totals have to agree within the tolerances you set.
Along the way it checks the vendor master: a brand-new vendor, or a bank detail that just changed, is exactly the signal fraud hides behind, so those invoices are held for a human regardless of whether the numbers match. A clean match is a candidate for touchless; anything else is routed, with the reason attached, to the exception gate.
→ Out: a verdict and a confidence score. Clean matches flow on; everything else gets a reason and a queue.
03
Code & route
A matched invoice still needs a general-ledger code and a path to approval. The agent assigns GL codes from your chart of accounts and the patterns in your own history, the same vendor and expense type coded the way your team has always coded it. When it is unsure, it proposes a code and marks it for confirmation rather than committing silently.
Then it hands off. Coded invoices flow into the approval chain you already run inside QuickBooks Online, Xero, or NetSuite, pre-populated and ready for the approver who would have received them anyway. The agent removed the data entry, not the accountability.
→ The hard line: it codes and routes. It does not approve and it does not pay. That boundary is enforced in code.
04
The exception gatehuman gate
This is the stage that makes the whole thing safe, and the one most automation quietly skips. Everything the agent could not clear with confidence lands in one exception queue, captured, coded as far as possible, and annotated with the exact reason it stopped. Your team works that queue, not the whole inbox.
Two things follow. The messy invoices that would have failed a naive automation do not disappear or get force-matched, they surface with context where a human resolves them fast. And the queue is a diagnostic: when the same PO gap shows up every week, it tells you where your upstream process leaks. Fixing that raises your touchless rate more than any model tuning.
PO not foundqty mismatchprice varianceduplicate suspectednew vendor