Skip to main content
Card class: HeroCategory: Ecommerce Platform
Items with on-hand value > 0 and zero sales in the last 180 days. Direct write-down candidate.

At a glance

Items with on-hand value > 0 and zero sales in the last 180 days. The hard-cut bad stock view: direct write-down or liquidation candidate.
What it countsItem.QuantityOnHand × AverageCost for items where MAX(SalesOrderLine.TransactionDate) < TODAY - 180 OR no sales record at all.
Threshold180 days zero-sales is the default. Configurable per workspace (apparel often uses 365 for off-season; electronics uses 90).
In-transitExcluded.
WIPExcluded.
CurrencyOneWorld: reporting currency.
Subsidiary scopeRespects dashboard filter.
Time windowRT
Alert trigger>$25k dead, sentiment dead_stock. Configurable.
Rolesowner, 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. Dead-stock threshold set to 180 days zero-sales (default for apparel).
CategorySKU countDead stock value (USD)
Last season Brand A142$640,000
Last season Brand B86$410,000
End-of-life Brand C32$280,000
Discontinued sub-styles28$180,000
Damaged / clearance14$90,000
Dead Stock Value (this card)302$1,600,000
Five things to notice:
  1. 1.6Miswellabovethe1.6M is well above the 25K alert threshold and the Controller already knows this; what the card adds is the write-down decision frame. 1.6Mofdeadstockata241.6M of dead stock at a 24% carrying-cost rate is 384K of annual silent expense, which is the financial case for liquidation rather than holding hopefully. The decision tree sits behind the number: liquidate now at 30-50% recovery, donate for tax write-off (US Section 170 contributions), return to supplier where contract permits, or formal write-down with auditor sign-off. The card does not pick the path; it makes the path inescapable. A Controller without this card has the same $1.6M problem but discovers it at year-end when the auditor flags impaired inventory and forces a sudden write-down. With this card, the discovery happens 6-9 months earlier and the recovery options are still open.
  2. Last season inventory ($1.05M) is the seasonal-clearance candidate. Liquidation channels: outlet stores, employee sales, jobbers (off-price retailers like Marshalls / TJ Maxx / Ross), online liquidators (Liquidation.com, BULQ), bundling into mystery boxes for DTC. Typical recovery curves: outlet 50-70 cents on the dollar, jobbers 25-40 cents, online liquidators 15-25 cents, mystery box 30-45 cents net of fulfilment. The selection depends on brand sensitivity (jobbers can dilute brand equity), urgency (carrying cost burns weekly), and recovery expectation. Apparel businesses that wait 6 months to liquidate typically recover 10-15 cents less than businesses that move at the 180-day mark.
  3. **End-of-life (280K)isthesupplierreturncandidateifreturnpolicyallows.Manydistributionagreementsincludereturnforcreditclausesonslowmovers(typically510280K) is the supplier-return candidate if return policy allows.** Many distribution agreements include return-for-credit clauses on slow-movers (typically 5-10% of annual purchases per supplier per year). The Controller should pull the contracts, confirm the credit window, and process before it closes. Where return is not permitted, donation (US Section 170 inventory contributions) generates a tax deduction equal to cost basis plus half the appreciated value, capped at twice cost; for a 280K inventory pool this can be a $300-400K tax benefit at the federal corporate rate. UK equivalent (Donations to Charity Relief) is less generous but still material. Either beats writing the dollar to zero with no recovery.
  4. Discontinued sub-styles ($180K) usually need write-down because there is no market for orphaned variants. The merchant’s own website does not feature them, distributors will not take them, and DTC has no demand because the parent product line has moved on. The right move is a formal lower-of-cost-or-market write-down processed in NetSuite via Inventory Adjustment with the appropriate GL account hit. Auditors expect to see this for any item sitting 180+ days with documented zero demand; the surprise is when it does not appear. Vortex IQ surfaces it; the merchant’s audit committee usually approves the write-down within one cycle of seeing it.
  5. Pair with Dead Stock with Active Ad Spend to find the killer cross-channel signal: dead stock that is still being advertised. On this account the cross-connector join surfaced 18 SKUs in the dead-stock cohort that still had active Google Ads campaigns running, with 14,800ofadspendinthelast30daysagainstproductsthathadliterallyzerosellthrough.Thatispurewaste,anditisinvisibletoanyonelookingatNetSuitealone(whichdoesnotseeadspend)orGoogleAdsalone(whichdoesnotseeinventoryaging).Worse,whenthecrosschanneljoinwasextendedtoincludetheUKCanadiansubs,threemoreSKUssurfacedthatweredeadintheUSwarehousebutstillbeingadvertisedontheUKShopifystorefront,wheretheinventoryhadbeentransferred220daysearlierandneversold.Annualwasteonthisaccount:roughly14,800 of ad spend in the last 30 days against products that had literally zero sell-through. That is pure waste, and it is invisible to anyone looking at NetSuite alone (which does not see ad spend) or Google Ads alone (which does not see inventory aging). Worse, when the cross-channel join was extended to include the UK Canadian subs, three more SKUs surfaced that were dead in the US warehouse but still being advertised on the UK Shopify storefront, where the inventory had been transferred 220 days earlier and never sold. Annual waste on this account: roughly 180K of ad spend on dead inventory. The card pays for the entire Vortex IQ subscription many times over on a single finding.

