Skip to main content
Card class: HeroCategory: Ecommerce Platform
Items with on-hand value > 0 and zero sales in 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, fully dimension-tagged in Sage Intacct so the Controller can pivot the dead cohort by Department, Location, Project, Item, Class, Customer, or Vendor and route the right cohort to the right team without leaving the card.
What it countsInventoryItem.QuantityOnHand × InventoryItem.UnitCost for items where MAX(InventoryItem.LastSaleDate) < TODAY - 180 OR no sales record at all. Sage Intacct’s Inventory Control module exposes per-item movement through the INVDOC_HDR and INVDOC_LINE tables; the card joins the Item record’s last-sale stamp against the cost basis and surfaces the cohort.
Threshold180 days zero-sales is the default. Configurable per workspace (apparel often uses 365 for off-season carry; electronics uses 90; food and beverage uses 30-60; industrial distribution often uses 365-730).
In-transitExcluded. Goods in Transit have no on-hand date and cannot be classified dead.
Manufacturing WIPExcluded. Intacct does not have a native manufacturing module; WIP held in third-party connectors does not appear here.
CurrencyMulti-Entity Console: each entity’s dead stock in base currency, summed in reporting currency at the configured FX cadence per entity.
Entity scopeCard respects the dashboard entity filter.
Dimensional cutEach dead-cohort dollar carries Intacct dimensions through. Click any chip to drill: by Class to see which brand owns the dead cohort, by Location to see which Warehouse holds it, by Vendor to see which supplier’s product is structurally dying.
Time windowRT
Alert trigger>$25k dead, sentiment dead_stock. Configurable per workspace. Mid-market distributors often raise to $100k; SaaS-services accounts with no inventory rarely use this card.
Rolesowner, finance, operations

Calculation

Calculated automatically from your Sage 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 B2B distributor on Sage Intacct Multi-Entity Console with two regional entities (East Coast Distribution Inc, USD; West Coast Distribution Inc, USD). Annual revenue ~$60M, mostly Net-30 wholesale through BigCommerce B2B and Adobe Commerce wholesale. Snapshot 14 Apr 26. Reporting currency USD. Dead-stock threshold set to 180 days zero-sales (default for B2B distribution). Class dimension splits by brand; Department dimension splits East Coast Sales from West Coast Sales.
Class (brand)SKU countDead stock value (USD)Owning entity
Brand Alpha legacy lines168$720,000East Coast
Brand Bravo discontinued sub-styles94$480,000West Coast
Brand Charlie end-of-life38$310,000East Coast
Brand Delta promotional residuals26$190,000West Coast
Damaged / quarantine cohort22$128,000Both
Dead Stock Value (this card)348$1,828,000
Five things to notice:
  1. 1.83Miswellabovethe1.83M is well above the 25K alert threshold and the Controller already knows there is a dead-stock problem; what the card adds is the dimensional decomposition that makes the action plan inescapable. 1.83Mofdeadstockata241.83M of dead stock at a 24% carrying-cost rate is 439K 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 recovery cents on the dollar (typically 25-50% for B2B distribution channels), donate for tax write-off (US Section 170 contributions yield enhanced deduction equal to cost basis plus half appreciated value, capped at 2x cost), return to supplier where contract permits (typical 5-10% of annual purchases per supplier per year), 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.83M 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. **Brand Alpha legacy lines (720K)isthesupplierreturncandidateifthemasterdistributionagreementallows.MostUSdistributioncontractsincludereturnforcreditclausesonslowmovers(typically510720K) is the supplier-return candidate if the master distribution agreement allows.** Most US distribution contracts 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 at the federal corporate rate that can return 300-400K of net tax benefit on a $720K cost basis, which often beats liquidation recovery for charitable-eligible product. The Vendor dimension on Intacct makes this card uniquely powerful here: pivot the dead cohort by Vendor, identify which suppliers’ return windows close soonest, and route the action to the Vendor Manager owning each supplier. NetSuite’s per-vendor view is similar but typically requires a saved search; on Intacct it is a one-click pivot.
  3. Brand Bravo discontinued sub-styles ($480K) 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, customers are not asking. The right move is a formal lower-of-cost-or-market write-down processed in Intacct via Inventory Adjustment with the appropriate GL account hit (typically a 5990 Inventory Write-down expense account in the standard Chart of Accounts). 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 audit committee usually approves the write-down within one cycle of seeing it. The Class dimension is what makes this surfacing crisp: same total, same SKUs, but Class-by-Class the conversation lands with the specific brand manager and not in a vague “we have dead stock” board slide.
  4. Damaged / quarantine cohort ($128K) is a clean early write-off because the stock is physically unsalable and Intacct already tracks it on a Location flagged “Not Available for Sale”. Auditors expect to see this written off promptly; carrying it forward at full cost is an aging liability that eventually triggers an external audit query. The Inventory Adjustment workflow in Intacct handles the journal in one step: debit Inventory Write-down, credit Inventory at the Location level. Pair this with Returns Count to see whether damages are growing structurally (a quality issue with one Vendor) or stable (normal handling damage). On this account the damaged cohort doubled in 12 months, traced to a single Vendor whose packaging changed; the Vendor dimension cut surfaced the cause.
  5. Pair with Dead Stock with Active Ad Spend for the killer cross-channel signal: dead stock that is still being advertised. On this account the cross-connector join surfaced 22 SKUs in the dead-stock cohort that still had active Google Ads campaigns running through the Adobe Commerce wholesale portal, with 4,800ofadspendinthelast30daysagainstproductswithliterallyzerosellthroughin180+days.Thatispurewaste,anditisinvisibletoanyonelookingatIntacctalone(whichdoesnotseeadspend)orGoogleAdsalone(whichdoesnotseeinventoryaging).Worse,whenthecrosschanneljoinwasextendedtoincludetheWestCoastentity,threemoreSKUssurfacedthatweredeadintheEastCoastwarehousebutstillbeingadvertisedonthewholesaleportalbecausethecataloguefeedhadnotbeenpruned.Annualwasteonthisaccount:roughly4,800 of ad spend in the last 30 days against products with literally zero sell-through in 180+ days. That is pure waste, and it is invisible to anyone looking at Intacct 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 West Coast entity, three more SKUs surfaced that were dead in the East Coast warehouse but still being advertised on the wholesale portal because the catalogue feed had not been pruned. Annual waste on this account: roughly 58K of paid-traffic budget on dead inventory. The card pays for the entire Vortex IQ subscription many times over on a single finding. The Implementation Partner conversation usually starts here.

