---
title: "3 Way Match: The Fields, Tolerances, and Exceptions Explained"
description: "How a 3 way match compares the PO, goods receipt, and invoice line by line, what tolerances decide, and when two-way match is the better control for AP."
author: "Monty Ali"
published: 2026-08-14
updated: 2026-08-14
category: "Finance Ops"
canonical: https://gitspark.com/blog/3-way-match
source: Gitspark, https://gitspark.com
---

# 3 Way Match: The Fields, Tolerances, and Exceptions Explained

How a 3 way match compares a purchase order, goods receipt, and invoice line by line, what a matching tolerance actually is, the mismatches that turn up most often, and when three-way matching is more control than your business needs.

A pallet shows up eighteen units short. The invoice bills for all of them anyway. Nobody notices, because it gets paid before anyone puts the delivery note next to the invoice, and the shortfall turns up three weeks later as a line item nobody can explain.

**3 way match** is the accounts payable control built to catch exactly that. It compares three documents before anything gets paid: the purchase order, showing what was agreed; the goods receipt, showing what actually arrived; and the invoice, showing what the vendor wants for it. When the three agree, the invoice pays. When they don't, someone reviews the gap first.

This goes deep on the mechanics: what each document actually contributes, the exact fields worth comparing, how to set a tolerance instead of chasing every cent, the mismatches that show up most often and what to do about each, and an honest read on when three-way matching is more control than your business needs.

## What each document brings to a 3 way match

The **purchase order (PO)** is where the match starts. It's the record of what your business agreed to buy, at what price, and in what quantity, issued before any money moves. Everything downstream gets checked against it, because it's the only one of the three documents that reflects what you actually authorized.

The **goods receipt** is the physical reality check. Someone counted what came off the truck and logged it, separate from anyone touching the invoice. It exists to answer one question: did what you ordered actually show up, in the quantity you're about to be billed for?

The **invoice** is the vendor's claim on your money, and it's the only one of the three the vendor controls. That's exactly why it doesn't get paid on its own. A three-way match works because the PO and goods receipt are both generated inside your business, independent of what the vendor decides to bill.

> **INFO:** A two-document match, invoice against PO, tells you the price and quantity you agreed to. Only the goods receipt tells you what actually arrived, which is the entire reason a three-way match exists.

## The fields a 3 way match actually compares

**Invoice matching** isn't a document-level check, it's line by line, field by field. The table below shows what each document is expected to say, and which fields the match is actually built to catch a disagreement on.

| Field | Purchase order | Goods receipt | Invoice |
| --- | --- | --- | --- |
| Vendor | Approved vendor on the order | Vendor who delivered (should match) | Vendor billing (should match) |
| Item / SKU | Item code ordered | Item code received | Item code billed |
| Quantity | Quantity ordered | Quantity actually received | Quantity billed |
| Unit of measure | Case, pallet, or each, as ordered | UOM logged on receipt | UOM billed |
| Unit price | Price agreed at order | Not applicable, receipts don't carry price | Price billed |
| Extended line total | Quantity × price ordered | Not applicable | Quantity × price billed |
| Tax and freight | Usually excluded from the match | Not applicable | Matched separately, see below |

Price and quantity carry most of the match. Unit of measure is the field people forget, and it's the one that quietly multiplies an error: if the PO says cases and the invoice bills individual units, every other field can agree and the total will still be wrong by the pack size.

## What a matching tolerance is, and how to set one

A **tolerance** is the small, defined difference a match allows without flagging an exception. Without one, a match run at face value throws an exception on every currency rounding difference and every case that ships half a unit light, which turns a control meant to save time into the thing eating it.

| Field | Typical tolerance | Why |
| --- | --- | --- |
| Price | 2 to 5%, or a small fixed amount (e.g. $5 per line), whichever is larger | Absorbs currency conversion and rounding, not real overbilling |
| Quantity | Zero, or a defined unit or case count | Partial pallets and breakage are real, but should stay visible, not get silently absorbed |
| Freight and handling | Matched separately against agreed shipping terms, not the PO price | Freight is rarely on the PO line at all |
| Tax | Recalculated, not matched | Tax is a rate applied to the line, not a quantity or price comparison |

