Inventory and profit margins move together because every leak in your stock lands in gross profit. A unit that is stolen, spoiled, written down, sold at a discount or bought dearer without repricing cuts the margin you keep. The shop below prices at a 25% margin and keeps 17.5%.
The gap is not in the price list. It is stock that cost more, sold for less, went missing or expired, and most of it shows only when you count. This guide works through one Dar es Salaam shop's month in Tanzanian shillings, leak by leak, then shows which report finds each one.
Your price-list margin is not the margin you keep
Gross margin = (net sales − cost of goods sold) ÷ net sales. Gross profit is the amount in shillings; gross margin is that amount as a share of sales.
Your price list gives the margin on goods that sell at full price. Your accounts give the margin on everything that left the shelf, sold or not. Cost of goods sold = opening stock + purchases − closing stock.
That is why a missing carton shows up as cost, not as a lost sale. Under IAS 2, losses of stock and write-downs are expenses of the period in which they happen.
A shop that never counts never sees most of these losses. Its records still hold the missing goods, so its margin looks right. Then the count lands months of losses at once.
One shop's month, from a 25% margin to 17.5%
For example, a mini-supermarket in Dar es Salaam prices its goods at a 25% margin. In one month, customers take home goods listed at TZS 40,000,000, which cost TZS 30,000,000 at the costs it priced from. The figures are illustrative.
| Step | Effect | Gross margin after it | Points lost |
|---|---|---|---|
| The price list | Sales 40,000,000, cost 30,000,000 | 25.0% | |
| 1. Discounts and markdowns | Sales −1,200,000 | 22.7% | 2.3 |
| 2. Supplier price rises not passed on | Cost +900,000 | 20.4% | 2.3 |
| 3. Shrinkage found at the count | Cost +450,000 | 19.2% | 1.2 |
| 4. Damaged and expired goods | Cost +300,000 | 18.4% | 0.8 |
| 5. Slow stock written down | Cost +350,000 | 17.5% | 0.9 |
| The month's result | Sales 38,800,000, cost 32,000,000 | 17.5% | 7.5 |
Gross profit comes out at TZS 6,800,000 instead of the TZS 10,000,000 the price list promised. The TZS 3,200,000 gap is the five leaks added together.
In this example, the two leaks that come from the owner's own pricing, discounts and stale prices, cost 4.6 points. Shrinkage, the leak that gets the attention, cost 1.2.
Leak 1: buying costs that rise faster than your prices
A price set on an old cost loses margin each time the supplier or the exchange rate moves. In the example, the shop's costs rose 3% and its prices stayed put, which cost 2.3 points.
Count the full landed cost: purchase price, import duty, transport and handling, less trade discounts. That is the cost of purchase in paragraph 13.6 of the IFRS for SMEs standard (IFRS Foundation, Module 13).
Check each delivery's cost against the cost you priced from, and reprice when it moves. Markup vs margin shows how to work the new price from the new cost.
Buying in bulk lowers the unit cost only if the stock sells before it expires or ties up cash for months. Buy bigger lots of fast sellers, and keep slow lines to small orders.
Leak 2: discounts and markdowns
A discount comes off sales while the cost stays the same, so every shilling of it comes off gross profit. The shop's TZS 1,200,000 of discounts cost it 2.3 points of margin.
Markdowns often follow overstocking: goods bought in too large a lot get cleared below their price. Avoiding overstocking and stockouts covers the reorder points that prevent it.
A discount that clears dead stock can be worth it, because the other choice is no sale. A discount on a product that sells anyway is margin given away.
Leak 3: shrinkage
Shrinkage is the gap between the stock your records hold and the stock on the shelf. Theft, receiving errors, miscounts and unrecorded giveaways cause it. In the example, the count found TZS 450,000 of stock at cost missing, which cost 1.2 points.
It reaches gross margin through cost of goods sold whether you record it or not. Without counts, it arrives late and all at once. Inventory shrinkage shows how to measure it, and how many extra sales it takes to earn the loss back.
Leak 4: damaged, expired and dead stock
Goods that break, spoil or stop selling become an expense in the month that happens. The shop threw out TZS 300,000 of damaged and expired goods and wrote slow stock down by TZS 350,000.
The write-down follows IAS 2: stock is carried at the lower of cost and net realisable value. That value is the price the goods will now fetch, less the cost of selling them.
For example, 70 school bags bought at TZS 25,000 each will now sell for TZS 21,000, less TZS 1,000 each to clear them. Each is worth TZS 20,000, so the shop writes down TZS 5,000 a bag, TZS 350,000 in all.
Slow stock that sits is how dead stock starts. Selling the oldest batches first and clearing lines with no sale in 90 days keeps this leak small.
Holding cost and stockouts: below the gross line
Storage, insurance and interest on stock don't change gross margin; they come off net profit. Storage costs are expenses of the period, not part of what your stock cost, under paragraph 13.13 of IFRS for SMEs.
They still eat what the gross margin earned. Every month of rent, power and interest on slow stock comes out of the gross profit it makes when it finally sells. Inventory holding cost works out the full rate, losses included.
Stockouts don't lower the margin percentage either. They lose the gross profit on sales you never made, and they send customers to a rival. Better inventory forecasting cuts both overstock and stockouts.
What to do about each leak
Each leak has a sign you can spot in your records and a fix that costs little. Check them in this order every month.
| Leak | The sign | The fix | Where ArmPOS shows it |
|---|---|---|---|
| Price rises not passed on | A delivery costs more than the cost you priced from | Reprice from the latest landed cost | Product purchases report; Cost on All Products |
| Discounts | Discounts above plan, or on lines that sell anyway | Set a minimum price; limit who changes prices | Discount Summary Report |
| Shrinkage | The count is below the records | Count costly lines more often; check deliveries | Stock Adjustment Report |
| Damaged and expired | Losses on the same lines each month | Sell the oldest first; order smaller lots | Damages list; Expiry Report |
| Slow and dead stock | No sale in 60 to 90 days | Clear it; stop reordering it | Dead Stock Report; Stock Aging Report |
How to find each leak in ArmPOS
ArmPOS records the sales, costs, discounts, counts and damages, so a monthly margin check takes one sitting. Work through it in this order.
- Read the margin you kept. Reports › Profit and Loss for the month shows Revenue, Expenses, Net Profit (FIFO) and Net Profit (Average Cost). Add Expenses back to net profit and divide by Revenue for your gross margin (Reports to check every day).
- Measure the discounts. The Discount Summary Report lists each sale's line and header discounts and the points customers spent (Sales reports).
- Count, then adjust. Download a count sheet by warehouse and category, then correct each difference with an adjustment and a note (Count and adjust stock). The Stock Adjustment Report totals what came off, with each adjustment's cost.
- Record losses as damages. Broken and expired goods go in Damages › Create Damage, apart from count corrections (Record damaged stock).
- Find the slow stock. The Dead Stock Report lists products that haven't moved in 30, 60 or 90 days. The Stock Aging Report sorts what you hold by age (Stock reports).
- Reprice from the new cost. Products › Import (Update Only) changes the cost and retail_price of many products from one file (Find, edit and update products). A Minimum Selling Price stops the POS taking a price at or below it.
- Book the losses, if you use Accounting. ArmPOS doesn't post the cost of goods sold, damages or write-downs to the ledger by itself. Record them each month with a journal entry (Chart of accounts and journal entries).
Shops in Tanzania and elsewhere can run the same check branch by branch with the report's Warehouse filter.
Frequently asked questions
Does inventory affect gross margin or net margin?
Both. Lost, damaged and written-down stock, discounts and unpassed cost rises lower gross margin. Holding costs such as store rent and interest lower net margin only.
Does more inventory mean more profit?
Only if it sells at full price. Stock that sits costs money to hold and often ends in a markdown or a write-down, and both cut the margin.
Is shrinkage included in cost of goods sold?
Yes, once you count. Cost of goods sold is opening stock plus purchases minus closing stock, so anything missing at the count is treated as cost.
How does FIFO or average cost change my margin?
When buying prices rise, FIFO charges the older, cheaper stock first, so it shows a higher margin than average cost. The cash is the same either way; FIFO vs LIFO compares the methods.
How often should I check my gross margin?
Every month, after counting at least your fast and costly lines. A margin that falls between counts points to prices or discounts; a fall at the count points to shrinkage.
Work out last month's five leaks from your own records, starting with the discounts and the cost of your ten best sellers. To get the count sheets, the discount report and your margin in one place, create a free ArmPOS account.