Sibling cards merchants should reference together

CardWhy pair it with Dead Stock Value
Inventory AgingAging buckets show the drift toward dead. The 180+ bucket is this card’s candidate pool.
Total Inventory ValueThe headline total. Dead stock is the bad slice.
Inventory Carrying CostThe expense impact of holding zero-velocity stock, typically 18-28% per year.
Dead Stock with Active Ad SpendThe cross-channel kill-shot: dead stock still receiving ad spend.
Margin by SKUDead stock often has compressed margins from prior discounting.
Top SKUs by Inventory ValueThe opposite cohort: live, fast-moving stock.
Returns CountHigh return rates correlate with dead-stock candidates.
Inventory Turnover RatioInverse signal. Dead stock kills turnover.

Reconciling against the vendor’s own dashboard

Where to look in Sage Intacct: The native Sage Intacct views to run side by side with this card:
Reports → Inventory Control → Slow-Moving Items Report (closest native equivalent, default 90-day threshold at intacct.com) Reports → Inventory Control → Inventory Aging Report (the 180+ bucket of which is the dead-stock candidate pool) Reports → Inventory Control → Item Stock Status (real-time on-hand by Warehouse, with last-movement stamp) Reports → Inventory Control → Item Demand Plan (forward demand signal that confirms a dead diagnosis) Interactive Custom Report (ICR) built on the Inventory data source filtered to QuantityOnHand > 0 AND MAX(LastSaleDate) < TODAY - 180, summed on QuantityOnHand × UnitCost, pivoted by Class and Vendor dimensions Saved ICR variant for last-receipt aging: filter 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 Items Report defaults to a 90-day threshold; this card defaults to 180 days zero-sales for distribution and apparel, 90 days for fast-moving categories, configurable per workspace. For Multi-Entity Console accounts run Reports → Inventory Control → Inventory Valuation by Entity at the same scope as the dashboard filter, otherwise FX shifts the dollar value of remote-entity dead stock between report runs. Common reconciliation pitfalls:
  • The Slow-Moving Items 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 to 3x higher than this card on a typical mid-market distribution business.
  • Last-sale vs last-receipt date can move the population by 15-25%. Distribution and apparel typically use last-sale (a SKU that has not sold in 200 days is dead even if it was received yesterday); some B2B distributors use last-activity (received OR sold). The card respects whichever is set in the field map.
  • Substitute SKUs and kits: an Inventory Item that ships exclusively as a component of an Inventory Assembly Build may appear dead at the component level (no Order line) while moving heavily at the parent Assembly level. Most accounts include Assembly consumption as a “sale” for aging purposes; confirm the field map.
Why our number may legitimately differ from a Sage Intacct Slow-Moving Items Report:
ReasonDirectionWhy
Threshold definitionEither90 vs 180 vs 365 days. Card defaults 180 for distribution and apparel, 90 for electronics, 30-60 for food and beverage. The Slow-Moving Items Report defaults to 90 globally.
Sale event definitionEitherCard counts an Order line as “activity”; some accounts include only Invoiced Orders. The difference is the Orders 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 and long-cycle 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 Inventory Item 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 PO acknowledgement, customer scheduling) 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.
Costing method changeCard may shiftToggling Inventory Item COSTMETHOD (Average to Standard) recomputes the dollar value at the new basis. The SKU population is unchanged; the dollar headline moves.
Damaged / quarantine stockCard may understateStock moved to a Location flagged Not Available for Sale may not be counted by some Implementation Partner reports. Card includes if Intacct still tracks it as on-hand at any Location.
FX cadence per entitySmallMulti-Entity Console: card uses current-day FX, Intacct 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, unsynced).
bigcommerce.inventory_valueDifferent definitionSame dynamic. BigCommerce sees only its own catalogue.
adobe_commerce.inventory_valueDifferent definitionAdobe Commerce 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, Meta, 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.
Inventory Sync DriftDiagnosticA SKU showing dead in Intacct but listed live in commerce platforms means the catalogue is not pruned, which is how dead stock keeps absorbing ad spend.
The cross-channel killer view is that Sage Intacct 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 Intacct 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. Intacct’s dimensional carry-through means the Vendor or Class owning the dead cohort is one click away; this is how the Vortex IQ Implementation Partner conversation typically starts and where the first quarter’s value is recovered.

