Skip to main content
BlogSeptember 28, 202613 min read

How to do three-way matching for AP invoices

Three-way matching checks each invoice against its purchase order and receiving record before payment. How it works, tolerances, and how to automate it.

Zuny FesterBy Zuny Fester, Head of Operations and Marketing
Reviewed by Zuny Fester
Published Editorial policy

Part of the accounts payable and invoice processing guide.

How to do three-way matching for AP invoices

Three-way matching in accounts payable is the control that compares every supplier invoice against two other documents before payment: the purchase order (what you agreed to buy, at what price) and the receiving record (what actually arrived). If quantity and price agree across all three within your tolerances, the invoice is approved for payment. If they don't, the invoice becomes an exception and waits for a person to resolve it.

To do three-way matching for AP invoices, you set tolerances, compare each invoice line to its PO line and receipt line, pass the invoices within tolerance, and route the rest to the buyer with the variance shown. This guide walks through that procedure with a worked example that includes a price variance and a quantity mismatch, plus the journal entries that result.

Key takeaways

• Three-way matching compares invoice, purchase order, and receiving record line by line on quantity and price before an invoice is paid.

• Tolerances decide what passes untouched. A percentage tolerance and an absolute difference limit, set per item, vendor, or entity, keep small rounding differences from clogging the exception queue.

• Never pay for more than you received. Billed quantity above received quantity should hold the invoice regardless of price.

• This is not the cash three-way match. Matching Stripe, the general ledger, and the bank is a reconciliation control; three-way matching in AP is a pre-payment control on purchases.

• Loopfour, the deterministic finance workflow automation platform, runs the match as fixed rules and sends only out-of-tolerance invoices to a named approver in Slack.

What is three-way matching in accounts payable?

Three-way matching is an AP control that approves an invoice for payment only when it agrees with the purchase order and the goods receipt. Each document answers a different question.

DocumentQuestion it answersWho creates it
Purchase order (PO)What did we agree to buy, how many, at what price?Buyer or requester
Receiving record (goods receipt, item receipt)What actually arrived, and how many?Warehouse, receiving, or the requester
Supplier invoiceWhat is the supplier asking us to pay?Supplier

The control works because the three documents come from three different people. The buyer cannot confirm receipt, the receiver cannot set the price, and the supplier cannot approve its own invoice. That separation is what auditors look for when they test your purchase-to-pay controls.

Three-way match vs the cash three-way match

The phrase "three-way match" also describes a reconciliation between a payment processor, the general ledger, and the bank. That is a different control with a different purpose. The cash version proves that money recorded in Stripe, posted in the GL, and deposited in the bank all agree after the fact.

The AP version happens before money leaves. It proves you owe what the invoice says. If you are looking for the cash version, see how to run a three-way match between Stripe, the general ledger, and the bank.

Two-way, three-way, and four-way matching compared

Two-way matching checks invoice against PO; three-way adds the receiving record; four-way adds an inspection or quality check. The right level depends on what you buy.

Match typeDocuments comparedBest forWhat it catches
Two-wayInvoice, POServices and subscriptions with no physical receiptPrice and quantity above what was ordered
Three-wayInvoice, PO, receiving recordPhysical goods, inventory, equipmentAll of the above, plus billing for goods not received
Four-wayInvoice, PO, receiving record, inspectionRegulated or quality-sensitive goodsAll of the above, plus goods received but rejected

For a SaaS or services company, most spend is non-PO or two-way. Three-way matching earns its keep wherever physical goods arrive: hardware, inventory, equipment, and supplies for the teams that ship them.

How do I do three-way matching for AP invoices?

Do three-way matching in five steps: set tolerances, link each invoice to its PO, compare against the receipt, apply the tolerance rules, and route exceptions. Run the steps in the same order on every invoice so the result is repeatable.

Step 1. Set your tolerances

A tolerance is the maximum variance you accept between invoice and PO without human review. Use two kinds together: a percentage tolerance and an absolute difference limit, and apply whichever is stricter. A 2% tolerance on a $50 line is one dollar; the same 2% on a $500,000 line is $10,000, which is why the absolute cap matters.

NetSuite's 3 Way Match Vendor Bill Approval workflow uses the same structure. It supports a tolerance limit (a percentage) and a difference limit (an absolute quantity), set on the item, vendor, and subsidiary records, and compares the vendor bill to both the purchase order and the item receipt.