Sibling cards merchants should reference together

CardWhy pair it with Dead Stock Value
Inventory AgingAging buckets show the drift toward dead.
Total Inventory ValueThe total. Dead stock is the bad slice.
Inventory Carrying CostThe expense impact of holding.
Dead Stock with Active Ad SpendCross-channel killer view.
Margin by SKUDead stock often has compressed margins from discounting.
Top SKUs ValueThe opposite: live, fast-moving stock.

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 → Slow Moving Inventory (closest native equivalent, default 90-day threshold) Reports → Inventory → Inventory Aging Detail (the 180+ bucket of which is the dead-stock candidate pool) Reports → Inventory → Item Demand Plan vs Actuals (forward demand signal that confirms a dead diagnosis) Saved search: Items with QuantityOnHand > 0 AND MAX(LastSaleDate) < TODAY - 180, summed on QuantityOnHand × AverageCost SuiteAnalytics workbook: most accounts maintain a workbook called “Slow / Dead Inventory” with configurable thresholds; the data source is the same Item table this card reads Saved search variant for last-receipt aging: Items with QuantityOnHand > 0 AND MAX(LastReceiptDate) < TODAY - 180 (alternative definition where stock that has not been replenished is the signal, used by some B2B distributors)
The Slow Moving Inventory report defaults to a 90-day threshold; this card defaults to 180 days zero-sales for apparel and 90 days for fast-moving categories. Tunable per workspace via the field map. For OneWorld accounts run Reports → Inventory → Inventory Valuation by Subsidiary at the same scope as the dashboard filter, otherwise FX shifts the dollar value of remote-sub dead stock between report runs. Common reconciliation pitfalls:
  • The Slow Moving report includes everything below the threshold (sluggish-but-moving SKUs included), while this card cuts hard at zero sales in the threshold window. Expect Slow Moving to read 1.5-3x higher than this card on a typical mid-market apparel business.
  • Last-sale vs last-receipt date can move the population by 15-25%. Apparel typically uses last-sale (a SKU that has not sold in 200 days is dead even if it was received yesterday); B2B distribution sometimes uses last-activity (received OR sold). The card respects whichever is set in the field map.
  • Substitute SKUs and kits: an Item that ships exclusively as a component of an Assembly Build may appear dead at the component level (no Sales Order line) while moving heavily at the parent level. Most accounts include kit / assembly consumption as a “sale” for aging purposes; confirm the field map.
