DataVance

Guides · 2026-07-24

2-way vs 3-way PO matching, explained with the exceptions that actually fire

Purchase-order matching is the control that stops you paying for things you never ordered, quantities you never agreed to, and goods that never arrived. The “2-way vs 3-way” distinction is simpler than the jargon suggests: it is just a question of how many documents you compare before money moves.

2-way: invoice vs purchase order

Two documents. The purchase order records what you agreed to buy and at what price; the invoice claims what you owe. A 2-way match walks the invoice line by line against the PO and asks, for each line: was this ordered? at this quantity? at this unit price? It catches the most common commercial drift — a price that quietly went up between quote and invoice, an extra line slipped onto a familiar invoice, quantities padded above the order.

3-way: add what actually arrived

Three documents. The goods receipt records what was delivered — and that is the piece a 2-way match cannot see. An invoice can agree perfectly with the PO and still bill you for ten units when eight were on the pallet. The 3-way match closes that gap: invoice vs PO vs receipt. Short shipments, part-deliveries invoiced in full, and goods billed before delivery all surface here, before the payment run rather than at stocktake.

The trade-off is operational: 3-way matching requires someone to record receipts. For physical goods that discipline pays for itself. For services, software, and subscriptions there is usually nothing to receive — a 2-way match against the agreement is the honest control, and inventing receipt records just to satisfy a 3-way policy is theatre.

The four exceptions that matter

A match result that just says “failed” creates work; a match result that names the problem resolves it. DVAP PO Match reports exactly four line-level exceptions:

ExceptionMeaningConversation to have
not_on_poInvoice line was never ordered“What is this item?”
quantity_exceeds_poMore billed than ordered“We ordered eight, not ten.”
price_varianceUnit price above the agreed price“The PO says $25 a unit.”
quantity_exceeds_receivedMore billed than arrived (3-way)“Two units are still outstanding.”

An invoice is matched only when no exception fires. Any exception routes the invoice to a human with the reason attached — which is the whole point: the reviewer starts the supplier conversation already knowing what it is about.

Doing this without an ERP

Classically, PO matching lives inside an ERP, which is why many smaller businesses skip it entirely. It doesn't need to: DVAP PO Match is one stateless call — the invoice file plus the PO lines (and optionally receipts) as JSON — returning the line-by-line verdict with the exceptions above. Nothing to register in advance, nothing stored afterwards. The full DVAP pipeline goes further: register POs and receipts once and every incoming invoice that references a PO number is matched automatically, after extraction and duplicate / fraud screening.

Frequently asked questions

What is 2-way matching in accounts payable?
Comparing the supplier's invoice against the purchase order, line by line: were these items ordered, at this quantity, at this price? It answers 'are we being billed for what we agreed?' and is the minimum control for any purchased goods or services.
What is 3-way matching?
2-way matching plus the goods receipt: invoice vs purchase order vs what was actually received. It adds the question 'did it arrive?' — so an invoice for ten units when eight arrived is caught before payment, not during the next stocktake.
When is 3-way matching worth it?
Whenever physical goods are delivered and short-shipment is possible — inventory, materials, equipment. For services and subscriptions there is usually nothing to 'receive', so 2-way matching against the agreement is the practical control.
What exceptions should a PO match raise?
Four cover the money: a line not on the PO (not_on_po), more billed than ordered (quantity_exceeds_po), a higher unit price than agreed (price_variance), and more billed than received (quantity_exceeds_received). Naming the exception tells the reviewer exactly what conversation to have with the supplier.
Do I need an ERP to do PO matching?
No. DVAP PO Match is stateless: send the invoice file plus the PO lines as JSON in one call and get the line-by-line verdict back. There is no PO to register first and nothing is stored — it drops into any workflow that has the PO data, spreadsheet included.

Try it on a real invoice: DVAP PO Match has a free tier of 25 checks a month — send an invoice and its PO, get the line-by-line verdict back in one call.