> **TIP:** Too tight a tolerance turns every rounding difference into a manual exception, which is how a control built to save time ends up costing more of it. Too loose, and it stops catching anything real. Start at 2% or $5 on price, whichever is larger, and tighten it only if real exceptions keep slipping through.

## A worked 3 way match example

Say a distributor orders two things on the same purchase order: 1,000 corrugated shipping boxes at $0.85 each, and 200 rolls of pallet stretch wrap at $12.00 each. The truck arrives, the warehouse counts what's on it, and logs a goods receipt before the invoice even lands.

The boxes show up in full. The stretch wrap doesn't: 185 rolls arrive instead of 200, but the invoice bills for the full 200 anyway, at the agreed price. Here's the match, line by line.

| Line item | PO: qty @ unit price | Goods receipt: qty received | Invoice: qty @ unit price | Match result |
| --- | --- | --- | --- | --- |
| Corrugated shipping boxes | 1,000 @ $0.85 | 1,000 | 1,000 @ $0.85 | Matched |
| Pallet stretch wrap | 200 @ $12.00 | 185 | 200 @ $12.00 | Quantity variance |
| **Totals** | **$3,250.00** | **Value at PO price: $3,070.00** | **$3,250.00** | **Held: $180.00** |

The variance is exactly the 15 rolls that never arrived: 15 × $12.00 = $180.00. A 3 way match catches this because the goods receipt, not the invoice, is the source of truth for quantity. Pay the $3,070.00 the receipt supports, hold the $180.00 open, and let the vendor either ship the rest or issue a credit.

- **3** — documents compared
- **15 units** — short-shipped
- **$180** — held back

