Before you pay a supplier's invoice, three documents should agree: what you ordered, what actually arrived and what the supplier billed. Checking this is called a three-way match, and it is the simplest control against paying for goods you never received or at a price you never agreed. This article explains how the check works and how Purchase (Beta), an Aicountly app that is still in Beta, handles it.
What a three-way match compares
The three documents are:
- Purchase order (PO): your commitment — items, quantities, agreed rate and any freight or other charges.
- Goods receipt (GRN): proof of what reached your warehouse, including shortages and rejected quantities.
- Supplier bill: what the supplier now asks you to pay.
A two-way match (PO against bill) misses short deliveries. A bill can look perfect against the order while only part of the goods came in. The receipt is the leg that catches it.
The three mismatches that cost money
1. Billed quantity higher than received
The order says 100, the supplier bills 100, but 90 arrived. Match the bill against what was received (less what earlier bills already covered), not what was ordered.
2. Billed rate higher than the agreed rate
Compare the net rate — after line discounts — with the net rate on the order. A bill at the gross list rate against a discounted order line charges you more than was agreed.
3. Lines or charges nobody ordered
An extra line, or freight larger than the order allowed, should never be absorbed quietly into the total.
Why tolerances matter
Demanding exact agreement on every paisa floods your team with exceptions; accepting anything defeats the control. The practical middle path is a tolerance policy: a small percentage on quantity and rate, an absolute value limit, and perhaps a threshold below which small bills pass automatically. Anything beyond tolerance goes to a person who must record why they accepted or rejected it.
How Purchase (Beta) does it
Everything below is described from the Purchase (Beta) code; as a Beta app, its screens and behaviour can still change.
- Receipts are read live. Purchase (Beta) fetches the goods receipt from Inventory at the moment of matching instead of keeping its own copy, so a delivery corrected in Inventory is reflected in the next match.
- Tolerances are a setting. Settings has a "Three-way match tolerances" card where a company sets policies with quantity %, rate %, value, freight and an "auto-match below" amount. If you set no policy, matching is exact.
- Quantity is checked against received, rate against the agreed net rate. A bill rate above tolerance raises an exception; a rate below the agreed one is noted but not blocked.
- Verdicts are plain. A match ends as Matched, Within tolerance, Review required or Blocked. A blocked bill cannot be posted until the exception is resolved.
- Exceptions need a reason. A reviewer with the right permission can accept the variance or reject it, and must enter a note, recorded against the bill.
- Bills without a PO are flagged. A bill that is not against a purchase order cannot be matched automatically and is sent for review.
A simple routine you can run in any system
- Match each supplier invoice to a PO number before it is entered.
- Record the goods receipt on the day of delivery, including rejections.
- Compare billed quantity with received quantity, and the net rate with the PO rate.
- Set a small tolerance in writing and apply it consistently.
- Route every exception to someone other than the person who raised the order, and keep their reason.
A worked example
Suppose you order 200 units of a component at a net rate of ₹50 each, a PO value of ₹10,000 before GST. The supplier delivers 180 units in the first lot and rejects none. Two days later the supplier bills 200 units at ₹52.
- Quantity: you received 180, so the bill is 20 units ahead of the receipt. If your quantity tolerance is 0%, this is an exception. If it is 5% of the billable quantity, 9 units are tolerated, so 20 still fails.
- Rate: ₹52 against ₹50 is +4%. With a rate tolerance of 2%, it fails; with 5%, it is tolerated.
- Result: the right move is usually to ask the supplier for a corrected bill for 180 units at ₹50, or to wait for the balance delivery before paying the rest.
Without the receipt leg, a PO-and-bill check alone would have seen an extra ₹2 a unit and nothing about the 20 missing units.
Common mistakes to avoid
- Matching against ordered quantity. Orders are intentions; receipts are facts.
- Ignoring earlier bills. If a supplier bills in parts, count what was already billed on the same order line, or you will over-pay across the whole order one bill at a time.
- Comparing gross rates. Discounts change the real unit price. Compare net with net.
- Letting the buyer approve their own exceptions. The person who raised the order should not be the one who waves through its variances.
- Rejecting bills that are cheaper than agreed. A lower rate is in your favour. Note it and move on rather than creating a dispute.
Why it also helps your tax position
Paying only for what you received supports clean books, and genuine invoices are the starting point for input tax credit. Read our guide to matching GSTR-2B with your purchase register. Unpaid supplier bills also carry their own rules: see the 180-day ITC reversal rule and Section 43B(h) payment timelines for MSME suppliers. Confirm specifics for your business with your chartered accountant.
Key takeaways
- Match the bill against what was received, not just what was ordered.
- Compare net rates, after discounts.
- Set written tolerances; send everything beyond them to a reviewer who records a reason.
- Never pay a bill that has no order behind it without a second look.
If you want this control without spreadsheets, Purchase (Beta) from Aicountly applies the match when a bill is entered; as a Beta app, it is worth trying on a test company first. Once a bill clears the match, it is posted to Smart Books, and you can see how our product workflow guides fit together.