Three-Way Match in Procure to Pay

Before a company pays a vendor, someone must answer three simple questions. Did we order this? Did we receive it? Is the bill for what we ordered and received? The three-way match answers all three by comparing three documents: the purchase order, the goods receipt note and the vendor’s invoice. In this lesson we see what each document holds, how the match works, what to do when it fails, and how SAP, Oracle and Excel help you.

What you will learn

  • What a purchase order, a goods receipt note and a vendor invoice each contain
  • How the three-way match works, step by step, and what tolerances are
  • A full worked example in rupees, with the journal entries
  • How to fix price mismatches, quantity mismatches, partial deliveries and missing GRNs
  • Two-way, three-way and four-way match, and when each is used
  • How SAP and Oracle automate the match, how to check it in Excel, and the controls that stop duplicate payments and fraud

The three documents

Think of three people telling the same story. The buyer says what was ordered. The store says what arrived. The vendor says what it wants to be paid. If all three stories agree, you can pay with confidence.

DocumentWho creates itWhat it holdsAnswers the question
Purchase order (PO)Purchase teamPO number, vendor, item, quantity, rate, tax, delivery date, payment termsWhat did we agree to buy, and at what price?
Goods receipt note (GRN)Stores or the person who received a servicePO number, item, quantity received and accepted, date, received byWhat actually arrived in good condition?
Vendor invoiceVendorInvoice number and date, vendor GSTIN, PO number, item, quantity, rate, GST, totalWhat is the vendor charging?

A PO is a formal order sent to the vendor once a purchase requisition is approved. A GRN is the internal record that goods were received. An invoice under GST is called a tax invoice, and it must show the vendor’s GSTIN, which you need to claim input tax credit.

Remember: The PO is your promise, the GRN is your proof, and the invoice is the vendor’s claim. Pay the claim only when it agrees with the promise and the proof.

How the three-way match works

The match is done line by line. For each PO line, you compare:

  1. Quantity: the invoice quantity must not be more than the quantity received on the GRN.
  2. Price: the invoice rate must agree with the PO rate, within the allowed tolerance.
  3. Other details: same vendor, same item, GST rate and amount worked out correctly, PO number quoted.

This flowchart shows the whole process from order to payment. Read it from top to bottom. A diamond is a yes or no question: Yes continues down, No goes to the side. (The symbols are explained in the Bank Reconciliation Step by Step lesson.)

Three-way match from order to paymentApproved purchaserequisitionPurchase order sent to thevendorGoods arrive, stores recordthe GRNVendor invoice is receivedand enteredCompare invoice with PO andGRN, line by lineDo quantity andprice match withintolerance?NoPut the invoice onhold and find thecauseYesInvoice is approved andpostedPayment run in SAP orOracleVendor paid on the due dateStart / EndDocument / ReportStepInput / OutputDecisionSystem / Data
Three-way match from order to payment

Tolerances

Small differences happen all the time, like a rupee of rounding or a small freight increase. If every tiny difference stopped an invoice, the AP team would spend all day releasing holds. So companies set a tolerance: the largest difference they accept without a second approval.

Tolerances are set by the finance controller and written into the AP policy. A common pattern is a percentage with a rupee cap. For our example company the policy is:

CheckTolerance
PriceInvoice rate up to 1% above the PO rate, and the extra on one line not more than ₹1,000
QuantityZero. Never pay for more than was received
Invoice rate below PO rateAccepted, you pay the lower amount

Tip: A percentage alone is risky on big orders. 1% of a ₹50 lakh line is ₹50,000. A rupee cap such as ₹1,000 keeps large overcharges from slipping through.

Worked example: Patel Auto Components

Patel Auto Components Pvt Ltd in Pune buys material from Shree Ganesh Steels, also in Pune. Both are in Maharashtra, so GST is charged as CGST 9% plus SGST 9%.

The purchase order

PO 4500001234, dated 2 September 2026.

LineItemQuantityRate (₹)Value (₹)
10Steel rods1,000 kg62.0062,000
20Ball bearings200 pcs150.0030,000
30Packing boxes500 pcs24.0012,000
Taxable value1,04,000
GST 18%18,720
PO total1,22,720

The goods receipt note

GRN dated 15 September 2026. The store counted what arrived.

LineItemOrderedReceived and accepted
10Steel rods1,000 kg1,000 kg
20Ball bearings200 pcs180 pcs
30Packing boxes500 pcs500 pcs

The vendor invoice

Invoice SGS/0457, dated 16 September 2026.

LineItemQuantityRate (₹)Value (₹)
10Steel rods1,000 kg62.5062,500
20Ball bearings200 pcs150.0030,000
30Packing boxes500 pcs24.0012,000
Taxable value1,04,500
CGST 9%9,405
SGST 9%9,405
Invoice total1,23,310