Why our number may legitimately differ from a Slow Moving Inventory report:
ReasonDirectionWhy
Threshold definitionEither90 vs 180 vs 365 days. Card defaults 180 for apparel, 90 for electronics, 30-60 for food and beverage. The Slow Moving report defaults to 90 globally.
Sale event definitionEitherCard counts a Sales Order line as “activity”; some accounts include only Invoiced Sales Orders. The difference is the SOs in Pending Billing (shipped, not yet invoiced), which look like sales physically but not financially.
Kit, assembly, and bundle consumptionCard may overstateIf components are consumed into an assembly that sells, the component looks dead at line level but is moving at parent level. Most accounts roll up; field map can tune.
Substitute SKUsCard may overstateA SKU manually retired in favour of a successor (e.g. BR-A-001-V1 discontinued, replaced by BR-A-001-V2) shows as dead under the V1 record. Some Controllers tag with a “successor” custom field to suppress; default behaviour is to report.
Seasonal itemsCard may overstateApparel “spring 26” SKUs at end of summer may register as dead even though they will sell next year. Carve out via custom field tag (is_seasonal = true); default behaviour is to include.
Customer-allocated stockCard may overstateStock physically reserved for a B2B customer but not yet shipped (waiting on Purchase Order acknowledgement, customer scheduling, etc.) reads as dead. The field map can exclude SKUs with non-zero committed quantity.
In-transit and on-orderCard excludesStock in transit or on open POs is excluded by definition (no on-hand value).
Costing method changeCard may shiftToggling Item Cost Method (Average to Standard, etc.) recomputes the dollar value at the new basis. The SKU population is unchanged; the dollar headline moves.
Damaged / quarantined stockCard may understateStock moved to a “damaged” or “quarantine” location with not available for sale flag does not get counted by some reports. Card includes if NetSuite still tracks it as on-hand at any location.
FX cadenceSmallOneWorld accounts: card uses current-day FX, NetSuite reports may use period-end. Differences usually under 2%.
Cross-connector reconciliation:
CardExpected relationshipWhat the comparison reveals
shopify.inventory_valueDifferent definitionShopify shows total inventory at variant level for synced SKUs; this card shows the cold subset across all channels. The gap reveals how much dead stock is sitting outside the Shopify catalogue (wholesale-only, marketplace-only, or unsynced).
bigcommerce.inventory_valueDifferent definitionSame dynamic. BC sees only its own catalogue.
adobe_commerce.inventory_valueDifferent definitionAdobe Commerce / Magento Multi-Source Inventory can report on multiple sources but rarely has the cold-stock cut.
Dead Stock with Active Ad SpendKiller cross-channelDead stock plus active Google Ads, Facebook, or TikTok campaign on the SKU equals pure waste. The single highest-leverage finding any Vortex IQ subscriber gets in the first 30 days.
google_ads.cost per-SKUIndirectCross-reference per-SKU ad spend with the dead-stock cohort. Any non-zero ad spend on a dead SKU is a process failure.
Inventory Carrying CostMultiplicativeDead stock value times the carrying-cost rate equals the silent annual expense of holding zero-velocity inventory. The financial case for liquidation.
The cross-channel killer view is that NetSuite is the only system that can tell you “this SKU has not moved in 200 days” because the commerce platforms only see what they sold, not what is sitting cold in the warehouse. A merchant running ads on a sold-out variant gets a “no stock” signal from Shopify; a merchant running ads on a SKU sitting in NetSuite at $180K of cold stock gets nothing from Shopify, because the SKU has stock and Shopify will happily ship the next order, even though no order has come in 200 days. This card plus the cross-channel join is the only way that conversation happens automatically.

Known limitations / merchant FAQs