CheckExample tolerance (illustrative)Rationale
Unit price, invoice vs PO2% or $0.25 per unit, whichever is lowerAbsorbs rounding and small freight allocations
Quantity, invoice vs PO0 units overNever pay for more than you ordered
Quantity, invoice vs receipt0 units overNever pay for more than arrived
Invoice total vs PO total1% or $100, whichever is lowerCatches tax and fee surprises

Match the invoice to its PO by PO number, then match each invoice line to a PO line by item. Invoices without a PO number go back to the supplier or to a non-PO approval path. Guessing the PO from the vendor name alone is how the wrong order gets closed.

Step 3. Compare against the receiving record

Pull every receipt posted against that PO and total the received quantity per line. Include partial receipts. If nothing has been received, the invoice holds until the receipt posts; it does not pass on the PO alone.

Step 4. Apply the tolerance rules

Compare quantity and price line by line and flag any line outside tolerance. A line passes only if billed quantity is no more than received quantity and unit price sits within the price tolerance. The invoice passes only if every line passes.

Step 5. Route exceptions to an owner

Send each out-of-tolerance invoice to the buyer who raised the PO, with the variance and its dollar value shown. The buyer decides: accept the variance, request a credit or corrected invoice from the supplier, or hold until the rest of the goods arrive. The decision and the approver's name are stored with the invoice.

Worked example: a price variance and a quantity mismatch

Here is one invoice that fails on both price and quantity, and how the match resolves it. The numbers are illustrative.

A company orders 500 units of a component at $12.00 each. The warehouse receives 480 units. The supplier invoices for 500 units at $12.30.

LinePurchase orderReceiving recordInvoiceVarianceWithin tolerance?
Quantity50048050020 units billed but not receivedNo (0 units allowed)
Unit price$12.00n/a$12.30$0.30 per unit (2.5%)No (limit 2% or $0.25)
Line total$6,000.00$5,760.00 at PO price$6,150.00$390.00 over received valueNo

The quantity check fails because the supplier billed 20 units that never arrived. The price check fails because $0.30 per unit is 2.5%, above the 2% limit, and above the $0.25 absolute cap as well. The invoice holds and goes to the buyer.

The buyer has three reasonable outcomes:

• Supplier issues a corrected invoice for 480 units at $12.00, a total of $5,760.00. The invoice now matches and posts.

• Buyer accepts the price increase but not the quantity, approving 480 units at $12.30, a total of $5,904.00. The $144.00 difference (480 × $0.30) is recorded as a purchase price variance.

• Buyer holds the remaining 20 units until they arrive, then approves a second invoice for them.

Journal entries for the worked example

If your ERP accrues at receipt, the receipt creates a received-not-billed liability at PO price, and the matched bill clears it. Account names and variance treatment depend on your costing method, so confirm the setup in your own ERP.

When the 480 units are received at the PO price:

AccountDebitCredit
Inventory$5,760.00
Received not billed (accrued purchases)$5,760.00

When the buyer approves 480 units at $12.30:

AccountDebitCredit
Received not billed (accrued purchases)$5,760.00
Purchase price variance$144.00
Accounts payable$5,904.00

If the supplier instead corrects the invoice to $12.00, the second entry is a straight $5,760.00 debit to received not billed and credit to accounts payable, with no variance.

The $390.00 the supplier originally overbilled never reaches accounts payable. That is the whole point of the control.

Where three-way matching lives in QuickBooks and NetSuite

NetSuite supports three-way matching natively through item receipts and the 3 Way Match Vendor Bill Approval workflow; QuickBooks Online supports POs but has no separate receiving record. That difference shapes how you automate.

• NetSuite. Purchase orders, item receipts, and vendor bills are separate transactions. The 3 Way Match Vendor Bill Approval workflow compares bill to PO and bill to item receipt, with exception criteria for quantity tolerance, quantity difference, and amount tolerance.

• QuickBooks Online. Purchase orders are available only in QuickBooks Online Plus and Advanced. You add an open PO to a bill, and QuickBooks closes the PO automatically once all quantities are billed. Intuit's documentation describes no separate receiving transaction, so receipt confirmation has to come from somewhere else: a warehouse log, an inventory app, or a requester's sign-off.

On QuickBooks, a three-way match is therefore a workflow you build around the ledger rather than a setting you switch on.

How to automate three-way matching