Check: ₹1,04,500 plus ₹9,405 plus ₹9,405 is ₹1,23,310.

The match, line by line

LineQuantity checkPrice checkResult
10Invoiced 1,000, received 1,000. OK₹0.50 above PO rate, which is 0.81%. Extra is ₹500, under ₹1,000. Within toleranceMatch
20Invoiced 200, received 180. 20 pcs too many, worth ₹3,000Same rate. OKHold
30Invoiced 500, received 500. OKSame rate. OKMatch

How did we get 0.81%? ₹0.50 divided by ₹62 is 0.0081, or 0.81%. That is under 1%, and ₹0.50 × 1,000 kg is ₹500, under the ₹1,000 cap.

Line 20 fails, so the whole invoice goes on hold. The AP team asks the buyer to talk to the vendor. Shree Ganesh Steels confirms that only 180 bearings were sent and the other 20 will not come. It issues a credit note (a document that reduces an invoice) for 20 × ₹150 = ₹3,000 plus GST of ₹540 (CGST ₹270, SGST ₹270), a total of ₹3,540.

The amount to pay is now ₹1,23,310 − ₹3,540 = ₹1,19,770.

Taxable (₹)GST (₹)Total (₹)
Invoice SGS/04571,04,50018,8101,23,310
Less: credit note3,0005403,540
Net payable1,01,50018,2701,19,770

Journal entries

Most ERPs use a GR/IR clearing account (goods received, invoice received). It is a temporary account. The GRN puts goods into stock and credits GR/IR. The invoice debits GR/IR and credits the vendor. When both have happened, GR/IR for that PO comes back to zero.

Entry 1: goods received, 15 September. Goods are valued at the PO rate for the quantity received: 62,000 + (180 × 150 = 27,000) + 12,000 = ₹1,01,000.

AccountDebit (₹)Credit (₹)
Inventory, raw and packing material1,01,000
GR/IR clearing1,01,000

Entry 2: invoice and credit note posted after the hold is cleared (net effect).

AccountDebit (₹)Credit (₹)
GR/IR clearing1,01,000
Purchase price difference500
Input CGST9,135
Input SGST9,135
Shree Ganesh Steels (trade payable)1,19,770
Totals1,19,7701,19,770

The ₹500 is the small price increase on steel rods that we accepted within tolerance. Depending on how your company values stock, the ERP posts it to a price difference account or adds it to the stock value. GST is 9% of ₹1,01,500, which is ₹9,135 each for CGST and SGST.

Entry 3: payment on the due date.

AccountDebit (₹)Credit (₹)
Shree Ganesh Steels (trade payable)1,19,770
Bank account1,19,770

GR/IR is now ₹1,01,000 credit minus ₹1,01,000 debit, which is zero. The vendor is fully paid.

Note: Depending on your turnover and the vendor, TDS on purchase of goods may apply and would reduce the payment. We leave TDS out here to keep the match clear.

Common mismatches and how to fix them

MismatchExampleUsual fix
PriceInvoice rate higher than PO rateAsk the buyer. Credit note from the vendor, or an amended PO if a new rate was agreed
QuantityInvoice for more than was receivedCredit note for the extra, or wait for the rest to arrive
Partial deliveryOnly part of the order has arrivedPay only for what was received. Match the rest when it comes
Missing GRNInvoice arrives before the store records the receiptAsk the store or requester. Record the GRN if goods came, otherwise hold
Rejected goodsGoods arrived damaged and were sent backCredit note or debit note for the rejected quantity
Tax errorWrong GST rate, or IGST charged instead of CGST and SGSTAsk the vendor for a corrected invoice or a credit note

Price mismatch

Fixing a price mismatchInvoice rate is above thePO rateIs it within theprice tolerance?NoPut the invoice onhold, tell the buyerYesAccept it and post thesmall varianceInvoice moves to paymentStart / EndDecisionStep
Fixing a price mismatch

The No path is where the work is. This chart shows it in detail.

Price above toleranceInvoice held for priceBuyer checks the agreedrate with the vendorDid the buyer agreeto the new rate?NoAsk the vendor for acredit noteYesBuyer amends the PO withapprovalAP releases the holdInvoice moves to paymentStart / EndStepDecision
Price above tolerance

Common mistake: Changing the PO rate just to make an invoice match, without the buyer’s approval. That removes the whole point of the control. A PO change must be approved like a new PO.

Quantity mismatch and partial delivery

Fixing a quantity mismatchInvoice quantity is morethan GRN quantityAsk the store to recountand check the GRNWas the GRN correct?NoStore corrects theGRN, match againYesWill the vendor sendthe balance soon?NoAsk the vendor for acredit noteYesKeep the invoice on holduntil it arrivesStore records a second GRNMatch passes and the holdis releasedStart / EndStepDecision
Fixing a quantity mismatch