What is the right threshold? Industry-dependent: apparel 180-365 days (fashion turnover, end-of-season carryover), electronics 90-180 days (lifecycle obsolescence is fast), food and beverage 30-60 days (perishability and best-before windows), industrial distribution 365-730 days (long-cycle slow movers are normal), furniture and homewares 180-365 days (custom and made-to-order skews older), beauty and cosmetics 90-180 days (formulation refresh and shade rotation). Tune the field map per workspace and per category if you carry mixed inventory. The threshold is the diagnostic line, not the write-down trigger; finance still needs to look at each cohort. Should I auto-write-down dead stock? Audit and accounting policy decision. Most mid-market businesses do a formal annual review with auditor sign-off, with smaller mid-year adjustments for material items. A common pattern is quarterly identification (this card surfaces the cohort) and annual write-down (formal approval through audit committee). Auto-write-down is rare because the journal entry materially affects reported earnings; the safer pattern is to surface the candidate list, get cross-functional alignment (merchandising, ops, finance), and book the write-down with documentation. Vortex IQ’s role is the surfacing; the decision lives in finance governance. Slow-moving vs dead, what is the difference? “Slow-moving” usually means stock turning less than 2x annually. “Dead” means zero sales in N days. Card focuses on dead; slow-moving is captured implicitly via Inventory Turnover. The two views complement each other: dead is the hard-cut bad cohort that needs immediate decision, slow-moving is the early-warning cohort that needs merchandising attention before it goes dead. A healthy operation works both lists weekly. Returns from customers, do they count as activity? Returned-to-stock SKUs show as “received” again, refreshing the receipt date. Most accounts use last-sale rather than last-receipt for dead-stock detection precisely because returns can otherwise mask a SKU that is not selling. Check the field map; the safer setting for write-down purposes is last-sale. Returns also have an interesting cross-channel signal: if a SKU has high return rates and zero forward sales, it is not just dead, it is structurally rejected by customers, which is a faster path to formal write-down. Multi-currency dead stock, FX impact? Each subsidiary’s dead stock in base currency, summed at reporting FX. Daily FX moves the headline dollar value but does not change the SKU population. A 5% GBP-USD move shifts the dollar value of UK-located dead stock by 5%, which can alarm a Controller who does not understand the source of the move. The fix is to read the per-subsidiary cut alongside the consolidated cut. Single-subsidiary vs OneWorld behaviour? Identical logic. OneWorld scopes across subsidiaries and applies elimination logic when consolidated. The most useful operational read is per-subsidiary: dead stock in a UK distribution sub may be liquidatable through different channels (UK off-price retailers like TK Maxx, EU jobbers) than dead stock in a US sub (Marshalls, Ross). The card surfaces both; the action plan differs. Tax write-down rules, US vs UK? US: GAAP allows lower-of-cost-or-market write-downs for impaired inventory under ASC 330. UK: similar treatment under FRS 102 Section 13 (Inventories). Both require auditor sign-off above material thresholds. US Section 170 inventory donations to qualified charities yield an enhanced deduction equal to cost basis plus half of the appreciation (capped at 2x cost), which often beats liquidation recovery for charitable-eligible product. UK Donations to Charity Relief is more limited but still material. Always confirm with tax counsel before booking; the strategy can shift several percentage points of effective tax rate. B2B vs DTC, do I read this card differently? Yes. DTC dead stock is usually fashion or seasonal end-of-life with predictable liquidation channels (outlet, mystery box, marketplace clearance). B2B dead stock is often customer-specific (a SKU stocked for a single account that stopped ordering) or contract-residual (last batch from a supplier whose contract ended). The B2B liquidation path is harder; sometimes the only options are bulk sale to a competitor distributor or write-down. A B2B Controller should pair this card with Customer Concentration to identify dead stock tied to specific customer accounts and have those conversations directly. OneWorld multi-subsidiary, what about inter-co transfers and dead stock? Inter-co transfers between subs do not reset the dead-stock clock. 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 has been “alive” in the group for 226 days and the clock continues. If a Controller wants the alternative view (transfer-resets-clock), the field map supports a transfer_resets_age = true toggle. The default is the conservative view because the cash has been tied up that long regardless of which sub now holds the title. ASC 606 deferred revenue, does it touch this card? No. This card is a Balance Sheet metric (Inventory), not an Income Statement metric (Revenue). ASC 606 governs revenue recognition timing and does not change how inventory is measured or aged. Dead-stock detection is purely a function of physical movement (received, on-hand, sold), independent of revenue recognition 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 dead-stock 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. Differences are usually under 2% and reflect the FX move, not a change in physical dead-stock cohort. NetSuite vs Oracle ERP Cloud / SAP S/4HANA on dead-stock detection? NetSuite’s strength on this card is the lightweight saved-search and SuiteAnalytics workbook approach, which can be built in 15-30 minutes by an internal admin. Oracle ERP Cloud has Inventory Aging and Slow-Moving reports that work similarly. SAP S/4HANA exposes the data through Inventory Aging Report (TAINF) and the Material Stock report (MMBE / MB52); the underlying logic is the same but the user experience is heavier. For mid-market commerce (30150Mrevenue)theNetSuitemodelisusuallyfastest;for30-150M revenue) the NetSuite model is usually fastest; for 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 dead-stock card definition is identical, the field maps differ. Vendor return programmes, how do I model recovery? If a supplier offers stock-return-for-credit (typical 5-10% of annual purchases), the dead-stock candidate list intersected with eligible items is the priority cohort. The recovery is full credit (100% of cost), which beats every other liquidation channel. The catch is the time window (usually 12 months from receipt) and the eligibility list (current-season items only, no end-of-life). Some businesses leave this benefit on the table because they do not surface dead stock until the return window has closed; this card opens it sooner. What happens after a write-down, does the SKU drop off the card? A write-down via Inventory Adjustment posts a journal entry that moves the asset value from inventory to write-down expense, but the physical stock often remains on hand until disposed. If the on-hand quantity is set to zero (full disposal), the SKU drops off. If the on-hand remains and only the cost is written down, the SKU stays on the card with a $0 dead-stock value, which is not useful. Most accounts dispose physically (donate, destroy, sell as scrap) within 30 days of the write-down so the card cleanses itself. Magento / Adobe Commerce specifics, do their categories drift differently? Adobe Commerce categories often drift due to the platform’s flexible attribute model: a SKU can be assigned to a category, the category can be deactivated on the storefront, and the SKU continues to exist in NetSuite with on-hand value but no visible commerce presence. This is a common source of dead stock that the merchandising team forgets exists. The cross-channel join with Adobe Commerce category visibility is one of the cleanest ways to find structural dead stock.

Tracked live in Vortex IQ Nerve Centre

Dead Stock Value is one of hundreds of KPI pulses Vortex IQ tracks across NetSuite and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.