![A purchase order and goods receipt laid side by side on a desk during a 3 way match](https://images.gitspark.com/blog/content/3-way-match-1786730770682.jpg)

*The goods receipt is the tiebreaker: it's the only one of the three documents the vendor never touches.*

**See what manual matching costs you** Checking three documents by hand on every invoice adds up fast. The labor cost calculator turns your own invoice volume into an annual number. [Use the labor cost calculator](https://gitspark.com/tools/labor-cost-calculator)

## How to resolve a 3-way match exception, step by step

Not every exception means the same thing, and treating them all as "call the vendor" wastes the one advantage a three-way match gives you: it tells you exactly which figure disagrees. Here's what each common mismatch means and what to do about it.

1. **Price variance**. The invoice charges more per unit than the PO agreed. Hold the payment at the PO price and ask the vendor to either match it or send a credit for the difference before paying the balance.
2. **Quantity variance**. The invoice bills for more than the goods receipt shows arrived. Pay against the received quantity, not the invoiced quantity, and leave the gap open until the vendor ships the rest or credits it.
3. **Partial delivery**. The goods receipt shows the order split across two or more shipments. Match and pay each shipment against its own portion of the PO as it arrives, rather than waiting for the whole order to land.
4. **Freight and handling charges**. The invoice adds a shipping or handling line that never appeared on the PO. Check it against the agreed shipping terms separately, since freight usually isn't a line the match itself is built to catch.
5. **Duplicate invoice**. The same invoice number, amount, and vendor show up twice, sometimes weeks apart. Reject the second one outright rather than matching it again, since a duplicate will pass every check and pay in full a second time.

> **WARN:** Duplicate invoices are the one exception a 3 way match doesn't catch on its own. Both copies can match the same PO and receipt perfectly; only a check against invoice number and vendor stops the second payment going out.

Where exceptions land varies by business, but the shape is fairly consistent. Quantity variances are usually the most common, price variances close behind, and duplicates are rare but the one type worth catching every single time. Here's a typical, illustrative split, not a figure from any one client.

**A typical mix of 3-way match exceptions**

|  | Value |
| --- | --- |
| Quantity variance | 38% |
| Price variance | 27% |
| Partial delivery | 18% |
| Freight / handling | 12% |
| Duplicate invoice | 5% |

![An accounts payable clerk circling a quantity discrepancy on a vendor invoice with a red pen](https://images.gitspark.com/blog/content/3-way-match-1786730778246.jpg)

*A quantity variance is a hold, not a rejection. Pay what the receipt supports and leave the gap open.*

## When two-way match is enough, and what changes when it runs itself

Three-way matching earns its cost when goods receipts actually exist and someone checks against them. If your business doesn't carry physical inventory, a services firm, an agency, most SaaS spend, there's nothing for the goods receipt to compare against, and the control quietly becomes a two-document match wearing a three-document label.

Two-way match, invoice against PO, catches the same overbilling with one fewer document to chase on every invoice, forever. For fixed recurring bills, rent, software subscriptions, utilities, even a formal match is often more process than the risk justifies. Approve those on a schedule instead. For the wider process this control sits inside, see [the accounts payable process](/blog/accounts-payable-process).

> **TIP:** If nobody logs what physically arrives, don't run three-way matching. It gives the appearance of a check with nothing behind it, and that's worse than an honest two-way match, because it looks solved when it isn't.

The manual version of this doesn't scale past a handful of invoices a week: three documents, however many line items, checked by a person who also has other things due today. That's the part that's actually mechanical, comparing numbers across three sources, which is exactly what [the agents we build](/#agents-we-build) do for document intake: read the PO, the receipt, and the invoice, flag only the lines that fall outside tolerance, and leave the judgment call, is this variance real, to a person.

It's the same capability behind [SmallERP](/work/document-processing), which reads receipts and invoices and keeps them coded and matched without someone re-typing every line by hand. The match logic doesn't change; what changes is who's running it, and how few exceptions a person actually has to look at. The [automation ROI calculator](/tools/automation-roi-calculator) will tell you whether closing that gap is worth building against at your invoice volume.

## Frequently asked questions

### What is a 3 way match?

A 3 way match compares three documents before an invoice gets paid: the purchase order, showing what was ordered and at what price; the goods receipt, showing what actually arrived; and the invoice, showing what the vendor wants for it. If all three agree on vendor, item, quantity, and price, the invoice pays. If they don't, someone reviews the gap first.

### What is the difference between two-way and three-way matching?

Two-way match checks the invoice against the purchase order only, confirming the price and quantity billed match what was agreed. Three-way match adds the goods receipt, confirming what actually arrived. The extra step catches a case two-way match can't: being billed for more units than were physically delivered.

### What fields does a 3 way match compare?

The core fields are vendor, item or SKU, unit of measure, quantity, and unit price, checked line by line across the purchase order, goods receipt, and invoice. Extended line totals get checked too. Tax and freight are usually matched separately, since neither typically appears on the purchase order itself.

### What is a matching tolerance?

A tolerance is the small, defined difference a match allows without flagging an exception, usually a percentage or fixed dollar amount on price, and a set unit count on quantity. It exists so rounding, currency conversion, and minor packaging differences don't generate a manual review on every invoice. A common starting point is 2% or $5 on price, whichever is larger.

### What happens when a 3 way match fails?

The invoice gets held instead of paid. Accounts payable reviews which figure disagrees, price, quantity, or vendor, and either pays against the lower of the three documents, asks the vendor for a corrected invoice or credit, or escalates a larger variance for approval. The invoice releases once the documents agree or someone signs off on the gap.

### Do I need three way matching in accounts payable for my business?

Only if you carry physical inventory or make large purchases where the quantity received genuinely needs checking against a physical receipt. Most service businesses, agencies, and software-heavy companies get the same protection from a simpler two-way match against the purchase order, without tracking a goods receipt for every invoice.

### Can 3-way matching be automated?

Yes. The comparison itself, checking quantities, prices, and units across three documents, is mechanical and well suited to automation. What still needs a person is judgment on a real exception: whether a variance is a fraud risk, a vendor error, or a legitimate partial delivery worth approving anyway.

## The bottom line

A 3 way match is only as useful as the documents behind it. If a goods receipt exists and someone's logging it accurately, the match catches real overbilling before it goes out the door. If it doesn't, the match is theater, and an honest two-way match against the PO is the better control.

Set a tolerance so rounding doesn't eat a day's work, know the five ways a match actually fails, and decide, on purpose, whether your invoice volume justifies checking it by hand or automating the comparison and keeping a person on the exceptions.

**Is your matching process worth automating?** Bring your invoice and PO volume to a 30-minute call. If three-way matching isn't the right control for your business, we'll say so. [Book a 30-min call](https://gitspark.com/#contact)