Missing GRN

An invoice with no GRN at all is common. The goods may have arrived and nobody recorded them, or they may not have arrived yet.

Invoice with no GRNInvoice arrives, no GRNfoundAsk the store or requesterabout the goodsDid the goods orservice arrive?NoHold the invoice andtell the vendorYesStore records the GRN withthe real dateRun the match againInvoice moves to payment ifit matchesStart / EndStepDecision
Invoice with no GRN

For services, the “receipt” is a confirmation from the person who used the service, for example a service entry sheet in SAP (transaction ML81N in SAP ECC). It records which services were done and their value.

Two-way, three-way and four-way match

Not every purchase needs the same level of checking.

TypeComparesUsed for
Two-wayPO and invoiceServices or low-value items where no receipt is recorded
Three-wayPO, GRN and invoiceMost goods. The standard for stock items
Four-wayPO, GRN, inspection result and invoiceItems that must pass a quality check before you pay, like raw material for production

In a four-way match, the store records the receipt, then the quality team inspects the goods. You pay only for the quantity accepted after inspection, not only received.

How ERPs automate the match

In an ERP, nobody compares the three documents by hand. The system matches when the invoice is entered and blocks it if anything is outside tolerance.

Three-way match inside an ERPPO created in the ERPGRN posted against the POInvoice entered with the POnumberSystem compares invoicewith PO and GRNIs everything withintolerance?NoSystem blocks theinvoice for paymentYesInvoice is posted and freefor paymentIncluded in the nextpayment runStart / EndSystem / DataInput / OutputStepDecision
Three-way match inside an ERP

In SAP

  • ME21N creates a purchase order.
  • MIGO posts the goods receipt against the PO (movement type 101 is a goods receipt for a PO).
  • MIRO enters the vendor invoice and matches it with the PO and GRN.
  • MIR7 parks an invoice, which saves it without posting, for example while you wait for an answer.
  • MRBR releases invoices that were blocked for price or quantity differences.
  • F110 is the automatic payment program that pays due invoices in a batch.

On the PO line there is a setting called GR-based invoice verification. When it is on, each invoice line must match a specific goods receipt, which is the strict form of three-way matching. Tolerance limits are set in configuration, with keys such as PP for price variance and DQ for quantity variance.

In Oracle

  • Oracle Purchasing creates the purchase order.
  • Oracle Receiving records receipts, and inspection where needed.
  • Oracle Payables enters the invoice and matches it to the PO or the receipt.

Each PO shipment line has a match approval level: 2-way, 3-way or 4-way. When the invoice is validated, Payables checks it against that level and the tolerances. If something does not agree, it places a hold (for example a price hold or a quantity received hold) and the invoice cannot be paid until the hold is released.

Checking the match in Excel

If your company is small, or you want to test the ERP’s results, you can do the same check in Excel. Make three sheets.

  • PO: A PO, B Line, C Item, D Qty, E Rate. Rows 2 to 4 hold the three PO lines.
  • GRN: A PO, B Line, C GRN No, D Qty received. One row per receipt, so a line delivered twice has two rows.
  • INV: A PO, B Line, C Qty billed, D Rate billed.

On the INV sheet, add three columns.

  1. In E1 type GRN qty, and in E2 type =SUMIFS(GRN!$D$2:$D$100,GRN!$A$2:$A$100,A2,GRN!$B$2:$B$100,B2). SUMIFS adds every receipt for that PO and line, so partial deliveries are counted together.
  2. In F1 type PO rate, and in F2 type =XLOOKUP(A2&"-"&B2,PO!$A$2:$A$4&"-"&PO!$B$2:$B$4,PO!$E$2:$E$4,"No PO line"). The &"-"& joins the PO number and line into one key, like 4500001234-10, so XLOOKUP finds the exact line.
  3. In G1 type Status, and in G2 type =IF(AND(C2<=E2,D2<=F2*1.01,(D2-F2)*C2<=1000),"Match","Hold").
  4. Copy E2:G2 down for every invoice line.

The IF formula checks our policy: quantity billed not more than received, rate not more than 1% above the PO, and the extra on the line not more than ₹1,000. For Patel Auto Components you get Match on lines 10 and 30 and Hold on line 20. To learn more about IF, see IF function.

  1. Select A2:G4, then Home > Conditional Formatting > New Rule > Use a formula to determine which cells to format, type =$G2="Hold", choose a red fill and select OK.

Catching duplicate invoices

Keep an invoice register with vendor GSTIN in column B and invoice number in column C. In D2 type =COUNTIFS($B$2:$B$500,B2,$C$2:$C$500,C2)>1 and copy it down. TRUE means the same vendor has sent the same invoice number twice.

Vendors often write the same number in different ways, like SGS/0457 and SGS-0457. Make a clean key first in E2 with =UPPER(SUBSTITUTE(SUBSTITUTE(C2,"/",""),"-","")), then count on column E instead of C.

