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 counts | Item.QuantityOnHand × AverageCost for items where MAX(SalesOrderLine.TransactionDate) < TODAY - 180 OR no sales record at all. |
| Threshold | 180 days zero-sales is the default. Configurable per workspace (apparel often uses 365 for off-season; electronics uses 90). |
| In-transit | Excluded. |
| WIP | Excluded. |
| Currency | OneWorld: reporting currency. |
| Subsidiary scope | Respects dashboard filter. |
| Time window | RT |
| Alert trigger | >$25k dead, sentiment dead_stock. Configurable. |
| 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. Dead-stock threshold set to 180 days zero-sales (default for apparel).| Category | SKU count | Dead stock value (USD) |
|---|---|---|
| Last season Brand A | 142 | $640,000 |
| Last season Brand B | 86 | $410,000 |
| End-of-life Brand C | 32 | $280,000 |
| Discontinued sub-styles | 28 | $180,000 |
| Damaged / clearance | 14 | $90,000 |
| Dead Stock Value (this card) | 302 | $1,600,000 |
- 25K alert threshold and the Controller already knows this; what the card adds is the write-down decision frame. 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.
- 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.
- **End-of-life (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.
- 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.
- 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 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
| Card | Why pair it with Dead Stock Value |
|---|---|
| Inventory Aging | Aging buckets show the drift toward dead. |
| Total Inventory Value | The total. Dead stock is the bad slice. |
| Inventory Carrying Cost | The expense impact of holding. |
| Dead Stock with Active Ad Spend | Cross-channel killer view. |
| Margin by SKU | Dead stock often has compressed margins from discounting. |
| Top SKUs Value | The 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 withThe 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:QuantityOnHand > 0 AND MAX(LastSaleDate) < TODAY - 180, summed onQuantityOnHand × AverageCostSuiteAnalytics 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 withQuantityOnHand > 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 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.
| Reason | Direction | Why |
|---|---|---|
| Threshold definition | Either | 90 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 definition | Either | Card 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 consumption | Card may overstate | If 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 SKUs | Card may overstate | A 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 items | Card may overstate | Apparel “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 stock | Card may overstate | Stock 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-order | Card excludes | Stock in transit or on open POs is excluded by definition (no on-hand value). |
| Costing method change | Card may shift | Toggling 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 stock | Card may understate | Stock 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 cadence | Small | OneWorld accounts: card uses current-day FX, NetSuite reports may use period-end. Differences usually under 2%. |
| Card | Expected relationship | What the comparison reveals |
|---|---|---|
| shopify.inventory_value | Different definition | Shopify 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_value | Different definition | Same dynamic. BC sees only its own catalogue. |
| adobe_commerce.inventory_value | Different definition | Adobe Commerce / Magento Multi-Source Inventory can report on multiple sources but rarely has the cold-stock cut. |
| Dead Stock with Active Ad Spend | Killer cross-channel | Dead 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-SKU | Indirect | Cross-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 Cost | Multiplicative | Dead stock value times the carrying-cost rate equals the silent annual expense of holding zero-velocity inventory. The financial case for liquidation. |
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 atransfer_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 (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.