FilFlo
ProductHow it worksCustomersFAQChangelogBlog
Sign in
ProductHow it worksCustomersFAQChangelogBlogIntegrationsSign in
filflo

The order-to-cash operations layer for CPG brands selling through quick commerce. Built by operators, in Gurugram.

Product
  • Features
  • Use cases
  • Industries
  • Integrations
  • Product overview
  • ROI calculator
Company
  • Team
  • About
  • Blog
  • Contact
Resources
  • Developers
  • Quick commerce O2C guide
  • FAQ
  • Security
  • Privacy
  • Terms
Get in touch
  • Book a demo
  • Sign in
  • LinkedIn
  • Twitter / X
  • YouTube
FilFlo
© 2026 Tijora Software Private Limited. All rights reserved.
Made in India · Built for Indian brands
Back to BlogFinancial Optimization
Cash Flow Alert

Hidden Inventory Costs: Why Your Cash is Stuck in Dead Stock

A full warehouse can look healthy while still weakening cash flow. The question is not how much inventory you own — it's how much of it is healthy cover for real demand, and how much is excess stock quietly blocking working capital that your fast movers need.

Finance & Operations Consultant
September 10, 2024
12 min read
~2,900 words
Inventory Cost Analysis and Cash Flow Optimization

⚡ Key Takeaways

  • ✓Working capital blocked in inventory = Σ (on-hand qty × unit cost). Split that number into healthy vs excess stock and you know exactly how much cash is recoverable without risking stockouts.
  • ✓A SKU is overstocked when its days of stock sit above the upper band, and understocked when it falls below the safety floor of roughly 2 × inward TAT of demand. Per-SKU lower and upper thresholds in FilFlo are bulk-updatable by CSV.
  • ✓For food and beverage brands, shelf-life buckets (0–25%, 25–50%, 50–75%, 75–100% remaining) turn ageing from a surprise into a queue: push batches sliding down the buckets to quick commerce before they expire.
  • ✓Carrying cost has a flip side: the Sales Loss report values every short-shipped unit at PO rate. Stock sitting in the wrong SKU is simultaneously blocking cash and costing sales on the SKUs you ran out of.

Short Answer

Inventory carrying cost is the quiet cost of owning stock after you have already paid for it: warehouse space, capital cost, insurance, handling, ageing, and the opportunity cost of not buying faster-moving SKUs. The starting point for managing it is one number — working capital blocked, calculated as on-hand quantity × unit cost summed across SKUs — split into a healthy portion (cover you genuinely need until the next inward) and an excess portion (everything above your upper days-of-stock band).

FilFlo makes that split operational. Days-of-cover math flags over- and under-stocked SKUs against per-SKU thresholds, the By Age inventory view and shelf-life buckets show which batches are ageing towards expiry, count adjustments keep the on-hand number honest, and the Sales Loss report shows the rupee cost of the SKUs you starved while the excess sat still. Together, they let you move capital from inventory that is merely present to inventory that protects availability.

Inventory Carrying Cost Calculation: The Drain You Don't See

Most operators know their purchase price to the paisa and their carrying cost not at all. The stock in your warehouse was paid for weeks or months ago, so it stops feeling like money. But it is money — plus rent for the racks it occupies, insurance on its value, interest on the working capital financing it, handling labour every time it gets moved or counted, and, for anything with an expiry date, a clock ticking towards zero. Depending on category and storage model, these costs commonly add up to a fifth or a quarter of inventory value per year.

An Illustrative Carrying-Cost Picture

Take a brand holding ₹50 lakhs of inventory at a 25% annual carrying-cost rate — a common mid-range figure once storage, capital cost, insurance, obsolescence, and handling are added up:

25%
Annual carrying cost rate
₹50L
Inventory value on hand
₹12.5L
Annual carrying costs
₹1.04L
Monthly hidden costs

Components of Carrying Costs

  • • Capital cost: interest on the working capital financing the stock — usually the largest slice
  • • Storage: warehouse or 3PL rent for the racks the stock occupies
  • • Obsolescence and expiry: depreciation, ageing batches, write-offs
  • • Handling: labour for moves, cycle counts, rework
  • • Insurance: coverage priced on inventory value

