Inventory value bucketed by days-on-hand: 0-30 / 31-60 / 61-90 / 91-180 / 180+. Aged stock is cash trapped on the floor.
At a glance
Inventory value bucketed by days-on-hand. Buckets: 0-30, 31-60, 61-90, 91-180, 180+. Aged stock is cash trapped on the warehouse floor.
| What it counts | Item.QuantityOnHand × AverageCost bucketed by Today minus Item.LastReceiptDate. The 180+ bucket is the dead-stock proxy. |
| Tax treatment | n/a (cost basis). |
| Shipping | Included via landed cost if Item record allocates. |
| In-transit | Excluded from aging buckets (no on-hand date yet). |
| Currency | OneWorld: reporting currency at current FX. |
| Subsidiary scope | Respects dashboard filter. |
| Bucket boundaries | Default 0-30, 31-60, 61-90, 91-180, 180+. Configurable. |
| Time window | RT |
| Alert trigger | >15% in 180+ bucket, sentiment inv_aging |
| Roles | owner, finance, operations |
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). Snapshot 14 Apr 26. Reporting currency USD.| Bucket | Inventory value (USD) | % of total |
|---|---|---|
| 0-30 days | $9,810,000 | 36% |
| 31-60 days | $7,420,000 | 27% |
| 61-90 days | $4,180,000 | 15% |
| 91-180 days | $3,920,000 | 14% |
| 180+ days | $2,180,000 | 8% |
| Total Aged Inventory | $27,510,000 | 100% |
- 8% in 180+ is below the 15% alert threshold; the Controller does not get pinged today, but the watchlist conversation starts at 8%. This is the headline read for an apparel distributor. Eight points of 2.18M sitting on the floor with no sales activity in six months. The threshold is 15% before the alert fires because below that level the inventory is usually structurally explainable (off-season carryover, safety stock for slow-replen SKUs, customer-allocated stock for B2B accounts). At 12% the conversation is “monitor”; at 15% it becomes “act”; at 20% it is the auditor’s footnote in next year’s filing. The card surfaces this so the Controller is not surprised at year-end review.
- **22% combined in 91+ days is the strategic concern: 6.1M at 24% is $1.46M annualised, which is the silent expense most CFOs underestimate. The decision tree is: liquidate now at 30-50% recovery, hold to next season at full margin (carrying cost lost), or write down and dispose. The card does not make the decision; it shows the dollar weight of the trapped capital so the decision is informed.
- 63% in 0-60 days is the active flowing stock and the turnover engine. This is the slice that reads as “healthy turnover” on the Inventory Turnover card. A wholesale apparel business with 60% of inventory flowing inside 60 days is at the better end of the industry distribution; a DTC apparel brand should aim for 70%+ in 0-60. If this share drops below 50%, look at upstream demand forecasting: somebody is ordering ahead of demand and the buying calendar needs a hard review.
- **180+ at 14,800 of ad spend in the last 30 days against products with literally zero sell-through. That is pure waste. The Controller cannot see this without joining NetSuite inventory data to Google Ads campaign data. This card is the trigger; the cross-connector card is the kill-shot.
- The bar chart pattern matters more than any single bucket. Steady declining slope across buckets (each bucket smaller than the previous) = healthy fast-moving business. Bulge in the middle (31-90 buckets larger than 0-30) = ordering ahead of demand or seasonal pre-buy. Flat across all buckets = systemic over-stocking, the warehouse is full and nothing is leaving fast. Inverted (180+ bigger than 0-30) = collapsed business, the buyer should have stopped ordering months ago. On this account the pattern is gentle decline, which is the healthiest shape. Compare to a manufacturer client where the 91-180 bucket consistently bulges 5-8 points larger than 31-60, indicating quarterly batch production runs that take 6 months to draw down. Pattern is more diagnostic than absolute level. Add a per-subsidiary cut and the pattern often differs by sub: the UK sub on this account shows a flat distribution (warehouse over-full from a 2025 build), while the US sub shows the gentle decline. Consolidated hides this, per-sub reveals it.
Sibling cards merchants should reference together
| Card | Why pair it with Inventory Aging |
|---|---|
| Total Inventory Value | The total. Aging decomposes by age. |
| Dead Stock Value | The hard-cut bad stock view. |
| Inventory Carrying Cost | The expense impact. |
| Inventory Turnover | Inverse signal. |
| Top SKUs Value | Concentration. |
| Dead Stock with Active Ad Spend | Cross-channel signal. |
Reconciling against the vendor’s own dashboard
Where to look in NetSuite: The native NetSuite views to run side by side with this card:Reports → Inventory → Inventory Aging Detail (the canonical aging report) Reports → Inventory → Inventory Valuation (rolls up the same totals without the bucket cut) Reports → Inventory → Inventory Stock Status (real-time on-hand by location) Reports → Inventory → Slow-Moving Inventory (a stricter cut on items with no activity) Saved search:The Inventory Aging Detail report should match this card to within rounding when you select the same subsidiary scope and snapshot date. For OneWorld accounts run Reports → Financial → Consolidated Balance Sheet → Inventory at the same scope, otherwise FX shifts the dollar value of remote-sub inventory between report runs. Common reconciliation pitfalls:Item.QuantityOnHand > 0, grouped byToday minus LastReceiptDateaged into 0-30, 31-60, 61-90, 91-180, 180+ buckets, summed onItem.AverageCost × Item.QuantityOnHandSuiteAnalytics workbook: most accounts have a workbook called “Inventory Aging” that pivots Item by aging band. The data source is the same; the view is interactive.
- NetSuite’s standard report uses calendar-day buckets; some custom workbooks use 30 / 60 / 90 / 120 / 180+ instead of 91-180, splitting the long tail differently. The card defaults to the standard bands; tune the field map if your finance policy uses different boundaries.
- In-transit inventory is excluded from this card by default (no on-hand date yet) but appears on the Inventory Valuation report. Expect Inventory Valuation to read 5-15% higher than this card if your business has significant ocean freight in flight.
- Multi-location can split a single Item across 4-8 warehouses, each with its own LastReceiptDate. The card uses the location-specific receipt date so a SKU with stale stock in one warehouse and fresh stock in another shows in two buckets simultaneously. Confirm this is the intended behaviour before reconciling at the Item level.
- Lot-numbered and serial-numbered items age per lot or per serial, not per Item. The card respects the costing method; reconciling against an Item-level saved search will not match a lot-level view.
| Reason | Direction | Why |
|---|---|---|
| Bucket boundaries | Either | NetSuite’s standard report uses 30 / 60 / 90 / 180+ (four buckets). Card uses 0-30, 31-60, 61-90, 91-180, 180+ (five buckets) for finer granularity. The 91-180 split is the diagnostic difference; the long-tail dollar total matches. |
| Last activity date vs last receipt date | Either | Some accounts age from last-sold (item is “aging” from the moment of last sale) rather than last-received. Apparel typically uses last-receipt; B2B distribution often uses last-activity (received OR sold, whichever is more recent). Card uses receipt by default; field map can flip to activity. |
| In-transit inclusion | Card lower | Inventory in transit (PO received, not yet stock-on-hand) appears on the Balance Sheet but has no aging date. Card excludes; Inventory Valuation includes. |
| Consigned and customer-allocated stock | Either | Stock physically at a customer site under consignment shows on the Balance Sheet in some setups but not others. Card uses what NetSuite tracks as On Hand; consigned-out stock may sit on a different location. |
| WIP and Assembly Build sub-items | Card lower | WIP excluded by default. The components consumed into WIP have left the warehouse and are not yet finished goods. Inventory Valuation includes WIP value; this card does not. |
| Costing method change mid-period | Card may shift | If the Item Cost Method changed in NetSuite (Average to Standard, or FIFO to Average) the card recomputes from the new basis at the next snapshot, while the historical aging report used the old basis. |
| FX cadence | Small | OneWorld accounts: card uses current-day FX for the snapshot, NetSuite’s reports may use period-end. Differences usually under 1% unless major FX shock. |
| Subsidiary scope | Either | Card defaults to all subsidiaries the connected role can see. Per-subsidiary reports inside NetSuite differ accordingly. |
| Reservations and back-orders | Card unchanged | Card reports physical on-hand including stock reserved for open Sales Orders. Some Controllers prefer “available” (on-hand minus reservations) for aging; tunable. |
| Negative inventory | Card excludes | If a SKU posted into negative quantity (sales fulfilled before the receipt was processed) the card treats negatives as zero. Inventory Valuation reports the negative value, which can mask aged stock elsewhere. |
| Card | Expected relationship | What the comparison reveals |
|---|---|---|
| shopify.inventory_value | Shopify ≤ NetSuite | Shopify tracks inventory at the variant level for the SKUs synced to the storefront. Wholesale-only or marketplace-only SKUs do not appear in Shopify. The gap is the unsynced or wholesale-only stock. |
| bigcommerce.inventory_value | BC ≤ NetSuite | Same dynamic. Multi-storefront BC installations may show different slices per store. |
| adobe_commerce.inventory_value | Adobe ≤ NetSuite | Adobe Commerce supports Multi-Source Inventory which can show stock across multiple sources, but the source-of-truth is the NetSuite warehouse. |
| Dead Stock with Active Ad Spend | Killer cross-channel signal | Joins this card’s 180+ bucket to active Google Ads / Facebook Ads / TikTok Ads campaigns. Items in 180+ aging with non-zero ad spend in the last 30 days are pure waste. |
| google_ads.cost per-SKU | Indirect | Cross-reference per-SKU ad spend with the aging bucket. SKUs in 91-180 receiving promotional advertising are usually the right call (push them out before they go fully dead). SKUs in 180+ receiving advertising are almost always the wrong call. |
Known limitations / merchant FAQs
What is a healthy aging distribution? Apparel: 50-65% in 0-60 days, less than 10% in 180+. Electronics: 60-75% in 0-60, less than 5% in 180+. Food and beverage (non-perishable): 70-80% in 0-60, less than 3% in 180+. Industrial distribution: 35-50% in 0-60 (longer cycles are normal), less than 15% in 180+. Furniture and homewares: 40-55% in 0-60 (custom and made-to-order skews older), less than 20% in 180+. Industry varies, so compare to your own historical baseline first; the trend versus your own 12-month rolling average matters more than the industry benchmark. Last-receipt vs last-sale date, which counts? NetSuite’s standard view uses last-receipt. Some Controllers prefer last-sale because that is when stock “started aging from a sales perspective”, especially for slow-replenishment B2B SKUs where a single shipment can sit on the shelf for months between batched orders. Card respects the field-map setting; default is last-receipt. The conservative read for write-down purposes is whichever date is more recent (last-activity). Lot and serial-numbered items, do they age separately? Yes if costing method is Lot or Serial Numbered. Each lot has its own age, so a lot received 200 days ago and a lot received 14 days ago of the same SKU appear in two different buckets. Average-cost items roll up to the Item level. For perishables and regulated products (pharma, food, cosmetics with expiry), lot-level aging is the operationally meaningful view; for fashion apparel where the SKU itself is the aging unit, average-cost rollup is fine. WIP, included? Excluded by default. WIP is not finished aged inventory; it is in-process, with components consumed but not yet ready to ship. Manufacturers running NetSuite SuiteIndustries for manufacturing can opt to include WIP via the field map, but the default behaviour treats WIP as a separate Balance Sheet line and ages only finished goods. Multi-currency, FX impact? Each subsidiary’s aging in base currency, summed at reporting FX. Daily FX moves the headline value of remote-sub inventory but does not change the bucket distribution. A 5% GBP-USD move shifts the dollar value of UK-located stock by 5% but the share that sits in 180+ does not change. OneWorld vs single-subsidiary behaviour? Identical formula. OneWorld scopes across subsidiaries; per-subsidiary cuts are essential because consolidated aging can hide a single warehouse running cold while others are healthy. The most common mid-market pattern is one over-stocked warehouse from a planned 2025 build dragging the consolidated 91-180 bucket up while the active warehouses run lean. End-of-season SKUs, can I exclude from aging? Yes, with a custom Item field tag. The field map can carve out “seasonal” items so aging does not fire false alarms on apparel that is meant to sit through summer and sell next spring. The trade-off is that a genuine sell-through failure on a “seasonal” SKU then goes undetected; the better practice is to leave seasonals in aging but tune the alert threshold higher (20% in 180+ instead of 15%) for the relevant period. B2B vs DTC, do I read the buckets differently? Yes. DTC apparel turns the catalogue every 30-60 days; B2B distribution turns slower (60-120 days is normal for industrial distribution). A DTC retailer with 25% in 91-180 is in trouble; a B2B distributor with 25% in 91-180 may be perfectly healthy. The thresholds and alerts in the card are tunable by workspace; do not lift a DTC playbook into a B2B context without recalibrating the bands. OneWorld multi-subsidiary, what about intercompany inventory transfers? Inter-co transfers between subs do not reset the aging clock by default. A SKU received into the US sub on 1 Sep 25, transferred to the UK sub on 1 Mar 26, and snapshotted on 14 Apr 26 ages 226 days (from the original receipt), not 44 days (from the transfer date). The reasoning is that the inventory has been in the group’s hands for 226 days and the cash has been tied up that long, regardless of which sub holds the title now. If a Controller wants the alternative view (transfer-resets-clock), the field map supports atransfer_resets_age = true toggle for OneWorld accounts.
ASC 606 deferred revenue, does it touch this card?
No. This card is on the Balance Sheet (Inventory), not the Income Statement (Revenue / COGS). ASC 606 governs revenue recognition timing; it does not change how inventory is measured or aged. Inventory aging is purely a function of physical movement (received, on-hand, sold), independent of accounting policy.
FX revaluation timing, does it move this card?
Yes, slightly. NetSuite’s monthly FX revaluation revalues remote-subsidiary inventory at the period-end exchange rate. The card snapshots inventory value at current-day FX, so on the day before revaluation the card might read slightly different from a Balance Sheet pulled the day after revaluation. Differences are usually under 2% and reflect the FX move, not a change in physical aging.
B2B credit-hold stock, does it sit in aging?
Yes. Stock allocated against a Sales Order in Pending Approval due to credit hold remains physically in the warehouse and continues to age. The card reports it in the appropriate bucket. The available (on-hand minus reservations) view is a separate cut; this card uses gross on-hand. If the credit hold persists for 60+ days the inventory ages even though it is “spoken for”, which is exactly the signal a Controller wants.
Magento / Adobe Commerce vs NetSuite as inventory source-of-truth?
NetSuite is always the source-of-truth for B2B and multi-channel businesses; Adobe Commerce / Magento is the storefront view of a slice of NetSuite inventory. Adobe Commerce 2.4+ supports Multi-Source Inventory which can sync from NetSuite or operate independently; the safer pattern is to treat NetSuite as the master and let Adobe pull. This card is the master view; commerce platforms see only what was synced.
NetSuite vs Oracle ERP Cloud / SAP S/4HANA on inventory aging?
NetSuite’s strength on this card is the lightweight aging detail report and the SuiteAnalytics workbook, which are configurable in 15 minutes. Oracle ERP Cloud and SAP S/4HANA support deeper costing variants (parallel valuation, multiple costing books, group vs legal vs management views) at the cost of more configuration. For mid-market commerce (250M+ businesses with manufacturing-heavy operations and complex costing requirements, Oracle and SAP earn their additional setup. Vortex IQ supports both NetSuite and Oracle ERP Cloud connectors; the card definition is identical, the field maps differ.
Vendor-managed inventory (VMI), does it count?
Depends on title. If the supplier holds title until consumption (true VMI), the stock is not on the merchant’s Balance Sheet and not in this card. If the merchant holds title from receipt (consigned-in), it is. Confirm with your auditor; the field map respects whichever convention is set up.