What causes a three-way match failure between the PO, receipt, and invoice?
A three-way match compares the PO, the receipt (what was actually delivered), and the invoice on quantity, price, and charges. A failure means one of those three disagrees beyond tolerance — usually because the invoice bills a quantity that isn't fully receipted yet, the unit price differs from the PO, or the invoice adds a charge, like freight, the PO never included.
Part of the accounts payable and invoice processing guide.
| Symptom | An invoice is held or flagged instead of posting automatically for payment |
|---|---|
| Most common trigger | Partial or staged delivery — the invoice bills the full PO quantity before all units have been receipted |
| Second most common trigger | Price variance — the invoiced unit price differs from the PO's agreed price beyond tolerance |
| Third trigger | Unplanned charges — freight, rush fees, or surcharges on the invoice with no corresponding PO line |
| Where to check | Compare invoice line quantity and price against both the PO line and the matched receipt line, not just the PO alone |
What's actually being compared
Three-way matching checks a vendor invoice against two other documents before it's approved for payment: the purchase order, which sets the agreed price and quantity, and the receipt — the record of what was actually delivered, created by whoever received the goods or confirmed the service. A match failure just means the invoice disagrees with one or both of those documents by more than the tolerance your AP process allows.
The three things that actually cause a failure, in order of how often they happen
Quantity variance against the receipt is the most common cause in practice. A vendor bills for the full PO quantity the moment the order ships, but if the delivery arrived in multiple shipments, or the receiving team hasn't logged the receipt yet, the invoiced quantity exceeds what's actually been receipted — even though the order will eventually be fulfilled in full.
Price variance against the PO is the second most common cause: the invoice's unit price differs from what was agreed on the purchase order, whether from a vendor price change that wasn't reflected back into the PO, a currency conversion difference, or a straightforward billing error.
Charges with no PO line — freight, a rush fee, a restocking charge — are the third common cause. These weren't part of the original agreement the PO represents, so a strict match has nothing to compare them against and flags the whole invoice rather than silently accepting an unplanned amount.
How to tell which one you have
Pull the invoice, the PO, and the receipt for the same line side by side. If the invoiced quantity is higher than the receipted quantity but matches the PO quantity, it's a timing issue — the shipment isn't fully receipted yet, not a real billing error. If the invoiced quantity matches the receipt but the unit price doesn't match the PO, it's a price variance. If a line item on the invoice has no corresponding PO line at all, it's an unplanned charge, and the question becomes whether it should be approved as a legitimate exception or rejected back to the vendor.
Why the fix usually isn't loosening the tolerance
The instinct when match failures pile up is to widen the tolerance percentage so fewer invoices get flagged. That trades a review backlog for exactly the exposure three-way matching exists to catch: overbilling, invoices for goods never delivered, and duplicate submissions under a new reference number. A narrower, better-targeted fix is usually to shrink the timing gap that causes most quantity-variance flags in the first place — receipting deliveries the day they arrive rather than batching it at week's end clears the single largest source of false-positive holds without giving up real matching discipline.
Next step
Map the finance workflow with the most exposure and prove the automation path.
Bring the invoice, contract, payment reconciliation, or customer finance workflow you have to defend at audit. Loopfour can map the trigger, controls, integrations, and approval loop.
Worked example
A $240 quantity variance that isn't a billing error
A purchase order is cut for 500 units at $12.00 each — $6,000 total. The vendor ships in two batches; the warehouse has only logged a receipt for the first 480 units delivered so far. The vendor's invoice arrives billing the full PO: 500 units at $12.00, $6,000. Three-way match compares the invoice against the receipt, not just the PO, and flags a 20-unit, $240 quantity variance — the invoice is billing for 20 units that haven't been receipted yet. The price is correct and the PO is correct; the invoice is simply ahead of the delivery. Holding the invoice until the second batch is receipted (or splitting the payment to match what's actually arrived) resolves it without ever reaching for the price or charges fields.
Frequently Asked Questions
Sources
Related
Diagnostic
How do I reconcile a phantom AP liability from a broken Bill.com sync?
Compare open bills in your AP aging against actual disbursements on the bank statement. A phantom liability shows up as a bill still open in AP with a matching payment already visible on the bank side, which means the payment posted in Bill.com but its corresponding payment record never synced back to the accounting system, leaving the original bill looking unpaid.
Read moreTopic
AP & Invoice Processing
Accounts payable and invoice processing is the set of steps a vendor bill goes through between arriving at a company and turning into a payment: capturing what the vendor sent, checking it against wha…
Read moreDiagnostic
Why did we pay the same vendor invoice twice?
Almost always one of two things: the vendor exists as two separate records in your vendor master, so a duplicate-invoice-number check that only compares within one vendor ID never sees the second copy — or the invoice was entered twice by different people, because it arrived through two channels and each assumed they had the only copy.
Read moreHow-to
How do I look up or update an AP bill in Xero?
Use getInvoice, updateInvoice, or listInvoices with the bill's InvoiceID — Xero has no separate Bill resource. A bill is an Invoice with Type=ACCPAY, and Loopfour's Xero integration exposes full get/update/list for Invoices generically. createBill is a convenience wrapper for creation only; reading and updating a bill happens through the Invoice actions, not a Bill-named one.
Read more