Inventory Valuation

What your stock is worth today or on any past date, how Kassly works out a unit cost, how fast stock turns over, what the goods you sold cost, and how to export it all.

13 min read · Updated 28 Oct 2026

What your stock is worth · 0:33 · Watch on YouTube
On this page

Valuation answers one question: if you had to write down what the stock on your shelves is worth, what number would you write? Kassly works it out from the cost you recorded when each delivery arrived, not from a figure you maintain by hand.

Needs the Inventory Pro add-on (₱500 per branch each month), or any bundle that includes it.

The page is Inventory Valuation. Open it from Inventory → Valuation in the sidebar, or from the Inventory Valuation card on the Reports page. Reports → Inventory Summary shows the same stock value as its Inventory Value, alongside your low stock and expiring batches.

The costing method is weighted average

Kassly values stock at weighted average cost. If you were expecting to choose FIFO or specific-identification, Kassly does not offer them.

How the average is kept depends on how your business keeps product costs (Settings → Inventory):

Product costs are kept Stock is valued at
Manually (the default) The average of recorded receipt costs, per location, as described below.
Automatically (moving average), Inventory Pro only Each item's Cost Price, which every costed delivery already blends into. It is the same cost a sale of that item records, so what you sell and what you hold are valued alike.

If the Inventory Pro add-on lapses, valuation goes back to the receipt average.

The rest of this section describes the manual case.

The average is worked out per product, per location, per variant — the same grain as a stock figure. Two branches that bought the same item at different prices carry different unit costs, correctly.

Only cost-bearing movements feed it:

Location Movements that count toward the average
Branch Stock In, Return, Transfer In — where a cost above zero was recorded
Warehouse GRN Receipt, Transfer In — where a cost above zero was recorded

Everything else — sales, adjustments, counts, transfers out, production — moves quantity without changing the unit cost.

When there are no cost-bearing movements at all, Kassly falls back to the Cost Price on the record: the variant's own cost for a variant, or the product's when the variant has none (a variant cost of zero counts as none). This is why a shop that never fills in the cost field on a stock-in still gets a plausible valuation: it is being valued at its list cost, not at what it paid.

What Cost Price means

The word appears in two places and means slightly different things, which is worth pinning down.

Where Meaning
Cost Price on a product or ingredient What one stock unit costs, held to four decimal places. The standing figure, and the fallback for valuation.
Cost Price on a stock-in or a PO line What one stock unit cost on that delivery. This is what builds the weighted average.

"One stock unit" is the trap. Flour bought at ₱45 a kilo but counted in grams costs 0.045, not 45. Enter the wrong one and every valuation, food cost and margin in Kassly is out by a factor of a thousand. See Ingredients & recipes for the full explanation and for packaging conversions, which exist so you only have to do that arithmetic once.

Reading the Valuation tab

The page has three tabs: Valuation, Turnover & Cover and Cost of Goods Sold.

Card What it is
Total Inventory Value Quantity × average cost, summed over everything
SKUs Valued How many rows went into that total
Filtered Value The total for what the search and location filter leave showing. It appears only while one of them is on; otherwise it would just repeat the total
Column What it is
Product Name, variant and SKU
Location The branch or warehouse holding it
Quantity On hand at that location, with its unit (12.5 kg, 40 pc)
Avg Cost What one unit cost on average across the deliveries to that location (see below)
Total Value Quantity × Avg Cost

The list runs by product name, then location. Click Product, Location, Quantity, Avg Cost or Total Value to sort by that column instead; click again to reverse it. There is a search across product name and SKU, and an All Locations filter that lists your warehouses too.

Avg Cost is not the Cost Price on the product. It is the lifetime average of what the deliveries to that location cost, weighted by quantity: 10 bags at ₱100 and 30 at ₱150 average ₱137.50. One unusually cheap or dear delivery keeps a small pull on it for good. Only when a location has never had a costed delivery does Avg Cost fall back to the Cost Price (and a business on Automatically (moving average) costing values at the Cost Price throughout, as the table above says).