Known limitations / merchant FAQs

What is the right threshold? Industry-dependent: B2B distribution 365-730 days (long-cycle slow movers normal), wholesale apparel 180-365 days, electronics 90-180 days (lifecycle obsolescence is fast), food and beverage 30-60 days (perishability and best-before windows), industrial distribution 365-730 days, furniture and homewares 180-365 days, beauty and cosmetics 90-180 days. Tune the field map per workspace and per Class 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 US 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 through an Inventory Adjustment with documentation. Vortex IQ’s role is the surfacing; the decision lives in finance governance. Sage Intacct vs NetSuite on dead-stock detection? Arithmetic identical. Where Intacct shines is the dimensional cut: pivot dead stock by Vendor (which supplier’s product is dying), by Class (which brand or business unit), by Customer (which B2B account stopped ordering and left allocated stock behind), by Project (which strategic initiative left residual inventory). NetSuite supports similar segmentation through Class / Department / Location plus saved-search engineering; Intacct’s eight first-class dimensions tag every line by default and pivot in one click. For an Implementation Partner running monthly dead-stock reviews, Intacct is materially faster. Sage Intacct vs Sage 50 / 100 / 200 / X3? Different products. This connector targets Sage Intacct specifically. Sage 50 and 100 are SMB desktop products; Sage 200 is a UK / EU SMB product; Sage X3 is a different mid-market ERP. Conceptually the same dead-stock detection works on all of them but the API, dimensions, and reconciliation paths differ. If you are running one of those, reach out about connector availability. 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 Ratio. 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 entity’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. The fix is to read the per-entity cut alongside the consolidated cut. Single-entity vs Multi-Entity Console behaviour? Identical logic. Multi-Entity scopes across entities and applies elimination logic when consolidated. The most useful operational read is per-entity: dead stock in the West Coast entity may be liquidatable through different channels than dead stock in the East Coast entity, especially where regional jobbers and off-price retailers differ. The card surfaces both; the action plan differs. Tax write-down rules, US? US: GAAP allows lower-of-cost-or-market write-downs for impaired inventory under ASC 330. 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. Always confirm with tax counsel before booking; the strategy can shift several percentage points of effective tax rate. International equivalents (UK FRS 102 Section 13, EU IFRS impairment rules) follow similar logic; the card surfaces the cohort regardless. 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 Vendor 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 Top B2B Accounts by Revenue and pivot by the Customer dimension to identify dead stock tied to specific accounts and have those conversations directly. Multi-Entity Console: inter-co transfers and dead stock? Inter-co transfers between entities do not reset the dead-stock clock by default. A SKU received into the East Coast entity on 1 Sep 25, transferred to the West Coast entity on 1 Mar 26, snapshotted on 14 Apr 26, has been “alive” in the consolidated 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 entity 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, independent of revenue recognition policy. The card is identical for SaaS-subscription accounts on Intacct Contracts and Revenue Management as it is for distribution accounts. FX revaluation timing, does it move this card? Yes, slightly. Intacct’s per-entity Currency Configuration sets an FX revaluation cadence (typically period-end). 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. REST vs XML API, does freshness matter? No effect on the SKU population. Sage Intacct’s XML API is the workhorse for bulk inventory reads; the REST API is preferred for single-item refreshes. Vortex IQ uses XML for the bulk dead-stock extract (single query against the Inventory data source filtered to no-recent-sales) and REST for incremental refresh. Freshness is typically 5 to 15 minutes from the most recent Intacct movement. Vendor return programmes, how do I model recovery? If a supplier offers stock-return-for-credit (typical 5-10% of annual purchases per supplier per year), 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). The Vendor dimension cut on this card surfaces which suppliers’ return windows are closing soonest. 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 on-hand quantity is set to zero (full disposal), the SKU drops off. If 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. Adobe Commerce / Magento 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 Intacct 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 (via Inventory Sync Drift) is one of the cleanest ways to find structural dead stock. Implementation Partner role on this metric? The Partner usually owns the Inventory Control module setup, the dead-stock threshold policy, and the write-down approval workflow. If this card returns a different number from the Partner’s monthly board pack, the cause is almost always: (1) a different threshold definition (90 vs 180 vs 365), (2) a last-sale vs last-receipt policy difference, or (3) an Assembly consumption rule that the card respects but the saved ICR misses. Vortex IQ’s field map is the place to align; invite the Partner into the conversation early.

Tracked live in Vortex IQ Nerve Centre

Dead Stock Value is one of hundreds of KPI pulses Vortex IQ tracks across Sage 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.