What is in the template
One row per line received, grouped by GRN number. A single delivery covering three products becomes three rows sharing a GRN_Number, so the whole delivery can be pulled up in one filter while each line keeps its own quantity, batch and condition.
The sample data works through the three cases that matter: a clean full delivery, a partial delivery where 1,200 of 2,000 units arrived and the balance is still outstanding, and a delivery where three units were crushed in transit and went to quarantine rather than into stock.
Columns explained
| GRN_Number | Unique per delivery, shared across every line received in that delivery. This is the reference an invoice query starts from. |
| Receipt_Date | The date goods physically arrived, which is not always the date paperwork was processed. |
| PO_Number | The purchase order this delivery is against. Without it, the receipt cannot be matched to what was ordered. |
| SKU | The item received, matching your inventory list. |
| Quantity_Ordered | What the purchase order line said, copied across so a short delivery is visible on the same row. |
| Quantity_Received | What actually arrived and was accepted into stock. |
| Quantity_Rejected | Units that arrived but were refused: damaged, wrong item, failed inspection. Rejected units must not increase stock. |
| Batch_Or_Serial | Lot or serial reference, captured at receipt because it is almost impossible to reconstruct afterwards. |
| Expiry_Date | For anything with a shelf life. Blank is fine for the rest. |
| Location | Where the stock was put away, including a quarantine location for rejected or held goods. |
| Received_By | Who checked the delivery in. Not bureaucracy: it is who to ask when the count is queried three weeks later. |
| Condition | OK, Damaged, Short, or Over. A one-word status makes discrepancies filterable. |
| Discrepancy_Notes | What was wrong and what was done about it, including any credit or replacement requested. |
The receiving check the columns assume
The template only works if someone opens the boxes. Signing a carrier note confirms that packages arrived, not that the right quantity of the right item is inside them, and a GRN filled in from the delivery note rather than from a count is a record of the supplier’s claim rather than of your receipt.
Three things are worth doing while the pallet is still on the floor: count what is there, check it against the purchase order line, and write down the batch or serial numbers. Everything else on the form can be completed later; those three cannot be recovered once the goods are put away.
Where a GRN spreadsheet breaks down
Receiving in a spreadsheet does not increase stock. Someone has to open the inventory list and add the received quantity by hand, and the window between those two actions is where stock on the system and stock on the shelf part company.
It also cannot keep a purchase order line open. Nothing in the file remembers that 800 units are still owed on PO-2026-0142, so the outstanding balance lives in whoever last read the file, and a second invoice against the same order has nothing to fail against.
In StockFlow, receiving against a purchase order updates stock at the same moment the receipt is recorded, keeps the ordered, received and outstanding quantities on the line, and captures batch and expiry data on the item itself instead of in a parallel file.
Related resources
Trusted by small businesses
What our customers say
“Super Kind! Quick replies from their support and very easy fixes, changed the dashboard a bit and customized it. Also gave me 450 items extra on the free plan just for me. Highly recommend and again great service!”
“Best customer service! Stockflow's customer support is fast and extremely helpful. They assisted me with customization of the software to improve my experience as a user.”