Estimated cost of holding aged inventory. Joined with commerce sell-through to flag dead stock with cash impact.
At a glance
Estimated cost of holding inventory across the period. The “real expense” of having stock on the floor: storage + insurance + cost of capital + obsolescence risk + shrinkage.
| What it counts | Total Inventory Value × Carrying Cost Rate × (Days ÷ 365). Default carrying-cost rate is 25% per year (industry standard). Configurable per workspace. |
| Carrying cost rate | Composed of: Cost of capital (8-15%), Storage (2-5%), Insurance (1-2%), Obsolescence (3-5%), Shrinkage (1-3%). Total typically 18-32%. |
| Tax treatment | n/a. |
| Currency | Reporting currency. |
| Subsidiary scope | Respects dashboard filter. |
| Time window | 30D (period expense view) |
| Alert trigger | None at headline; informational. Some workspaces set “rising YoY >20%“ |
| Roles | owner, finance |
Calculation
Calculated automatically from your NetSuite data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A US wholesale apparel distributor on NetSuite OneWorld. Three subsidiaries: a US parent (USD), a UK distribution sub (GBP), and a Canadian sub (CAD). Annual revenue ~$80M. 30-day window 14 Mar 26 to 12 Apr 26. Reporting currency USD.| Component | Rate | 30-day expense (USD) |
|---|---|---|
| Total inventory value | n/a | $28,630,000 (avg) |
| Cost of capital (12%) | 12% | $282,290 |
| Storage / warehouse | 4% | $94,100 |
| Insurance | 2% | $47,050 |
| Obsolescence reserve | 4% | $94,100 |
| Shrinkage | 2% | $47,050 |
| Total Carrying Cost (this card) | 24% | $564,590 |
| Annualised | $6,875,000 |
- 28.6M average inventory it annualises to $6.875M. That is roughly the operating budget of the merchandising team plus the buying team plus the warehouse manager combined. The reason most boards never see this number is that it is not a single GL line; it is a composite of warehouse rent (booked to OpEx), insurance premiums (booked to OpEx), opportunity cost of capital (not booked at all), obsolescence reserves (booked to inventory write-downs), and shrinkage (booked to COGS adjustments). The card consolidates them into the one number a CFO actually wants for the inventory-discipline conversation. Surfacing it weekly turns it from a year-end discovery into a weekly operational lever.
- **Reducing inventory by 28.6M to 100K per month, 5M of additional inventory saves 1.2M. The bulk buy loses by 4-5x. The card surfaces this trade-off; without it, the buying team makes lock-in decisions on margin alone and the carrying cost is invisible.
- The 24% rate is conservative; wholesale apparel typically runs 25-32% because of obsolescence (fashion) while industrial distribution might run 18-22% and food and beverage might run 28-35% (perishability). Tune via field map per workspace and per category. The single biggest variable is obsolescence: fashion-driven categories load 5-8% obsolescence reserves into the rate, while commodity-grade industrial parts load 1-2%. The card defaults to 24% because that is the median across mid-market commerce; the right rate for your business is the weighted average across categories you carry.
- Pair with Dead Stock Value: 384K annual carrying cost on items that are not selling, which is pure waste. The cross-channel finding intensifies this: the dead-stock cohort that still has active ad spend on it costs not just 180K of wasted ad budget per year (on this account). Total annual waste from a single misalignment between inventory and ad-spend systems: $564K. That is one finding, surfaced by joining NetSuite carrying-cost data to the dead-stock cohort to the Google Ads campaign data, which no individual platform can produce alone. The cross-connector graph is the value, not any single card.
- Cost of capital is the biggest lever and the most commonly mis-set rate. If your business borrows at 8% on a revolving credit line, drop the rate to 8%; if you have surplus cash earning 5%, the opportunity cost is 5%; if you are venture-funded and the next round priced at 25% effective dilution cost, the rate is closer to 18-22%. The default 12% is a reasonable middle ground for a profitable mid-market business with a working-capital line, but it is wrong for both ends of the spectrum. Cash-rich businesses overstate their carrying cost (and miss the opportunity to over-invest in working capital efficiency); leveraged businesses understate it (and miss the urgency of inventory turnover). On a OneWorld account, the cost-of-capital rate can also differ by subsidiary: a US parent on a 6% credit line and a UK sub on a 9% line should ideally use sub-specific rates rather than a consolidated single rate. The field map supports per-sub overrides for OneWorld accounts.
Sibling cards merchants should reference together
| Card | Why pair it with Inventory Carrying Cost |
|---|---|
| Total Inventory Value | The base. |
| Dead Stock Value | The bad-stock subset; carrying cost on this is pure waste. |
| Inventory Aging | Aging buckets show where carrying cost concentrates. |
| Inventory Turnover | Turn rate is inverse of carrying-cost share. |
| Gross Margin % | Carrying cost not in COGS but pressures net margin. |
Reconciling against the vendor’s own dashboard
Where to look in NetSuite: NetSuite does not expose a Carrying Cost report. The card derives from Inventory Valuation multiplied by the workspace-configured rate. Most accounts compute this manually for board presentations once a year and never again, which is why most boards see it as a static number rather than a weekly operational lever. The closest native views to triangulate against:
Reports → Inventory → Inventory Valuation Summary (the inventory base, the largest input)
Reports → Financial → Income Statement (warehouse rent, insurance premiums, write-down lines all live here, scattered across OpEx and COGS adjustments)
Reports → Inventory → Inventory Valuation by Subsidiary (for OneWorld; per-sub base values, important when capital costs differ by sub)
Saved search: Item-level Item.AverageCost × Item.QuantityOnHand aggregated, intersected with the workspace carrying-cost rate (this is essentially what the card does)
SuiteAnalytics workbook: a small subset of accounts maintain a “Carrying Cost Estimate” workbook that is the manual equivalent of this card; it is rare because the rate inputs are not natively in NetSuite and have to be entered by the user
The headline difference between this card and what a CFO would compute on a spreadsheet is that this card does it weekly with current data; the CFO’s spreadsheet usually does it quarterly with last-quarter’s snapshot.
Common reconciliation pitfalls when comparing against a manual CFO calculation:
- The CFO’s spreadsheet typically uses the period-end Balance Sheet inventory value; this card uses the period-average across the window. For a stable inventory base the difference is trivial; for a business adding or drawing inventory mid-period it can shift the headline by 5-10%.
- CFO calculations sometimes book real expenses (warehouse rent, insurance, interest paid) directly to carrying cost rather than applying a rate to inventory base. That approach computes the actual booked expense; this card estimates the full economic cost including opportunity cost of capital, which is not a booked expense. Expect the card to read 25-50% higher than a “actual booked expenses” calculation, with the gap being opportunity cost.
- Multi-warehouse and multi-location: if your business has 3 warehouses with different rent rates, a single workspace-level storage rate is an average. The field map supports per-location rate overrides if precision matters, but most workspaces accept the average.
| Reason | Direction | Why |
|---|---|---|
| Carrying-cost rate | Either | Default 24%; CFOs use 20-32% depending on industry, capital structure, and reporting policy. The card lets each workspace override; mismatch usually means workspace rate has not been tuned. |
| Storage rate | Either | If you own warehouses, storage cost is fixed (rent, depreciation, utilities, payroll); if you use a 3PL, it is variable per pallet or per cube. The default 4% is industry-average; owners with low-cost owned facilities can be at 2-3%, 3PL-heavy businesses can be at 5-7%. |
| Cost of capital | Either | Should reflect actual cost of debt (revolver rate, term loan rate, asset-based lending rate) or opportunity cost of cash (treasury yield, money-market rate, investment alternative). The default 12% is a reasonable middle for a mid-market profitable business; tune for your capital stack. |
| Insurance | Small | The default 2% is industry-average. Cargo and warehouse insurance premiums are typically 0.5-1.5% of inventory value annually but the card includes liability and casualty allocations, pushing to 2%. Tune from your actual policies. |
| Obsolescence reserve rate | Either | The default 4% is fashion-apparel-typical. Commodity goods can be 1-2%, fashion or technology can be 6-10%. The right rate is the historical write-down rate over a multi-year window; one-off events (pandemic-era write-downs) should not anchor the rate. |
| Shrinkage | Either | The default 2% is retail-warehouse-typical. Higher for high-theft categories (electronics, cosmetics), lower for low-theft (industrial bulk). Audit-grade shrinkage data lives in NetSuite Inventory Adjustments; this card uses the workspace rate, not the actual booked figure. |
| Inventory base period choice | Either | Card uses period-average; CFO calculations may use period-end. Differences depend on inventory volatility within the period. |
| Inter-co inventory | Card may overstate | On OneWorld, inter-co inventory in transit (one sub shipped, other sub not yet received) can be on both subsidiary Balance Sheets briefly. The consolidated card uses post-elimination values; per-sub views may double-count for 1-3 days. |
| FX cadence | Small | Per-subsidiary inventory translated at current FX. Quarter-over-quarter comparisons need a consistent FX cadence to avoid spurious moves. |
| Card | Expected relationship | What the comparison reveals |
|---|---|---|
| Dead Stock Value | Multiplicative | Dead stock value times the carrying-cost rate equals the silent annual expense of zero-velocity inventory. On a 384K of pure annual waste. |
| Inventory Aging | Multiplicative per bucket | Each aging bucket carries its own implicit carrying cost. The 91-180 bucket on this account is 940K annualised, which is the working-capital case for either accelerating sell-through or carving back orders. |
| google_ads.cost per-SKU | Compounding | Carrying cost on a SKU plus active ad spend on the same SKU is double-waste. The Dead Stock with Active Ad Spend cross-channel card joins NetSuite inventory data to Google Ads campaign data; multiplying the dead-cohort by the carrying-cost rate gives the carrying side of the waste, the ad spend gives the marketing side, and the sum is the total annual leakage. |
| facebook_ads.spend per-product | Compounding | Same dynamic for Meta. DTC brands typically have wider Facebook spend on dead inventory than wholesale brands, because Facebook ad sets pull in long-tail SKUs that the merchandising team has forgotten exist. |
| shopify.inventory_value | Subset | Shopify-synced subset of the NetSuite total. Carrying cost on Shopify-only stock is a slice of the total; the difference (NetSuite total minus Shopify-synced) is the wholesale and marketplace stock carrying cost, which the merchandising team rarely considers. |
| bigcommerce.inventory_value | Subset | Same. |
| adobe_commerce.inventory_value | Subset | Same. Adobe Commerce Multi-Source Inventory may show a wider slice than Shopify or BC. |
| Cash Collected | Working capital frame | Inventory tied up = cash not collected. The DSO conversation pairs with the carrying-cost conversation: how much cash is locked in stock versus locked in receivables. |
| DSO | Working capital frame | Companion working-capital metric. Together with carrying cost they decompose the working-capital cycle into “cash stuck in inventory” and “cash stuck in receivables”, which are the two levers a Controller actually has. |