Signs of a Dead Stock Problem

  • • SKUs sitting above the upper days-of-stock band for months
  • • Batches sliding into the 0–25% remaining shelf-life bucket
  • • Cash flow problems despite decent sales
  • • Warehouse racks constantly full while fill rates slip
  • • The same fast movers appearing in the Sales Loss report every week

Working Capital Blocked in Inventory: Healthy vs Excess

The single most useful number in a carrying-cost review is working capital blocked = Σ (on-hand quantity × unit cost), computed SKU by SKU. On its own it just tells you what your warehouse is worth. The insight comes from splitting it into two buckets: healthy inventory — the stock you need to cover demand until your next inward arrives — and excess inventory — everything above that. The excess bucket is your recoverable cash. It is also the honest ceiling on any liquidation exercise: you cannot release more cash than you have excess.

The split works on days-of-stock bands, not gut feel. Express each SKU's position as days of cover (current stock ÷ daily run-rate) and compare it against two lines:

The safety floor: 2 × inward TAT of demand

If your supplier takes 10 days to deliver after you order (the inward TAT) and the SKU sells 100 units a day, the floor is 2 × 10 × 100 = 2,000 units. Below that, you are understocked: even a reorder placed today may not land before the shelf goes empty. This is the same floor FilFlo's Procurement Alerts use to compute "days left" and flag SKUs as Critical or Reorder Soon.

The upper band: your overstock line

Days of stock above the upper band means the SKU is overstocked — capital parked beyond any realistic demand scenario before the next replenishment cycle. Every unit above the band belongs in the excess bucket of the working-capital split.

Per-SKU thresholds, maintained in bulk

A ghee jar and a seasonal gift pack should not share the same bands. In FilFlo, lower and upper stock thresholds are fields on the product master — Under Stock fires when current stock drops below the lower threshold, Over Stock when it exceeds the upper one — and both are bulk-updatable by CSV, so a quarterly threshold review across 500 SKUs is a spreadsheet upload, not an afternoon of clicking.

Run this split monthly and the conversation with your finance team changes. Instead of "inventory is ₹50 lakhs," it becomes "₹38 lakhs is healthy cover, ₹12 lakhs is excess concentrated in these 14 SKUs — here is the plan to move it." That is a working capital inventory optimization plan a CFO can actually act on.

Shelf-Life Buckets: Dead Stock Management for Food & Beverage Brands

For FMCG brands the dead-stock problem has a harder edge: stock does not just sit, it expires. Worse, quick-commerce and modern-trade channels enforce shelf-life acceptance windows — a dark store will refuse a batch that has burned too much of its life in your warehouse. So a batch can become unsellable into your best channel long before its printed expiry date.

FilFlo handles this at batch grain. Every inward records the batch with its MFG and EXP dates. The By Age tab of Product Inventory lists stock batch-wise with those dates visible, and each batch is classified into a remaining-shelf-life bucket per warehouse: 0–25%, 25–50%, 50–75%, or 75–100% of the SKU's total shelf life left. Picklists allocate FIFO by inward date, so the oldest stock naturally leaves first. When a batch still slides down the buckets, the move is deliberate: push it to quick commerce or a promotion while it is still within the channel's acceptance window, rather than discovering it at a GRN rejection or a write-off.

How Ageing Stock Shows Up in FilFlo

0–25% shelf life left
Batch nearing expiry, EXP date shown in red
Channels will start refusing it
Action: liquidate now — q-com push, promotion, or staff sale
25–50% shelf life left
Inside or near channel acceptance limits
FIFO allocation should be draining it
Action: prioritise into fastest-moving channel
Overstocked SKU
Days of stock above the upper band
Excess units in the working-capital split
Action: pause reorders, review thresholds
Healthy
Days of cover between floor and upper band
Fresh batches, 75–100% life remaining
Status: leave it alone

An Honest On-Hand Number: Count Adjustments and Variance Reasons

Every formula above depends on the on-hand quantity being true. In most warehouses it drifts: a case gets damaged in handling, units go missing, an inward was keyed wrong, a batch quietly expired on a back rack. If the system says 800 units and the rack holds 720, your days-of-cover, your safety floor, and your working-capital number are all fiction.

