Regional Guide · GCC & Iraq

Restaurant Inventory Management: How to Receive, Track and Count Stock Without Guesswork

For restaurant, café and cloud-kitchen owners and managers · 7 min read

Restaurant inventory management is the discipline of knowing, at any moment, how much of each ingredient you hold, what it cost you, when it expires, and how much of it the kitchen should have used. It rests on three records that must agree: what came in (receiving), what went out (usage), and what is physically on the shelf (the count). When all three match, your food cost is a fact. When they drift apart, the gap is waste, over-portioning, theft or mis-keyed deliveries, and you only find out at month end. In Muscat, Doha, Manama or Baghdad, where much of the food is imported and prices move with freight, that gap is expensive. This guide explains the method, shows how to run it in Culina, and works through a full example in Omani rials (OMR).

  • Restaurant inventory management means tracking three records: stock received, stock used and stock counted. The difference between expected and counted stock is your variance.
  • The UN Food Waste Index Report 2021 estimates that the world wasted about 931 million tonnes of food in 2019, around 17% of the food available to consumers, and that food service (restaurants and caterers) accounted for 26% of it.
  • A study cited by Fourth in 2026 puts restaurant waste at 4% to 10% of the food purchased, so even a small kitchen has a measurable leak to find.
  • Culina turns a delivery into an ERPNext Purchase Receipt at the unit cost you enter, tracks batch and expiry for batch items, and, with recipe depletion on, issues each dish's ingredients from stock when it sells.
  • In the worked example below, a Muscat grill expects 30 kg of chicken left, counts 25 kg, and finds a shortage of 5 kg worth OMR 10.500, or 5.56% of its theoretical chicken usage.

What restaurant inventory management is, and why counting alone is not enough

Many kitchens count stock once a month and compare it with purchases. That tells you roughly what was consumed, but not what should have been consumed, so it cannot separate waste from honest usage. A stronger method compares three numbers for every ingredient over the same period. Expected usage comes from sales and recipes: if you sold 360 grilled chicken plates and each uses 0.25 kg, the kitchen should have used 90 kg. Actual usage comes from stock: opening stock plus deliveries minus the closing count. The gap between them is the variance, and it is the most useful number in the back of house.

For this to work, two things must be true. Every delivery must be recorded with a cost, otherwise stock has no value and food cost cannot be calculated. And every sale must reduce stock by the right amount, otherwise the system quietly drifts from the shelf. The rest of this guide is about making both automatic.

Why it matters across the GCC and Iraq

The scale of the problem is documented. The UN Food Waste Index Report 2021 estimated that about 931 million tonnes of food were wasted worldwide in 2019, roughly 17% of the food available to consumers, with food service responsible for 26% of the total, households 61% and retail 13% (reported by Science News, March 2021). A study referenced by Fourth in May 2026 reports that restaurants waste 4% to 10% of the food they buy. Those are global and general figures, not regional measurements, but they show why a kitchen that never compares expected with counted stock is likely to have a leak it cannot see.

The region adds its own pressure. Most of the Gulf imports the bulk of its food, so ingredient prices move with freight and exchange rates, and a delivery that arrives at a different cost than last week changes the real cost of every plate. In Iraq, where supply chains and pricing can shift quickly, a stale cost on file makes the same mistake. Hot weather and long cold-chain journeys also make expiry a daily concern for proteins, dairy and fresh produce. Tracking batches and dates is not a luxury here; it is how you avoid throwing away stock you paid for.

Step 1: receive every delivery at a real cost

Inventory begins at the back door. In Culina, the Receive tab turns goods-in into an ERPNext Purchase Receipt. You pick the supplier (or add a new one), set the date, and the warehouse comes from your profile automatically. Then you scan or search each item, set the quantity, and enter the unit cost. That last field matters: leaving cost at 0 receives the stock at zero valuation, which means the ingredient enters the books as free and your cost of goods sold for it is understated. Always enter the invoice cost.

For batch-tracked items such as dairy, sauces or chilled proteins, the batch field lists existing batches; you can pick one or type a new batch number and set its expiry, and the batch is created when you press Receive. Culina can then print one label per unit showing the item name, Arabic name, barcode, batch and expiry, so the date travels with the product into the cold room. Receiving this way takes a minute per delivery and gives you a dated, costed record for every ingredient.

Step 2: let every sale deplete the right ingredients

Receiving tells you what came in. To know what went out without anyone counting, link each dish to its ingredients. Raw materials are stock items flagged as ingredients, and in Recipes you pick a menu item, add its ingredients with quantity and unit, and set the yield. The builder shows the live ideal cost, food-cost percentage and margin as you type.

With Enable Recipe Depletion on, each sale posts a Stock Entry (Material Issue) from the Kitchen or Ingredient Warehouse to the Ingredient COGS Account. Depletion timing can be real-time, with one entry per order, or end-of-day, with one aggregated entry per profile, which is lighter at high volume. Cancelling or returning a sale reverses the entry. The result is that the system's stock level is the shelf level you should have if the kitchen followed the recipe, so any difference at the count is a real signal rather than an accounting artefact.