Automate three-way matching by running the five steps as fixed rules on every invoice, and sending only out-of-tolerance invoices to a person. The rules do not change between runs, which is what makes the control testable.

The flow in Loopfour Studio looks like this: invoice arrives → the Invoice Agent extracts header and line items → any read below the confidence threshold goes to an AP reviewer → PO and receipts are pulled from NetSuite (or from your receiving source for QuickBooks) → quantity and price are compared line by line against your tolerance table → matched invoices post as bills → exceptions go to the buyer in Slack with the variance and dollar value → the buyer's decision is recorded in the execution tree.

AI is used for one scoped task, reading the invoice, and a person confirms every low-confidence read. The match itself is arithmetic, and arithmetic should never be probabilistic.

Book a workflow review to see your own PO and receipt data run through a deterministic match.

For the full path from PDF to posted bill, see how to automate invoice processing.

How to choose a three-way matching approach

Choose based on where your receiving data lives and who has to maintain the rules. Three approaches are common.

• Native ERP matching is the right starting point on NetSuite. It is built in and understood by auditors. It covers bill-to-PO and bill-to-receipt comparisons, but routing and notification rely on NetSuite's workflow setup.

• Horizontal automation platforms can connect QuickBooks to a warehouse app and run a match. They are flexible, and that flexibility is real. Your team owns the logic, the tolerance table, and every edge case when a PO is partially received twice.

• Deterministic, finance-specific automation runs the tolerance rules identically every time, routes exceptions to the PO owner, and logs every decision. You approve the exceptions; you do not re-check the matches.

Loopfour builds, monitors, and maintains the matching workflow as a managed service, so a new receiving source or a changed tolerance does not become an engineering ticket.

Frequently asked questions

How do I do three-way matching for AP invoices? Set price and quantity tolerances, link each invoice line to its PO line, compare billed quantity to received quantity, apply the tolerance rules, and route any out-of-tolerance invoice to the buyer who raised the PO. Pay only invoices where every line passes.

What is an acceptable three-way match tolerance? There is no standard number; each company sets its own. A common pattern is a small percentage tolerance on unit price paired with an absolute dollar cap, and zero tolerance on billed quantity above received quantity.

What is the difference between two-way and three-way matching? Two-way matching compares the invoice to the purchase order only. Three-way matching adds the receiving record, so it also catches invoices for goods that never arrived.

Does QuickBooks Online do three-way matching? QuickBooks Online Plus and Advanced support purchase orders that you can add to bills, and they close automatically when fully billed. Intuit's documentation describes no separate receiving transaction, so receipt confirmation has to come from a system or sign-off outside QuickBooks.

Is the AP three-way match the same as the Stripe, GL, and bank three-way match? No. The AP version is a pre-payment control comparing invoice, PO, and receipt. The cash version is a reconciliation that proves processor records, ledger entries, and bank deposits agree after the fact.

What happens to the variance when a buyer accepts a higher price? The accepted difference is usually recorded as a purchase price variance or added to the item's cost, depending on your costing method. In the worked example, accepting $12.30 on 480 units creates a $144.00 variance.

Conclusion

Three-way matching in accounts payable is simple arithmetic with a strong control behind it: pay only for what you ordered and received, at the price you agreed. Set clear tolerances, run the match the same way on every invoice, and send only the exceptions to the buyer. That is how the control catches overbilling like the $390.00 in our example without slowing every clean invoice.

Tell us the one workflow your team dreads. We will show it running — deterministic, permissioned, and auditable.

Book a demo.

Sources

• Oracle NetSuite, Setting tolerance and difference limits (3 Way Match Vendor Bill Approval)

• Oracle NetSuite, 3 Way Match Vendor Bill Approval exception criteria

• Intuit QuickBooks, Add purchase orders to expenses, bills, or checks in QuickBooks Online

• How to run a three-way match between Stripe, the general ledger, and the bank

• How to automate invoice processing, from PDF to posted bill

• What is invoice processing? The steps, and how long each invoice should take

• How to set up an AP approval workflow that auditors accept

• How to prevent duplicate vendor payments

Sources

  1. Oracle NetSuite, Setting tolerance and difference limits (3 Way Match Vendor Bill Approval) (opens in a new tab).
  2. Oracle NetSuite, 3 Way Match Vendor Bill Approval exception criteria (opens in a new tab).
  3. Intuit QuickBooks, Add purchase orders to expenses, bills, or checks in QuickBooks Online (opens in a new tab).