FilFlo's Count Adjustment workflow exists to close that gap without letting anyone quietly rewrite stock. A cycle counter enters the physical quantity; the system computes the variance automatically and requires a typed reason — damage, theft, count_error, expiry, or other. The adjustment sits as pending until a second person approves or rejects it, with before/after snapshots preserved. Every movement — inward, allocation, outward, adjustment — also lands in the Inventory Logger with the running available-after balance and the person who did it.

The variance reasons are not bureaucracy; they are a diagnosis. A warehouse whose adjustments skew towards damage has a handling problem. One that skews towards expiry has a buying problem — which takes you straight back to the overstock bands above. Either way, the carrying cost was real; the reason codes tell you which lever to pull.

RTO Returns: The Dead Stock You Can Actually Recover

For D2C brands, one of the biggest unmanaged pools of blocked capital is returned stock — RTO shipments that came back and never re-entered inventory because nobody had a process for them. They sit in cartons near the inward dock, invisible to the system, fully paid for, earning nothing.

FilFlo treats returns as a three-stage pipeline. The Inward Queue receives the return and records expected vs received quantities per SKU. Crate Processing triages each crate per product into Sellable (restocked to available inventory immediately), Non-sellable (sent to rework), or Discard (a write-off ledger entry, booked honestly). The Rework Queue then repackages, relabels, or reconditions the non-sellable portion — outcomes are either Reworked, back to sellable stock, or Cannot Rework, to discard. Every re-entry and write-off hits the inventory ledger with a typed source, so recovered stock is real stock, not a guess.

When returns are triaged systematically, a meaningful share of returned stock typically turns out to be recoverable as sellable. If your brand does meaningful RTO volume and has no triage process, that is not a rounding error — it is one of the cheapest working-capital releases available to you, because the goods are already yours and already paid for.

The Flip Side: Sales Loss Valued at PO Rate

Carrying cost is only half the picture, and optimising it in isolation produces a new failure mode: a lean warehouse that keeps running out of the SKUs buyers actually order. The honest counterweight is FilFlo's Sales Loss report, which takes every B2B order line where you shipped less than the channel ordered, multiplies the short quantity by the PO rate, and shows the result as short revenue — the rupee value of demand you had in hand and could not serve.

Read the two reports together and the pattern is usually stark. The SKUs blocking capital in the excess bucket are almost never the SKUs topping the Sales Loss report. Stock in the wrong place costs sales; the same rupee moved from a slow mover to a fast mover pays for itself twice — once in carrying cost saved, once in fill rate recovered. Quick-commerce channels compound the second half: repeated short supply against Blinkit or Zepto POs invites fill-rate penalties and worse shelf positions, costs that never show up in an inventory valuation.

A useful monthly ritual: put the top ten SKUs by excess working capital next to the top ten by sales loss. The first list is where the cash comes from; the second is where it should go.

A Worked Example: Releasing Cash from Slow-Moving Stock

Illustration: ₹2.5 Crore in Slow-Moving Stock

Consider an illustrative D2C brand that runs the working-capital split and finds ₹2.5 crores of inventory sitting above its upper days-of-stock bands — cash that cannot fund the trending SKUs its channels keep ordering. The numbers below are illustrative, but the shape of the exercise is the one described in this article:

Before the Review

Excess stock value:₹2.5 crores
Monthly carrying cost:₹5.2 lakhs
Inventory turnover:2.1x per year
Cash availability:Limited

After Six Months of Discipline

Excess stock cleared:₹1.8 crores
Monthly carrying cost:₹1.4 lakhs
Inventory turnover:5.2x per year
Cash recovered:₹1.8 crores

The levers, in order of preference:

  • • Stop the inflow first: pause or cut reorders on every overstocked SKU — the Procurement Alerts screen simply stops suggesting them, so this costs nothing
  • • Channel push: route ageing batches to quick commerce and promotions while they are still inside shelf-life acceptance windows
  • • Bundles and schemes: pair slow movers with fast movers via trade schemes rather than discounting them alone
  • • RTO recovery: triage the returns backlog — sellable stock re-enters inventory instead of buying more
  • • Honest write-offs last: discard what is genuinely unsellable, with a variance reason, so the balance sheet stops carrying fiction

Calculate Your Inventory Optimization ROI

Current Situation

Total inventory value:₹50 lakhs
Dead stock (30%):₹15 lakhs
Monthly carrying cost (2.5%):₹37,500
Annual carrying cost:₹4.5 lakhs