Step 3: look up stock, rotate by expiry and count against the system

The Inventory tab shows live stock. Expand an item to see quantity by warehouse and, for batch items, the quantity and expiry of each batch. This is the screen a chef or manager opens before ordering, and the one a stock-taker uses to see what the system expects to find. For batch items sold at the till, the Batch selection setting in Culina Settings auto-picks by FEFO (first expiry, first out) or FIFO, so the oldest stock leaves first when it is a sellable batch item.

When you count, do it blind where you can: count the shelf, write the number, and only then compare it with the system quantity. Investigate the difference before adjusting it. Because Culina runs on ERPNext, an approved correction is recorded with ERPNext's standard stock adjustment, which keeps an audit trail instead of silently overwriting the number. Counting weekly for high-value items such as meat and seafood, and monthly for dry goods, is a common rhythm; the right frequency is the one your team will actually keep.

A worked example in Omani rials

Take a Muscat grill and one ingredient, chicken breast, over one week. The kitchen opens the week with 20 kg on hand. A delivery of 100 kg arrives, received at OMR 2.100 per kg, so the receipt is worth OMR 210.000. For simplicity, the opening stock is valued at the same OMR 2.100 per kg. The grilled chicken plate uses 0.25 kg of chicken and sells for OMR 3.500, and 360 plates are sold in the week.

LineQuantity (kg)Value at OMR 2.100/kg
Opening stock20OMR 42.000
Received this week100OMR 210.000
Theoretical usage (360 plates × 0.25 kg)90OMR 189.000
Expected closing stock30OMR 63.000
Counted closing stock25OMR 52.500
Variance (counted − expected)−5−OMR 10.500
Expected closing = opening + received − theoretical usage = 20 + 100 − 90 = 30 kg Actual usage = opening + received − counted = 20 + 100 − 25 = 95 kg Variance = 25 − 30 = −5 kg × OMR 2.100 = −OMR 10.500 (5 ÷ 90 = 5.56% of theoretical usage)

Sales for the week are 360 × OMR 3.500 = OMR 1,260.000. The ideal chicken cost is 90 kg × OMR 2.100 = OMR 189.000, which is 15.00% of sales (189.000 ÷ 1,260.000). The actual cost is 95 kg × OMR 2.100 = OMR 199.500, which is 15.83% of sales. The kitchen is therefore 0.83 percentage points worse than its recipe says, worth OMR 10.500 in a single week on a single ingredient. Over 52 weeks at the same rate that would be OMR 546.000 for chicken alone. Note what happens if the delivery had been received at cost 0: the system would have shown the chicken as free and the leak would have been invisible.

A shortage of 5 kg is not proof of theft. It may be trimming loss the recipe does not allow for, a heavier hand on portions, a spoiled box or a miscounted delivery. The point is that you now know to look, and you know what it costs. The fix might be a recipe yield adjustment, a portioning scale, or a conversation about waste logging.

What to do with a variance

Start by re-counting, then check whether the delivery quantity matched the invoice, whether any chicken was written off for expiry, and whether the recipe quantity is realistic once trimming is included. If the same ingredient is short week after week, tighten the recipe or portioning. If one batch keeps expiring, order less of it and rotate by the date on the label. Keep the counts: a documented history is what separates a one-off slip from a habit.

Wrap-up — Receive every delivery at its real cost, link dishes to ingredients so each sale depletes stock, and count the shelf against the system. Culina records the receipt, tracks batches and expiry, issues ingredients per sale and shows live stock, so the weekly variance takes minutes to find.

See inventory control in Culina

Book a short demo and we will walk through receiving a delivery at cost, recipe depletion and live stock on your own menu and branches.

Book a demo

Frequently asked questions

What is restaurant inventory management?

It is the process of tracking what ingredients you receive, use and hold, with their cost and expiry, so you can compare expected stock with the physical count. The difference between the two is your variance and points to waste, over-portioning or errors.

How do you track restaurant inventory automatically?

Link each dish to its ingredients with a recipe, then turn on recipe depletion so every sale issues the right ingredient quantities from stock. In Culina this posts a Stock Entry (Material Issue) per order, or one aggregated entry at end of day, and reverses it if the sale is cancelled or returned.

How often should a restaurant count its stock?

There is no single rule. A common rhythm is weekly for high-value items such as meat and seafood and monthly for dry goods, but the best frequency is one your team will keep. The useful signal is the pattern of variance over several counts.

Can I run inventory in OMR, QAR or IQD in the same system?

Yes. Currency is set per Culina profile, so each branch receives stock and values it in its own currency, such as OMR in Muscat or IQD in Baghdad, while unified reporting is available across profiles.