Three-Way Matching Explained: How Invoice, PO, and Goods Receipt Get Verified Automatically
Three-way matching checks a vendor invoice against the purchase order and goods receipt before payment. Here's exactly how it works and why it matters.
By Artificial Wit Team

Three-way matching is the check that compares a vendor's invoice against the original purchase order and the goods receipt before a payment goes out, and if any of the three disagree on item, quantity, or price, the payment gets held instead of released automatically. It's the standard defense against paying for something that was never ordered, never delivered, or billed at the wrong price, and it's a required stage in most procure-to-pay workflows for exactly that reason.
Sofia handled accounts payable for a 45-person manufacturing firm, and six months before her company adopted automatic matching, a vendor invoice for 200 units went through at full price even though only 180 units had actually arrived. Nobody caught it until the next physical inventory count turned up a 20-unit shortfall that didn't match what had been paid for. The overpayment wasn't fraud, it was a shipping shortfall that happened to slip through, but the company had already paid for units it never received, and getting the vendor credit took another six weeks.
This guide explains exactly how three-way matching works, what happens when something doesn't match, and where it fits inside a broader procure-to-pay workflow.
- Three-way matching compares the purchase order, the vendor invoice, and the goods receipt on item, quantity, and price.
- A mismatch outside acceptable tolerances holds the payment, it doesn't get released automatically until resolved.
- This catches both fraud and honest errors, like Sofia's shipping shortfall, that a two-way check (invoice vs. PO only) would miss.
- The goods receipt is the missing piece two-way matching doesn't have, confirmation of what actually arrived, not just what was ordered.
- Matching works best when it's one stage in a connected workflow, not a manual cross-check between three separate systems.
The three documents, and what each one confirms
Three-way matching pulls together three records that, on their own, only tell part of the story:
- The purchase order (PO) confirms what was ordered: item, quantity, and agreed price.
- The goods receipt (GRN) confirms what actually arrived, which isn't always the same as what was ordered.
- The vendor invoice confirms what the vendor is billing for.
Matching all three catches problems a simpler check misses. NetSuite's explainer covers the same three-document structure; the point of including the goods receipt specifically, not just the PO and invoice, is that it's the only one of the three that confirms physical reality rather than a paper agreement.
How the check actually runs
When an invoice comes in, the system pulls the corresponding PO and goods receipt automatically and compares all three on item, quantity, and unit price.
If everything matches within tolerance: the invoice is approved for payment automatically, no manual review needed.
If something doesn't match: the invoice is held. A hold isn't a rejection, it's a flag that something needs to be reviewed before payment proceeds, whether that's a genuine discrepancy, a rounding difference, or a partial shipment that hasn't fully arrived yet.
Common mismatch scenarios:
| Scenario | What matching catches |
|---|---|
| Vendor bills for more units than delivered | Quantity mismatch between invoice and goods receipt |
| Vendor bills at a different price than quoted | Price mismatch between invoice and PO |
| Invoice arrives before goods receipt is logged | Missing goods receipt, hold until delivery is confirmed |
| Partial shipment, full invoice | Quantity mismatch, often resolved as goods arrive in a second shipment |
Why two-way matching isn't enough
Two-way matching, comparing only the invoice against the PO, catches price discrepancies and unauthorized purchases, but it can't catch the exact scenario Sofia ran into: a vendor billing correctly against what was ordered, for a quantity that was never actually delivered. Without the goods receipt in the comparison, "the vendor billed what we agreed to" and "the vendor delivered what we agreed to" get treated as the same fact when they aren't.
This is also the core mechanism behind fraud prevention. AvidXchange's guide frames it the same way: three-way matching exists specifically to prevent paying unauthorized, duplicate, or incorrect invoices, and the goods-receipt check is what makes "incorrect" catchable in cases where the paperwork alone looks fine.
Where this fits in a full procure-to-pay workflow
Three-way matching is most useful when it's a connected stage in one system, not a manual cross-check between a procurement tool, a warehouse spreadsheet, and an accounting system. When the PO, goods receipt, and invoice already live in the same platform, the match runs automatically the moment an invoice arrives, instead of requiring someone to pull three documents from three places and eyeball them.
This is the same mechanism covered as one stage of the broader six-stage procure-to-pay cycle, requisition through payment, in our procure-to-pay software guide. The goods receipt stage doesn't just enable matching, it also automatically creates the asset record for whatever was received, so the same event that unlocks payment verification also starts the asset's lifecycle tracking.
See automatic three-way matching against your own POs and invoices. Sign up free, no credit card required.
What happens after a mismatch is resolved
Once a held invoice is reviewed and resolved, whether that means a vendor credit, a corrected invoice, or confirmation that a delayed shipment has now fully arrived, the match re-runs and the invoice proceeds to payment normally. The hold isn't a dead end, it's a checkpoint. Sofia's shipping-shortfall scenario, under an automated three-way match, would have been caught the moment the invoice arrived rather than six weeks later during a physical count, turning a slow vendor-credit negotiation into a same-day correction.
Frequently asked questions about three-way matching
What's the difference between two-way and three-way matching?
Two-way matching compares only the invoice against the purchase order. Three-way matching adds the goods receipt, confirming what was actually delivered, not just what was ordered and billed.
What happens if an invoice doesn't match?
The invoice is held rather than paid automatically. It stays in that state until the discrepancy is reviewed and resolved, whether that's a correction, a vendor credit, or confirmation that a partial shipment has now completed.
Does three-way matching slow down payment for everything?
No. Invoices that match within tolerance are approved automatically. Only mismatches get held for review, which is a minority of invoices in a healthy procurement process.
Can three-way matching prevent duplicate payments?
Yes, matching against the same PO and goods receipt a second time for what's already been paid is exactly the kind of duplicate the check is designed to catch.
Does this require a separate accounts-payable tool?
Not if the PO, goods receipt, and invoice already live in the same procurement platform, the match runs as one connected stage rather than requiring a separate AP system to reconcile against.
Getting started
Three-way matching is one of the simpler-sounding parts of procurement to explain and one of the easiest to get wrong when it's done manually across disconnected systems. The mechanism itself isn't complicated, compare three documents, hold what doesn't match, it's keeping all three documents in the same place that makes the check actually reliable.
Sign up free and see three-way matching run automatically → No credit card required.
Related reading
Ready to put this into practice?
Talk to us about your stack

