Skip to main content
Card class: Cross-ChannelCategory: Ecommerce Platform
Live ad spend pointed at SKUs that can’t convert. Direct $/day waste, pause those ad groups now.

At a glance

Live ad spend pointed at WooCommerce SKUs that cannot convert. Joins Woo OOS state against Google Ads / Meta Ads active product spend. Direct dollar-per-day waste; pause those ad groups now.
What it countsGoogle Ads / Meta Ads spend per day on product IDs WHERE corresponding Woo SKU.stock_status = 'outofstock'. Joins Woo product feed against ad-platform product targeting.
REST API endpointWoo: GET /wp-json/wc/v3/products?stock_status=outofstock. Google Ads: customers.search with shopping_performance_view. Meta: Marketing API ad-spend.
VAT / tax / shipping / discountsSpend reported in account currency (typically pre-tax).
Status filterOnly outofstock Woo products joined against enabled ad groups. Backorder-allowed products are excluded (still purchasable).
Refunds / cancelled / failed ordersNot applicable.
CurrencyAd-platform spend reported in ad-account currency. Multi-currency Woo stores need filter alignment, the join is by SKU / product ID, currency-agnostic.
Channels / sourcesWeb-channel ads only. POS-targeted ads do not exist for most merchants.
Self-hosted vs managed-WooSelf-hosted Woo with object-cache lag can show stale OOS state, ad spend may be flagged as wasted when the SKU has actually been restocked, or vice versa. Managed-Woo is steadier.
Time windowRT (polled every 30 min)
Alert trigger>$0/day spend on OOS SKU; sentiment_key out_of_stock_count
Rolesowner, marketing, operations

Calculation

Calculated automatically from your WooCommerce 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 homewares brand on managed-Woo running Google Shopping + Meta Advantage+. Polled 12 Apr 26 14:00 UTC.
ChannelOOS SKUs in active adsDaily spendNote
Google Shopping8 SKUs$142/day”Mushroom Mug” variants ran out yesterday
Meta Advantage+14 SKUs$98/dayCatalog auto-targeted; Meta unaware of OOS
Daily waste22$240/dayAnnualised: $87,600
Three observations:
  1. Self-hosted variance is the recurring theme. This brand had an object-cache misconfiguration last quarter, OOS state lagged by 6+ hours. During those 6 hours, Google Merchant Center had no idea the SKUs were OOS, so spend kept flowing. Pressable’s Redis fixed the lag, this card now catches mismatches within 30 min.
  2. Meta Advantage+ is the bigger leak than Google. Google Merchant Center pulls feeds from the Woo store via the Google Listings & Ads plugin, which honours OOS state within 1-3 hours. Meta’s catalog feed updates every 24 hours by default, so SKUs that go OOS at 09:00 may continue serving in Meta ads until 09:00 the next day. The card surfaces the gap.
  3. Plugin-induced data shape variance: Google Listings & Ads plugin. The plugin reads _stock_status and disapproves OOS items in Merchant Center, but on stores using a custom inventory plugin (ATUM, Stock Synchronisation), the plugin may miss the disapproval signal. Verify by spot-checking the Merchant Center disapproval list against this card.

Sibling cards merchants should reference together

CardWhy pair it with Ads on OOS
WC Out of StockThe OOS source data.
WC Alert OOS SpikeTrigger card for sudden spikes.
WC Top ProductsIdentifies which OOS items are revenue-leaders worth restocking.
Google Ads Wasted SpendVendor-side view from Merchant Center.
BC Channel OOS per ChannelCross-platform peer for agencies.

Reconciling against the vendor’s own dashboard

Where to look in WooCommerce / ad platforms: Woo OOS list: WP Admin → WooCommerce → Reports → Stock → Out of stock. Google Ads waste: Google Ads UI → Reports → Pre-defined → Shopping → Item ID. Meta: Ads Manager → Catalogue → Diagnostics. Why our number may differ from any single dashboard:
ReasonDirection
Time-zone. Polled UTC vs ad-platform account timezone.Boundary effects
Self-hosted server uptime. Object-cache lag delays OOS detection.Either
Plugin-version compatibility. Google Listings & Ads vs Pinterest for WooCommerce vs Meta plugin each report differently.Investigate per-merchant
Refund-restock cycle. Refunded inventory restored mid-window flips state mid-period.Either
Currency plugin. Spend in ad-account currency, Woo prices in store currency, the join is by SKU not money.n/a for join, material for waste calc
Cross-connector reconciliation:
CardExpected relationship
google_ads.gads_disapproved_productsMerchant Center disapproves OOS within 1-3 hours of feed sync. Disapproved count should track this card with a slight lag.
facebook.fb_catalog_diagnosticsMeta catalog refreshes every 24h by default; the gap is the daily Meta waste window.

Known limitations / merchant FAQs

Self-hosted vs managed-Woo, why does it matter for this card? Object-cache lag on self-hosted Woo can delay OOS detection by hours, during which ad spend on now-OOS SKUs continues. Managed-Woo with Redis catches OOS within minutes. Status-filter selection, why include backorder products as “in stock”? Backorder-allowed items are still purchasable, ads pointing at them convert (with a delay), so they are not waste. Refund-object accounting, does it affect this card? Yes indirectly. A high-volume refund event can restore stock to many SKUs simultaneously. The card detects the restock at the next poll (within 30 min) and removes those SKUs from the “wasted spend” list. Plugin-induced data shape variance, what gateways / feeds matter?
  • Google Listings & Ads plugin: reads _stock_status, syncs to Merchant Center, reliable.
  • Pinterest for WooCommerce: similar, reliable.
  • Meta for WooCommerce: relies on Meta’s 24-hour catalog refresh.
  • Custom feed exporters: behaviour varies; verify with a manual OOS test.
Multi-currency configuration, does it affect ad-spend calculation? Daily-spend numbers are reported in ad-account currency. The Vortex IQ display converts to the workspace default currency at the end-of-day FX rate. Why does Woo and ad platforms disagree on OOS state? Feed sync lag. Woo flips a SKU to OOS at 09:00; Google Merchant Center sees it at 10:30; Meta sees it at 09:00 the next day. The gap is the waste window. Today is jumpy, why? OOS state and ad spend both move continuously. Use the daily-rolling figure for stable reads. Sync-lag from self-hosted server slowness, debug? Compare _stock_status for one OOS SKU across (a) Woo REST API, (b) Google Merchant Center disapproval list, (c) this card. If all three agree, fine. If Woo says OOS but Merchant Center says approved, feed sync is stuck. My ad platform shows different numbers, debug:
  1. Match date / time window exactly.
  2. Verify ad-account currency and any FX conversion.
  3. Check feed-sync timestamps; many gaps are within the 24h Meta window.
  4. If gap > 10% of spend, contact support.

Tracked live in Vortex IQ Nerve Centre

Ad Spend on OOS Products is one of hundreds of KPI pulses Vortex IQ tracks across WooCommerce 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.