Controls against duplicate payments and fraud

The three-way match is the most important control in Procure to Pay, but it works only with these around it:

  • No PO, no pay. An invoice without a PO goes back to the requester.
  • Different people. The person who creates a PO should not post the GRN, and neither should post the invoice or approve the payment. This is segregation of duties.
  • Vendor master control. A new vendor or a change of bank account needs a second person to approve it, and a call back to the vendor on a number you already have, not the one in the change request.
  • Duplicate invoice check. Switch on the ERP’s duplicate check. SAP can warn when the same vendor, invoice number, date and amount are entered again, and Oracle Payables checks invoice numbers for the same supplier.
  • GST checks. Check the vendor’s GSTIN is active and the invoice appears in your GSTR-2B before claiming input tax credit.
  • Split orders. Watch for several POs just below an approval limit for the same vendor on the same day.
  • Review before the payment run. Review the payment proposal (in SAP, the F110 proposal) before the run, looking for duplicates, round amounts and new vendors.
Checks before the payment runPayment proposal is readySort the proposal by vendorand amountAny duplicateinvoice numbers oramounts?NoMove to the nextcheckYesRemove duplicates and tellAP to block themAny new vendor orchanged bankaccount?NoApprove the proposalYesConfirm the change with acall back to the vendorApproved payment proposalPayment run goes aheadStart / EndStepDecisionDocument / Report
Checks before the payment run

Common mistakes

  • Paying for the quantity on the invoice instead of the quantity received.
  • Posting the GRN on the day the invoice arrives instead of the day goods arrived. The GRN date must be the real receipt date.
  • Releasing a hold without a reason recorded, or without the buyer’s approval for a price change.
  • Ignoring old balances on GR/IR. A balance that never clears means an invoice or a GRN is missing, or something was paid wrongly.
  • Setting tolerances only as a percentage, with no rupee cap.
  • Letting one person create vendors, raise POs and approve payments.

Quick recap

  • The three-way match compares the PO (what we ordered), the GRN (what we received) and the invoice (what the vendor charges), line by line.
  • Pay only for what was received, at the agreed rate, within a small tolerance.
  • When the match fails, hold the invoice, find the cause, and fix it with a credit note, an approved PO change or a new GRN.
  • The GR/IR clearing account links the GRN and the invoice, and should come back to zero.
  • SAP (ME21N, MIGO, MIRO, MRBR, F110) and Oracle (Purchasing, Receiving, Payables) run the match automatically and block what fails.
  • Duplicate checks, segregation of duties and vendor master control protect the payment.

Try it yourself

Patel Auto Components orders 50 office chairs from Comfort Seating, also in Maharashtra, on PO 4500001290 at ₹4,200 each. Two chairs arrive damaged and are rejected, so the GRN shows 48 accepted. The invoice is for 50 chairs at ₹4,250 each, plus GST at 18%. The tolerance policy is the same as in the lesson.

  1. Work out the invoice total.
  2. Does the price pass the tolerance? Does the quantity pass?
  3. The vendor agrees to bill 48 chairs at ₹4,200. What credit note should it issue?
  4. Write the journal entries for the GRN and for the corrected invoice. The chairs are office furniture, a fixed asset.

Answers

1. 50 × ₹4,250 = ₹2,12,500. GST 18% = ₹38,250. Invoice total = ₹2,50,750.

2. Price: ₹50 above the PO rate. ₹50 ÷ ₹4,200 is 1.19%, more than 1%, and the extra is 50 × ₹50 = ₹2,500, more than ₹1,000. It fails. Quantity: billed 50, accepted 48. It fails. The invoice goes on hold.

3. Correct amount: 48 × ₹4,200 = ₹2,01,600, plus GST of ₹36,288, total ₹2,37,888.

Taxable (₹)GST (₹)Total (₹)
Invoice2,12,50038,2502,50,750
Correct amount2,01,60036,2882,37,888
Credit note10,9001,96212,862

Check: ₹2,50,750 − ₹2,37,888 = ₹12,862, and 18% of ₹10,900 is ₹1,962.

4. GRN for 48 chairs at the PO rate:

AccountDebit (₹)Credit (₹)
Furniture and fixtures (fixed asset)2,01,600
GR/IR clearing2,01,600

Invoice and credit note together (net). GST is 9% of ₹2,01,600, which is ₹18,144 each for CGST and SGST:

AccountDebit (₹)Credit (₹)
GR/IR clearing2,01,600
Input CGST18,144
Input SGST18,144
Comfort Seating (trade payable)2,37,888
Totals2,37,8882,37,888

GR/IR comes back to zero and the vendor is owed exactly ₹2,37,888.

Where to go next

Keep going

102 free lessons across 6 topics

All articles