After Optimization

Optimized inventory:₹35 lakhs
Dead stock cleared:₹12 lakhs
New monthly carrying cost:₹21,875
Annual savings:₹1.88 lakhs
Total Benefit: ₹13.88 lakhs
₹12L cash released + ₹1.88L annual savings (illustrative)

Start Optimizing Your Inventory Investment

Measure

Compute working capital blocked and split it healthy vs excess

Band

Set per-SKU lower and upper thresholds; bulk-update by CSV

⚡

Liquidate

Push ageing batches to q-com; triage RTO stock back to sellable

Rebalance

Redirect the freed capital to SKUs topping the Sales Loss report

The FilFlo Screens That Do the Work

None of this requires a new spreadsheet. The reports and views below are where a carrying-cost review actually happens inside FilFlo:

1. Sales Loss Report

Short-shipped units per SKU (ordered vs invoiced), valued at PO rate. This is the inverse of dead stock — if SKU A is always here and SKU B never is but sits at 90+ days of cover, you are holding the wrong mix. Reallocate capital from B to A.

2. Product Inventory — By Age

Batch-level stock with MFG and EXP dates and shelf-life bucket classification per warehouse. Your ageing-stock queue, sorted for you: anything drifting towards the 0–25% bucket needs a channel push this week, not a discovery at the next stock count.

3. Warehouse Insight — Days On Hand

Stock, billed, and ordered quantities per warehouse with DOH per SKU. This is where over/under-stock bands become visible across locations — the same SKU can be overstocked in one warehouse and below its safety floor in another, which is a transfer, not a purchase.

4. Procurement Alerts

Severity (Critical / Reorder Soon), current stock, days left, and an editable suggested quantity per SKU, with the default supplier and last unit price alongside. The place where the buying discipline lives: overstocked SKUs stop getting bought, understocked ones get caught before the stockout.

Frequently Asked Questions

How do I calculate working capital blocked in inventory?

Multiply on-hand quantity by unit cost for every SKU and add it up: working capital blocked = Σ (on-hand qty × unit cost). The useful next step is splitting that total into healthy inventory (stock you need to cover demand until the next inward) and excess inventory (everything above your upper days-of-stock band). The excess portion is the cash you can actually go after without risking stockouts.

What counts as overstock and understock for an FMCG SKU?

A practical rule: express each SKU's stock in days of cover (current stock ÷ daily run-rate). If days of stock sit above your upper band, the SKU is overstocked. If stock falls below the safety floor — roughly 2 × inward TAT worth of demand — it is understocked and at risk of a stockout before the next replenishment can land. In FilFlo, lower and upper thresholds are per-SKU master fields, and you can bulk-update them by CSV instead of editing hundreds of SKUs one at a time.

How does shelf life affect inventory carrying cost?

For food and beverage brands, stock does not just tie up cash — it expires. FilFlo buckets every batch by remaining shelf life (0–25%, 25–50%, 50–75%, 75–100%) per warehouse, using the MFG and EXP dates recorded at inward. Batches sliding into the lower buckets are candidates to push into quick commerce or promotions before channels refuse them on shelf-life grounds and the stock becomes a write-off instead of revenue.

Can returned (RTO) stock be recovered instead of written off?

Usually a meaningful share can. In FilFlo's returns pipeline, each return is received in the Inward Queue, split into crates, and every crate is triaged as Sellable, Non-sellable, or Discard. Sellable stock goes straight back to available inventory; non-sellable stock goes to a Rework Queue for repackaging or relabeling. In practice a meaningful share of returned stock turns out to be recoverable as sellable — cash that would otherwise sit in a corner of the warehouse as unbooked loss.

Is holding less stock always cheaper?

No. The flip side of carrying cost is sales loss — orders you received but could not fulfil. FilFlo's Sales Loss report values every short-shipped unit at the PO rate, so you see the rupee cost of understocking next to the rupee cost of overstocking. The goal is not minimum inventory; it is the right inventory: fewer days of cover on slow movers, a protected safety floor on the SKUs that keep appearing in the Sales Loss report.

Ready to Unlock Your Cash Flow?

See where slow-moving stock is tying up cash and where faster-moving SKUs need more working capital.

Calculate Your Savings