Cost figures need the See Cost Prices permission. Owners and Managers have it. A custom role with View Stock Levels & Inventory but not See Cost Prices sees the quantities with the Avg Cost, Total Value and COGS columns left out, on screen and in the exports. See Custom roles.

Four things to know about what is in the total:

  • Only products that track stock. A product with stock tracking switched off is not on Stock Levels, and it is not valued here either, even if an old stock figure is still stored against it.
  • Warehouse stock is included. A central warehouse's holdings are valued alongside branch stock, so the total matches what your books say you own. See Warehouses.
  • Only positive quantities are valued. Rows at zero or below are left out entirely, so a negative figure somewhere cannot quietly reduce your total.
  • It is "right now" unless you pick a date. See the next section.

Valuing a past date

Set As of to any past date and the tab shows what was on hand at the close of that business day, per location and variant. Click Now to go back to today.

Kassly keeps no valuation snapshots. It rebuilds the quantity from the stock movement ledger instead: every stock-in, sale, count, transfer and adjustment is written there with a signed quantity, so adding them up to a date gives the stock on that date. Today's figures are the same sum, which is why "as of today" always matches the live valuation.

Two things to know:

  • The cost is today's average cost, not the cost on that date. The quantity is historical; the unit cost is the same weighted average the live report uses. If your buying prices have moved a lot since, a month-end figure from long ago is a quantity-true estimate, not the value you would have booked then. For month-end books, exporting on the day still gives the exact figure.
  • The same rules apply. Warehouses are included, and a location that was sold below zero on that date is left out rather than subtracted.

A sale that synced late from an offline till is placed in the ledger when it arrived, so a past date can differ slightly from what the tills showed at the time.

The Turnover & Cover tab

Pick a Start Date and an End Date, and the tab shows how fast each product moves and how long what you hold will last.

Column What it is
Avg On Hand The average stock over the period, weighted by how long it sat on the shelf (see below)
Units Out Everything that left in the period
Turnover Units Out ÷ Avg On Hand. A turnover of 2× means the stock was used up and replaced about twice over the period.
On Hand Stock at the end of the period
Days of Cover On Hand ÷ the average units out per day over the 7, 14, 30, 60 or 90 days (you choose) up to the End Date. About how many days the stock lasts at the recent rate.
COGS The cost of the goods sold in the period, the same figure as the Cost of Goods Sold tab (See Cost Prices only)

Every quantity shows its unit. The cards above the table total Units Out per unit — 1,240 pc · 35.5 kg — because kilos and pieces do not add up to anything; with more than one unit, Turnover (units) is shown per unit too.

How Avg On Hand is worked out. Kassly replays the stock movements over the period and measures how much was on the shelf and for how long, per branch, warehouse and variant. Bread baked at 6am and sold out by 5pm every day is at zero at every close, yet it sat on the shelf most of each day, so it gets a real average and a real turnover, not a blank. Three details:

  • If a product's first stock arrived after the Start Date, its average starts from that moment. The empty days before it existed would otherwise water the average down and overstate its turnover.
  • If the End Date is today, the average runs up to now, not to midnight.
  • Stock sold below zero counts as nothing on hand, as everywhere else in valuation.

The days-of-cover window is the 7 to 90 days that end on the End Date (or end now, when the End Date is today). It can reach back before the Start Date, so a short period still reads a full window's rate.

Units out counts every outflow — sales, recipe ingredients, wastage and adjustments, transfers out and production — the same figure as the Stock Consumption panel, so the two agree. Voided sales are left out. A recipe dish therefore shows up as its ingredients, not as the dish.

