Blog
Distribution & Supply Chain

Goods Inward Done Right: Matching Every Purchase Order to the GRN in a Distribution Business

Booked one thing, received another? See how PO-to-GRN matching catches shortages, wrong rates and near-expiry stock at goods inward, in one core.

SWIL Team9 min read
Goods Inward Done Right: Matching Every Purchase Order to the GRN in a Distribution Business

Goods Inward Done Right: Matching Every Purchase Order to the GRN in a Distribution Business

The tempo raised a purchase order for 100 cartons. Ninety-six came off the truck. The invoice was for 100. Your godown boy signed the delivery sheet without counting, because there were three more vehicles waiting behind it and the driver was in a hurry.

Nobody stole anything. Nobody lied. But you just paid for four cartons that are not in your godown, and you will not find out until a stock audit in March, if you find out at all.

This is goods inward, and for most distributors it is the quietest hole in the business. Everyone watches sales. Everyone chases outstanding. Almost nobody watches what happens at the receiving gate, where the money actually leaves. This page is for the distributor and wholesaler who buys in bulk from a dozen principals, receives partial and mixed shipments every single day, and wants what arrived to match what was ordered before it becomes a fight with the supplier six weeks later.

You ordered one thing. Something else arrived.

Walk any distribution godown at 11 a.m. and you will see the same scene. Boxes on the floor, a purchase invoice on the table, and one person trying to tally the two while the phone keeps ringing. The gap between the purchase order and the actual delivery is where distributors lose margin they never see leave.

A short supply is only the most obvious version. There is also the rate that quietly changed between the order and the invoice. The 10+1 scheme the sales officer promised that never showed up on paper. The near-expiry batch that got mixed into an otherwise clean lot. The two damaged cartons that should have gone straight back but got taken into stock instead. Each one is small. Together, across a year and a few thousand purchase entries, they are not small at all.

What a GRN actually is, and why "just take it into stock" costs you money

A GRN, the Goods Receipt Note, is the record of what physically arrived at your gate: the quantities, the batches, the condition, and any shortfall against what you ordered. It is not paperwork for its own sake. It is the one moment where you can catch a mismatch before it hardens into a payment.

The three documents that must agree: PO, GRN, supplier invoice

Anyone who has run an accounts department knows the discipline of the three-way match. The purchase order says what you asked for and at what rate. The GRN says what actually came in. The supplier invoice says what you are being asked to pay. Payment should not go out until all three line up. It is a standard control in accounts payable, and it is exactly the step distributors skip when receiving is a separate register kept in a separate diary from the billing software.

Skip it and you are trusting the supplier's invoice as the truth. The invoice is the one document with an incentive to be generous.

Where goods inward quietly leaks money for distributors

Short supply you still paid for

The classic. You ordered a quantity, less arrived, and the invoice was cut for the full order. If your receiving step does not check the received quantity against the purchase order line by line, the shortage becomes a payment. When you finally spot it, the supplier's records show the full dispatch and you are now arguing from a weaker position, weeks after the goods left their warehouse.

Rate and scheme differences that wreck your landed cost

You set your selling rate based on the purchase rate you agreed at order time. Then the invoice arrives at a slightly higher rate, or the promised free goods and slab benefit are missing. Your landed cost is now wrong, which means your margin is wrong, which means you are selling at a thinner profit than your own reports tell you. This is the leak nobody feels because the numbers still look fine on screen. They are just quietly off.

Batch and expiry accepted at the gate

For pharma and FMCG distributors this one is not optional. In pharmacy, tracking every item by batch number and expiry date is non-negotiable, and FEFO, First Expire First Out, only works if the batch and expiry are captured accurately the moment goods come in. Accept a near-expiry batch without checking it against what you expected, and you have bought a return you will be fighting to make six months from now.

Damage and rejects that should have been a purchase return

Two cartons are crushed. They should trigger a purchase return then and there, with the paperwork to claim credit from the supplier. Instead, in the rush, they get counted into stock. Now your system thinks you have sellable goods you cannot sell, and the credit you were owed is gone.

Three-way match: book the GRN against the purchase order, not the invoice, and pay the supplier only when PO, GRN and invoice agree

The real fix is not "a receiving app". It is one core.

