Skip to main content
Card class: Cross-ChannelCategory: Ecommerce Platform
Dead-stock SKUs that still have active paid-ad spend behind them. Pause-immediately list.

At a glance

Alert table: SKUs that meet BOTH criteria, dead-stock in NetSuite (zero sales velocity for 90+ days, ageing inventory) AND active ad spend on the same SKU in Google Ads, Amazon Ads, or Meta Ads. The merchant is paying to drive traffic to product pages whose products will eventually be written off. Each row is the SKU + ad spend in the period + sales in the period (typically zero) + ageing inventory dollars. Pause-immediately list. The kill-shot pitch: “you are paying $4,200 / month to advertise products you have not sold in 6 months and will eventually scrap”. Cross-channel only because no single platform sees both sides.
What it countsSKU WHERE netsuite.item.sales_last_90d = 0 AND netsuite.item.on_hand > 0 AND ad_platform.spend_30d > $500 (configurable thresholds). Each row = SKU + 30D spend + 90D sales (typically zero) + on-hand value + days-since-last-sale.
VAT / tax treatmentn/a, this is a sales-velocity-vs-spend comparison. Ad spend is gross of any platform fees (Google’s reported spend includes the auction cost only).
Shippingn/a.
DiscountsSales velocity uses post-discount revenue.
RefundsRefunded sales are excluded from the “did this SKU sell?” check.
Cancelled / voided ordersExcluded.
CurrencyPer-SKU in transaction currency; ad spend converted to consolidation currency.
Channels / sourcesNetSuite sales velocity vs ad spend across Google Ads, Amazon Ads, Meta Ads (configurable). The ad-platform-to-SKU join is via product_id / landing_page_url mapped to the SKU.
Sales velocity threshold90D zero sales is the default “dead-stock” definition. Configurable to 60D or 180D depending on industry seasonality.
Spend thresholdDefault 500/30D.Lowerforsmallmerchants(500 / 30D. Lower for small merchants (100); higher for large ($2,000).
Time window30D for ad spend; 90D for sales velocity.
Alert triggerany SKU spending >$500 AND zero sales.
Rolesowner, marketing, 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 UK omnichannel apparel brand on NetSuite OneWorld + Shopify Plus, with Google Ads + Amazon Ads + Meta Ads connected via Vortex IQ. Reporting period 02 Apr 26 to 01 May 26. Headline: 14 dead-stock SKUs receiving £4,840 of monthly ad spend with zero sales in the last 90 days. Ageing inventory dollars on these SKUs: £128,400. Top 6 dead-stock-with-ad-spend cases:
SKUDescriptionAd spend 30DSales 90DDays since last saleOn-hand valueLast sale dateAction
APPAR-DRES-NVY-SNavy dress, size S£1,140£0142£18,40014 Dec 25Pause Google + Meta
APPAR-COAT-WIN-XLWinter coat XL£820£0168£42,80018 Nov 25Pause + clearance
APPAR-BAG-VEL-PNKVelvet bag pink£620£0134£8,20022 Dec 25Pause Google
APPAR-SCRF-WOL-CHKWool check scarf£580£0122£4,20003 Jan 26Pause
APPAR-SHIR-PRP-MPurple shirt, size M£540£0156£6,20030 Nov 26 (typo, should be 25)Pause Meta
APPAR-JACK-LTH-REDRed leather jacket£520£0178£14,80008 Nov 25Pause + clearance
Investigation walkthrough:
  1. The 14 SKUs are seasonal cleanouts that nobody paused. The winter coat in size XL (sold its last unit on 18 Nov 25) is no longer winter-relevant. Google Shopping campaigns are still serving the product because the campaign’s product feed includes it; Meta is still serving lookalike audiences against it. Both platforms charge for impressions and clicks regardless of whether the product converts.
  2. Cumulative annualised waste: £4,840 × 12 = £58,080 / year of advertising spend on products that won’t sell at full price. Plus the ageing-inventory carry cost (capital tied up + warehousing) on £128,400 of dead stock.
  3. Action playbook:
    • Pause the Google Shopping product-level bids on all 14 SKUs. Estimated ad-spend savings: £4,840 / month immediately.
    • Pause Amazon Ads on the same 14 SKUs. Each platform’s ad spend is independent; pausing on Google doesn’t pause on Amazon.
    • Move the 14 SKUs to a clearance section on the website. Reduce price 30 to 50%. Cross-reference Inventory Aging to see how aged each is; SKUs aged >180 days warrant 50%+ discount.
    • Long-term: implement an automation rule. “If a SKU has zero sales in 90 days, auto-pause ads on that SKU and trigger merchandising review.” Most ad-management tools (Adsmurai, Pacvue, even Google Ads’ built-in rules) support this.
  4. Why this is the kill shot:
    • The cross-channel join is what makes this card possible. NetSuite knows sales velocity (it owns the SO data). The ad platforms know spend (they own their billing). Neither knows the other side. The merchant’s marketing team optimises ROAS at the campaign level (where the headline is healthy because it’s averaged across active SKUs); the dead-stock SKUs don’t get individual attention.
    • For most merchants, this card surfaces 5 to 25% of their ad spend as wasted-on-deadstock. At a £200k/month ad spend (typical mid-market apparel), that’s £10k to £50k/month of recoverable budget.
  5. CEO conversation:
    • The pitch: “You’re paying £4,840 per month to advertise products you’ll eventually mark down to clearance. Want to see the list?”
    • The merchant CEO: “Are you serious? Why hasn’t anyone caught this?”
    • The answer: because the join across NetSuite (inventory + sales velocity) and the ad platforms (spend + clicks) doesn’t exist as a native report on either side. The ad team sees campaigns and ad groups; the inventory team sees stock turns. Neither sees the intersection.
Cumulative impact across multiple merchants: In Vortex IQ’s experience onboarding mid-market merchants:
  • 3 to 8% of monthly ad spend is on dead-stock SKUs (median).
  • Recovered annual spend: £30k to £120k for typical merchants in the £2m to £20m revenue range.
  • The same logic applies to Amazon Ads (often higher: 5 to 15% wasted).
  • The fix is process: monthly review of this card + automated pause rules on dead-stock detection.

Sibling cards merchants should reference together

CardWhy pair it with Dead Stock with Active Ad Spend
Dead Stock ValueThe dollar dead-stock figure; this card filters to those with ad spend.
Inventory AgingThe ageing curve for the dead-stock SKUs; dictates clearance pricing strategy.
Margin Erosion AlertsMarkdown clearance pulls margin down; this card’s action is the cause.
OOS with Open SO DemandThe mirror leak: this card is over-stocked + over-promoted; OOS is under-stocked + has demand.
google_ads.adwords_total_spendThe denominator: total ad spend, this card is the dead-spend subset.
amazon_ads.amzn_ads_spendSame for Amazon Ads.
Top SKUs by Inventory ValueIf a top inventory-value SKU appears here, the recovery is large.

Reconciling against the vendor’s own dashboard

Where to look in NetSuite’s own dashboard: NetSuite cannot show this. NetSuite has no view of ad-platform spend. The view is necessarily cross-platform. NetSuite’s dead-stock view: Reports > Inventory > Inventory Aging by Item, filtered to zero-velocity items. Cross-reference manually against Google Ads / Amazon Ads / Meta Ads UIs to find which dead-stock SKUs are still ad-active. This is exactly what Vortex IQ automates. Why our list may legitimately differ from a manual cross-check:
ReasonDirectionWhy
SKU-to-ad-product mappingMaterialVortex IQ joins NS SKU to ad-platform product_id / landing_page_url. Mis-mapping (incorrect feed configuration) produces false negatives.
Ad spend allocationMaterialBrand-keyword ad spend (which doesn’t directly target a SKU) is excluded; some merchants want to include it. Configurable.
Sales-velocity thresholdEither90D zero-sales is the default. Different industries need different thresholds (slow-fashion may need 180D).
Multi-currencyEitherAd spend in different currencies converted to consolidation; FX timing affects the $ comparison marginally.
Cross-connector reconciliation: This card IS the cross-connector kill shot, joining NS sales/inventory to ad-platform spend. The constituent cards:
CardDirectionNotes
google_ads.adwords_total_spendSpend sideThe total spend; this card is the dead-stock subset.
amazon_ads.amzn_ads_spendSpend sideSame.
facebook.fb_ads_spendSpend sideMeta ads.
Dead Stock ValueInventory sideZero-velocity dollars; this card adds the spend filter.

Known limitations / merchant FAQs

My ad team says they manage spend at campaign level, not SKU level. Why does this matter? Because campaign-level health metrics (ROAS, CTR) average across SKUs. A campaign with 200 SKUs can show a healthy 4.0x ROAS overall while 14 specific SKUs in it return 0x because nobody bought. The dead-stock subset bleeds quietly while the campaign headline looks fine. SKU-level visibility is the only way to catch this. A SKU sold zero in 90 days but sold 200 units in the prior 90 days. Is it really dead? Possibly seasonal. Configure a seasonality rule for the merchant (e.g. winter coats expected to sell Oct-Feb, dead-stock detection should expect zero sales Apr-Aug). Vortex IQ supports a seasonality calendar via manifest configuration; without it, all 90D-zero-sales SKUs flag. My new product launches always show as dead-stock initially. Will they appear here? Yes if 90+ days have passed and they haven’t sold while having ad spend. New-product flag on the NS Item record (custom field isnewproduct) can suppress the alert for a configurable warmup period (default 60 days). Can I auto-pause ads from this card? Yes via Ask Viq. Vortex IQ supports a “pause ads on these SKUs” action that posts a campaign-level negative-product or product-pause to Google Ads / Amazon Ads / Meta Ads. Requires merchant authorisation and the relevant ad-platform permissions. My OneWorld account: per-subsidiary? Yes. The dead-stock + ad-spend join runs per-subsidiary. UK Ltd’s UK-targeted Google Ads spend on UK-warehouse-held dead stock is independent of US Inc’s same. The card shows my brand-keyword spend as “dead-stock advertising” because the brand-search lands on a product page. Wrong? Yes, brand-search shouldn’t count. Configure the brand-keyword exclusion in the Google Ads scope; brand search typically generates a “no-product” landing page or a category page. Filter out keywords classified as Brand. Why doesn’t this card include Amazon Marketplace Vendor / Wholesale spend? Because Vendor / Wholesale spend on Amazon doesn’t map cleanly to seller-level inventory; the inventory is owned by Amazon. The card focuses on FBM / FBA seller-side where the merchant owns the inventory and pays the ad spend. The card shows £1,140/month on a SKU but I sell wholesale, not via that ad. Why? Because the same SKU is listed on the merchant’s Shopify retail channel + advertised on Google Shopping. The retail-channel ads don’t move the wholesale book but still spend money on a product the warehouse holds dead stock on. Should I worry if a new SKU has £200/month spend but no sales in 30 days? 30 days is too short. Below 60 to 90 days is normal product-launch ramp. The 90-day default exists because it captures genuinely dead products without false-flagging launches. My SKU-to-ad-feed mapping is incomplete. How do I check it? Cross-reference google_ads.adwords_oos_landing_pages and similar cards. Combined view shows which ads land on URLs that don’t match a SKU (mapping gap) vs which ads land on dead-stock SKUs (the kill shot). The £4,840 monthly waste is small relative to my £200k ad budget. Is it worth pausing? Yes. Even at 2.4% of budget, the recovery is pure savings (no offsetting customer loss because the products weren’t selling). Rolled across a year, £58k goes to either better-converting SKUs or to the bottom line. I have 200+ SKUs that flag every month. How do I prioritise? Sort by ad spend descending; pause the top 20. Repeat monthly. The Pareto rule applies: the top 20 of 200 typically account for 60 to 75% of the wasted spend.

Tracked live in Vortex IQ Nerve Centre

Dead Stock with Active Ad Spend 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.