Reading it:

  • Days of cover shows "No recent sales" when nothing left in the look-back window: at that rate the stock never runs out. Treat it as a slow mover, not as healthy stock.
  • "0 days" in red means nothing was on hand at the end of the period while stock was still going out. For an item you sell out daily, that is literally true at closing time.
  • A turnover of "—" means nothing was on hand at any point in the period: the product only went out, sold below zero. Oversold (negative) stock does not count as stock here either.
  • The cards above the table add a turnover by cost figure — COGS ÷ the average stock value — for owners who prefer to read turnover in pesos. It shows "—" when the stock had no value (no cost recorded anywhere).

The tab follows the branch picked in the top bar; with no branch picked it covers every branch and warehouse.

Exporting

Export on the Valuation tab downloads the table as CSV or Excel (.xlsx), for today or for the As of date you picked (inventory-valuation-2026-09-27.csv, or inventory-valuation-as-of-2026-08-31.xlsx). The Turnover & Cover tab has the same button for its table.

An export holds what the table is showing: it follows the search box and the location filter (a branch or a warehouse), and the turnover file follows the search too. Quantities come with a Unit column, and where the screen says "—" or "No recent sales" the file says the same rather than leaving the cell blank. Stock on hand and purchase orders have their own exports, on the Inventory page and the Purchase Orders list. See Exporting reports.

The Cost of Goods Sold tab

The third tab, Cost of Goods Sold, takes a Start Date and an End Date and totals up what the stock you sold in that period cost you, with Total COGS and Units Sold above a per-product table. Units Sold is totalled per unit, like Units Out.

COGS means one thing wherever Kassly shows it, here and in the Turnover tab's COGS column and card: sales, less customer returns put back on the shelf, at cost. The two tabs give the same peso figure for the same dates and branch.

What is in the figure:

  • The dates are your store's business days. A sale at 7:30am on the 2nd counts on the 2nd, and with a business-day cutover set, a 1am sale counts on the day before, as on the sales reports. The tab follows the branch picked in the top bar.
  • Returns come off at what they were sold for. An item returned to stock comes off COGS at the cost its sale was booked at, so a sale and its return cancel out even if the cost price has changed since. A return marked damaged never came back to stock, so its cost stays in.
  • Wastage, transfers and adjustments are not in it. They are not sales. Units Out on the Turnover tab, Stock Consumption and Shrinkage count those.
  • It costs what physically left the shelf. A dish made from a recipe contributes its ingredients, not the dish — sell one cake and you will see flour, sugar and eggs, not "cake". That is the point of reading the stock ledger, and it is why this total will not tie exactly to the Gross Profit on the sales reports, which cost the menu item sold instead. Use the profit reports for margin by product.
  • Voided sales are left out. A sale you voided never really left the shelf, so it drops out of the period entirely.
  • Sales made before September 2026 are costed at today's cost price. Kassly did not stamp a cost onto sale movements until then, so for older ranges the report falls back to each product's current cost price. That is close enough to read a trend, but if a cost has changed since, the older figure is not what you actually paid.

Managers see their own branch's sales; owners see every branch. The same goes for the Valuation and Turnover tabs: a manager limited to some branches sees those branches only, and no warehouses.

If you want to know what you got through

Valuation is about what you are holding. For what left the shelves — sales, recipe deductions, wastage, transfers — use the Stock Consumption panel and its Goods Consumed list, described in Stock levels. That one values each outflow at the cost recorded on the movement, falling back to the product's cost price — the same ladder the COGS tab uses, so the two agree on what an outflow was worth.

Today's figures there are free; other date ranges need the Business Reports add-on (₱400 per branch each month).

Keeping the valuation honest

The figure is only as good as three habits:

  1. Fill in Cost Price on every stock-in and every PO line. A costless receipt contributes nothing to the average and quietly leaves the item valued at its standing list cost.
  2. Keep Cost Price on the product roughly current. It is the fallback, and for anything you have never costed on receipt it is the valuation.
  3. Count, and apply the counts. Valuation multiplies by the on-hand quantity, so an uncounted shrinkage is an overstated asset. See Stock counts.

Where to go next