Markdown for agents
---
title: "Inventory management for retail stores: a practical guide for a single shop"
description: "The stock routines a single retail shop needs, from receiving and counting to reorder points and stock value, and what inventory software should record for you."
canonical: "https://sandooq.app/blog/inventory-management-retail"
locale: "en"
updated: "2026-11-02T00:00:00.000Z"
---
# Inventory management for retail stores: a practical guide for a single shop
The stock routines a single retail shop needs, from receiving and counting to reorder points and stock value, and what inventory software should record for you.
**Tags:** inventory, retail, stock-control, guides
Inventory management is the routine work of knowing how much stock you have, where it is, what it cost and when to reorder it, and of keeping the system's numbers equal to what is on the shelf. For a single shop that comes down to five habits: receive accurately, sell everything through the system, count regularly, explain every adjustment, and reorder from data rather than memory.
This guide takes those habits in order, for one shop with one stockroom. With several branches, the same habits apply, and our guide to [managing stock across several stores](/blog/multi-store-inventory-management) adds central stock and transfers on top.
## What inventory management means for a retail shop
Inventory management in a shop means controlling the goods you bought to sell: what came in, what went out, what is left and what it is worth. A warehouse moves pallets to a few customers; a shop moves single pieces to hundreds of customers a day, across hundreds or thousands of products, while the doors are open. So a shop's stock goes wrong in small, constant ways rather than in one big event.
There are two ways to keep the record:
- **Perpetual inventory.** Wikipedia describes a [perpetual inventory system as one where quantity and availability are updated on a continuous, real-time basis, in retail usually through the point-of-sale system](https://en.wikipedia.org/wiki/Perpetual_inventory). Every sale, return and delivery moves the number.
- **Periodic inventory.** There is no running number. You count at month end or year end and work out what was sold from the difference.
A shop with a POS system already runs a perpetual record. But the same entry notes that a perpetual record is still [vulnerable to errors from theft, breakage, scanning errors and untracked stock movements](https://en.wikipedia.org/wiki/Perpetual_inventory), which is why counting stays part of the job.
What getting it wrong costs a shop:
- **Stockouts of best sellers.** The customer who came for one item leaves with nothing.
- **Dead stock.** Cash sits on the shelf in products that have not sold for months.
- **Unexplained shrinkage.** The system says 40, the shelf says 31, and nobody knows whether it was theft, damage or a receiving mistake.
- **Wrong margins.** If cost prices are out of date, every margin report is too.
## The stock record: on hand, movements and the document behind each change
**Stock on hand per product,** and per store if you have more than one. It should move by itself every time something is sold, returned, received or adjusted — not when someone remembers to update a sheet.
**Movement history.** Every change in quantity should be tied to the document that caused it: a sale, a return, a delivery, an adjustment or a transfer. When the shelf disagrees with the system, the movement history answers "where did it go?" without accusing anyone.
**Units and packs.** Most shops buy by the carton and sell by the piece. The system should hold one base unit (the piece) and convert every pack into it, so receiving 2 cartons of 24 adds 48 pieces. Selling by the half-dozen or by weight then becomes another selling unit of the same product, not a separate product with separate stock.
**Barcodes and product codes.** All of this depends on identifying products correctly. Most packaged goods already carry a manufacturer's barcode: [GS1 lists EAN-13, UPC-A, EAN-8 and UPC-E as the barcodes usually used on items sold at a retail point of sale](https://support.gs1.org/support/solutions/articles/43000734104-which-barcodes-are-used-to-represent-gtins-). Loose and shop-packed items need codes of your own; our [barcode and SKU setup guide](/blog/barcode-sku-management-retail) covers both.
In Sandooq, stock on hand is kept per product per store and moves with every sale, return, receipt and adjustment, and each quantity change sits in a movement history next to the document that caused it. Products can be bought and sold by piece, weight, volume or pack, converted to the product's base unit, with separate barcodes and prices for each selling unit.
## Receiving: where most stock errors start
A delivery recorded wrong makes every later number wrong: stock on hand, cost, margin and what you owe the supplier. A short routine prevents most of it.
1. **Receive against a purchase order.** If only part of the order arrives, receive what came and leave the rest open, so you can see what the supplier still owes you.
2. **Record what actually arrived,** not what was ordered or invoiced. Note short and damaged lines at the door, while the driver is still there.
3. **Use the received quantity and the real cost.** If the price changed since the order, the new price belongs in the record, or your margins drift.
4. **Match the supplier's invoice to the receipt before paying,** and chase short or damaged lines.
5. **Put the goods away the same day.** Stock that is received but still in the back room is how next week's count goes wrong.
For a full worked example with a grocery supplier, see our [supplier receiving walkthrough](/blog/grocery-pos-supplier-integration-purchase-orders).
In Sandooq, you raise purchase orders against a supplier and receive deliveries in full or in part. Stock and cost update from what actually arrived, not from what was ordered.
## Counting: cycle counts, full stocktakes and when to use each
Counting is how you find out whether the record is still true. Most shops use two methods together.
| | Cycle count | Full stocktake |
|---|---|---|
| What you count | One section or product group at a time | Everything in the shop |
| How often | Weekly, on a rota | Once or twice a year |
| Shop closed? | No — counts fit around trading | Usually, or counted before opening |
| Cut-off | Each section at the moment it is counted | One fixed moment for the whole shop |
| Best for | Catching errors while the cause is fresh | A clean baseline and the year-end figure |
A good pattern for one shop is a weekly rota of cycle counts, with fast-moving and high-value products counted most often, plus one full stocktake a year. Our [weekly cycle counts guide](/blog/inventory-cycle-counts) sets out the rota and how to investigate variances.
Two rules apply to both:
- **Post every variance as an adjustment with a reason.** Never overwrite a quantity silently. The reason is what turns a pile of corrections into a report you can act on.
- **Decide what happens to sales made during the count.** In a shop that stays open, someone will sell from the shelf you counted ten minutes ago. If the system compares your count with stock at the moment you save, that sale is wiped out and the shelf looks short next week. Also make sure every till is online and its sales have reached the system before you start a section.
In Sandooq, you can count a whole store or a single section, enter what you counted, and post the variance as an adjustment against a reason. Each counted product line records when you entered it, and the variance is measured against stock at that moment, so a sale rung up after you counted the shelf is kept rather than erased. Lines counted batch by batch are compared with the batch's quantity when you save, so save those right after counting.
## Adjustments, reason codes, expiry and write-offs
Every stock change that is not a sale, return, receipt or transfer is an adjustment, and adjustments are where shrinkage hides.
**Use a short list of reasons:** damaged, expired, theft, internal use and count correction cover most shops. Keep the list short enough that staff choose the right reason rather than the first one.
**Put a manager in the loop above a threshold.** Small corrections can be posted by whoever counts. A large write-down, by quantity or by value, should wait for a manager before it changes stock. That one rule stops most quiet corrections.
**Track batches and expiry dates for perishables.** Record the batch and expiry on receiving, sell the earliest expiry first, and check a near-expiry list every week so you can discount, return or move stock before the date. Our guide to [perishable and expiry tracking](/blog/perishable-inventory-expiration-tracking) covers FIFO, FEFO and markdown timing.
**Record disposals as a loss, not as a mystery.** When expired or damaged stock is thrown away, record it as a disposal with its reason. The accounting standard treats this as a cost of the period: [IAS 2 recognises any write-down of inventories to net realisable value as an expense in the period it occurs](https://www.ifrs.org/issued-standards/list-of-standards/ias-2-inventories/). A recorded disposal is a cost you can see and reduce; an unrecorded one turns up later as unexplained shrinkage. Our guide to [shrinkage and loss prevention](/blog/loss-prevention-retail-shrinkage) shows how to read adjustments by reason and by person.
In Sandooq, you define your own reason codes for adjustments, disposals and returns, and you can mark a reason as needing a manager's approval, so changes posted with that reason wait for a manager before they take effect. Stock can be tracked in batches with expiry dates, with a view of what is close to expiring, and a disposal posts the loss to the expense account you chose.
## When to reorder and how much: reorder points in plain terms
Two numbers per product replace reordering from memory.
- **Reorder point (minimum level).** When stock falls to it, you order. The usual formula, as on Wikipedia's [reorder point page, is normal consumption during the lead time plus safety stock](https://en.wikipedia.org/wiki/Reorder_point). Lead time is the days from placing the order to goods on your shelf.
- **Maximum level.** The most you want in the shop, limited by space, cash and, for perishables, shelf life. You order enough to bring stock back up to it.
**An illustrative example** (made-up numbers, for one product):
| Input | Value |
|---|---|
| Average sales | 12 bottles of cooking oil a day |
| Supplier lead time | 4 days from order to shelf |
| Sales during the lead time | 12 × 4 = 48 bottles |
| Safety stock (two days of sales) | 24 bottles |
| **Reorder point** | **48 + 24 = 72 bottles (6 cartons of 12)** |
| Maximum level | 180 bottles (15 cartons) |
| Order when stock reaches 72 | 180 − 72 = 108 bottles (9 cartons) |
When you check a product against its reorder point, add what is already on order but not yet received, or you will order the same carton twice.
**Where the numbers come from.** Average sales come from your till's sales history, adjusted for seasons such as Ramadan, Eid and back-to-school. The [months of the Islamic calendar move about eleven days earlier each year](https://en.wikipedia.org/wiki/Islamic_calendar), so compare with last year's Ramadan weeks, not the same calendar weeks. Our [cycle stock and safety stock formulas](/blog/cycle-stock-formula-safety-stock) guide works through safety stock, and [demand forecasting from POS data](/blog/demand-forecasting-retail-stock) shows how to read the sales history behind it.
In Sandooq, you can set a low-stock threshold on each product — the reorder point you worked out. Products at or below it are listed on the dashboard. Working out the number is the method above.
## Stock value, margin and the weekly reports to read
**Value stock at cost.** Under the international standard, [IAS 2, inventories are measured at the lower of cost and net realisable value](https://www.ifrs.org/issued-standards/list-of-standards/ias-2-inventories/), and for items that are ordinarily interchangeable it names [first-in, first-out or weighted average cost](https://www.ifrs.org/issued-standards/list-of-standards/ias-2-inventories/) as the cost formulas. Agree with your accountant which one your books use. Whatever the formula, cost must come from what you actually received and paid, which is why receiving matters so much.
**Read margin per product.** Sort by margin and by sales together: a high-margin product that rarely sells and a fast seller at almost no margin both need a decision.
**Find dead stock.** Anything unsold for 60 or 90 days is a candidate for a markdown, a bundle, a return to the supplier or simply not reordering.
**A weekly list for the owner:**
- Stock on hand for your top sellers, against their reorder points
- Adjustments by reason, and by who made them
- Products close to expiry
- Purchase orders still open, and deliveries that came in short
- Sales by product, to spot what is speeding up and what has stopped
In Sandooq, every product carries its cost, so margin is visible on the sale line and in reports, and stock adjustments post the value of the change to the ledger.
## Choosing inventory management software for a shop
**A checklist for a single shop:**
- Stock moves from the till on every sale and return, with no re-typing
- Buy by the carton, sell by the piece, with a barcode on each selling unit
- Batches and expiry dates, with a near-expiry list
- Counts by section, with variances posted against a reason
- Your own reason codes, and manager approval for the reasons you choose
- Purchase orders and receiving in full or in part, with cost from what arrived
- A low-stock threshold per product
- Transfers between stores, if you open a second shop
- A separate role for whoever counts and receives stock
- CSV import to load your catalogue, and export so your data is never locked in
- An interface in the languages your team reads, Arabic and English
**Spreadsheet or software?** If the sheet cannot tell you this morning's stock without someone typing in yesterday's sales, it is a record of the past. That point usually comes when two people edit the same file, the shop sells every day, or the product list passes a few hundred lines.
**Keep stock and the till together.** Every sale is a stock movement, so inventory kept in a separate system needs someone to copy sales across, and errors live in that gap. If you are still deciding what the till itself should do, start with [what a POS system is](/blog/what-is-a-pos-system).
**Where Sandooq fits.** Sandooq keeps stock on the same system as the till, with everything described above, and adds stock transfers between your own stores, an inventory clerk role that sees and does a defined set of things, and product import from CSV with column mapping and validation, plus catalogue export. See the full list on our [features page](/features), or how it fits a shop on [POS for retail shops](/use-cases/retail).
## Frequently asked questions
### What is inventory management in retail?
It is the routine work of knowing how much of each product a shop has, where it is, what it cost and when to reorder it, and of keeping the system's quantity equal to what is on the shelf. In practice: receive accurately, sell everything through the till, count regularly, record every adjustment with a reason and reorder from sales data.
### What is the difference between perpetual and periodic inventory?
A perpetual system updates the quantity with every sale, return and delivery, so you always have a current number. A periodic system has no running number: you count at the end of a period and work out what was sold from the difference. A shop with a POS system normally runs a perpetual record and still counts to catch theft, damage and mistakes.
### How often should a small shop count its stock?
Most shops do best with short weekly cycle counts of one section at a time, counting fast-moving and high-value items most often, plus one full stocktake a year. Counting a little every week finds errors while you can still remember what caused them.
### What is the difference between inventory management software and a POS system?
A POS system records sales at the counter; inventory software records what you hold, receive and adjust. In a shop the two overlap, because every sale is a stock movement, so using one system for both means stock moves with each sale and nothing has to be copied across.
### How do I calculate a reorder point for my shop?
Multiply the product's average daily sales by the days your supplier takes to deliver, then add safety stock for busy days and late deliveries. With illustrative numbers, 12 a day, a 4-day lead time and 24 of safety stock give a reorder point of 72. Count stock already on order before ordering again.
### Can I manage shop inventory in Excel instead of software?
For a few dozen products, one person editing and weekly updates, a spreadsheet can work. It breaks down when several people edit it, when the shop sells every day, or when the product list grows into the hundreds, because the sheet is always behind the shelf.
## Sources
- [IFRS Foundation — IAS 2 Inventories](https://www.ifrs.org/issued-standards/list-of-standards/ias-2-inventories/) — measurement at the lower of cost and net realisable value; FIFO or weighted average cost; write-downs recognised as an expense.
- [Wikipedia — Perpetual inventory](https://en.wikipedia.org/wiki/Perpetual_inventory) — quantities updated continuously, in retail through the point-of-sale system; errors from theft, breakage, scanning and untracked movements.
- [Wikipedia — Reorder point](https://en.wikipedia.org/wiki/Reorder_point) — normal consumption during the lead time plus safety stock.
- [GS1 — Which barcodes are used to represent GTINs?](https://support.gs1.org/support/solutions/articles/43000734104-which-barcodes-are-used-to-represent-gtins-) — EAN-13, UPC-A, EAN-8 and UPC-E on items sold at a retail point of sale.
- [Wikipedia — Islamic calendar](https://en.wikipedia.org/wiki/Islamic_calendar) — months advance about eleven days earlier each year.
## Next step
See stock, receiving and counts on the same system as the till: [book a demo](/demo) with your own products, or [compare plans](/pricing).