Search for a solution to this and you will find a market full of standalone GRN and inward apps. They will happily capture what arrives. Then they hand that data off to your separate billing software and your separate accounting, and you are back to the same gap: three systems, three versions of the same delivery, and a reconciliation job every month to make them agree. You have not closed the leak. You have moved it downstream.

This is where SwilERP is built differently, and it is worth being precise about why.

How SwilERP checks the GRN against the PO at inward

In SwilERP, purchase orders, GRN, purchase returns, and supplier documents all live in the same Purchase module, on top of the same stock and the same accounts. When goods arrive, the GRN is raised against the original purchase order, so what you received is checked against what you ordered at the point of receiving, not discovered at audit. A shortage is visible as a shortage. A rate difference is visible against the PO rate. A damaged lot goes out as a purchase return with its own document. Batch and expiry are captured as the goods come in, which is what makes FEFO actually work later at the counter.

One brain for your entire business, not five apps pretending to talk to each other.

That line is the whole point of pillar three, and goods inward is where it earns its keep.

One entry, and stock, supplier ledger, and GST input agree

Here is the mechanism that separates a real fix from a receiving app. Because SwilERP is one operational core, the accepted GRN is the same record your accounts team sees. Book the goods once and your stock moves, the supplier's payable ledger moves, your landed cost updates, and the GST input from that purchase sits on the same transaction. No second entry into a billing package. No third entry into the books. No monthly job to force a receiving diary and an accounting system to tie out, and no blame ambiguity when they do not.

This is the difference between accounting-first tools and an operational core. In an accounting-first setup the supplier ledger and the GST are correct, but the goods-inward check against the purchase order, the shortages, the free goods, the batch at the gate, is a manual step done off the system. The books are correct and the warehouse is guesswork. SWIL has spent 30 years on the warehouse side of that gap, which is why receiving is a first-class step in SwilERP, not an afterthought.

SwilSort: verifying goods at the warehouse gate

For distributors running a larger warehouse, SwilSort adds a purchase verify step at the gate, so the physical check of incoming goods happens on a device at the point of receiving and flows into the same SwilERP stock truth. The person counting cartons and the person who will answer to the supplier ledger are finally looking at the same numbers.

A clean goods-inward routine you can run from tomorrow

You do not need to boil the ocean to fix this. You need a routine that everyone at the gate follows the same way, every time.

  1. Raise the GRN against the purchase order, never against the invoice. The PO is what you agreed to. The invoice is what you are being asked to pay.
  2. Count and enter the received quantity line by line. Let the shortage show.
  3. Check the rate and any scheme or free goods against the PO before you accept.
  4. Capture batch and expiry at entry for every batch-tracked item.
  5. Push damaged or rejected units to a purchase return the same day, with the document to claim credit.
  6. Accept the GRN only when it reconciles. What does not match stays open until it is resolved with the supplier.
The clean goods-inward checklist: raise the GRN against the PO, count line by line, check rate and scheme, capture batch and expiry, push rejects to purchase return, accept only when it reconciles

Six steps. The whole point is that they happen at the gate, in the same system that runs your stock and your accounts, so nothing gets re-keyed and nothing gets discovered too late to act on.

The India layer: e-way bill, GST invoice, and ITC

Goods inward in India carries a compliance tail, and it is worth knowing where your receiving data ends up. Inter-state movement above fifty thousand rupees has needed an e-way bill since April 2018, and that e-way bill and the GST invoice can be matched against the material you actually received. On the tax side, the input tax credit you claim on a purchase is only as clean as the purchase entry behind it, and ITC eligibility is subject to GST rules, including the blocked-credit checks under Section 17(5). None of this is a SWIL feature claim; it is the compliance reality your goods-inward records feed into. The cleaner the GRN, the less painful the year-end reconciliation with your CA.

Stop discovering mismatches at audit

The distributors who lose the least at goods inward are not the ones with the strictest staff. They are the ones who made the correct thing the easy thing: one entry at the gate, checked against the order, feeding one stock truth and one ledger. That is not a receiving app bolted onto billing. It is one operational core, which is what SwilERP has been built as across 30 years and more than 18,000 active businesses.

If your PO and your GRN currently live in two different places, that gap is where your margin is going.

See it on your own purchase flow. Talk to your local SWIL partner and ask them to walk you through PO-to-GRN matching in SwilERP with your own suppliers and your own goods. Bring your worst mismatch. That is the one worth fixing first.

Explore

More from the blog