Skip to main content
Card class: Cross-ChannelCategory: Ad Platform

At a glance

The ad spend going through TikTok Shop catalog ads (Video Shopping Ads and catalog-driven campaigns) at products that are currently out of stock on the connected commerce platform, so they cannot convert. Every unit shown here is wasted spend pointed at a product that ends in a sold-out variant. Because the join is live against the commerce inventory feed, the card names the ad and the SKU so you can pause the ad, hold the budget, and recover the spend within minutes. Caveat: ad-platform catalog feeds sync on a delay, so a SKU that just went out of stock can keep spending until TikTok pulls the next feed update; treat the figure as the floor of the waste, not the ceiling.
What it countsSpend on active TikTok Shop catalog ads (Video Shopping Ads and catalog Sales campaigns) whose product maps to a commerce-platform SKU currently flagged out of stock. Joined live across the TikTok Ads connector and the connected ecommerce connector.
What “out of stock” meansInherited from the commerce platform’s own definition (for example zero or negative available inventory on an active product). Draft or archived products do not count.
SKU matchingMatched between the TikTok product catalog and the commerce product index by a shared identifier such as GTIN, MPN, or product handle. Naming mismatches are common, so treat the figure as an underestimate rather than an overestimate.
Why TikTok Shop is exposedTikTok Shop catalog ads pull from a product catalog that syncs on a schedule (often via a feed-management tool or a commerce-platform app). Until the next sync, TikTok keeps serving ads for items the store has already marked out of stock. Tightening the catalog update schedule closes most of the gap.
Catalog campaign opacityCatalog Sales campaigns auto-select which catalog items to show, so you cannot always pause a single SKU inside the campaign. The reliable fix is to mark the item out of stock in the catalog feed, which propagates to delivery on TikTok’s schedule.
Chart typeAlert table. Each row names the ad group or ad, the out-of-stock SKU, and the spend at risk.
CurrencyAccount currency on the TikTok side. For multi-platform stores, spend is shown in the workspace display currency and treated as approximate.
Time windowRT (real-time, recomputed on the standard refresh).
Rolesowner, marketing, operations

Calculation

Calculated automatically from your TikTok Ads data joined to your commerce inventory. 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 fashion brand on Shopify running a TikTok Shop Catalog Sales campaign and a Video Shopping Ads ad group. Reading taken at 11:30 on 14 Mar 26. Account currency GBP. All figures are illustrative.
Ad groupMapped SKUStock stateDaily spend (£)Flagged
Catalog Sales (cold)linen-shirt-cream-MOut of stock (sold through 13 Mar)138Yes
Catalog Sales (cold)wool-coat-navy-LIn stock210No
Video Shopping Ads (retargeting)trainers-white-42Out of stock64Yes
Video Shopping Ads (retargeting)denim-jacket-SIn stock95No
  1. The card reads about £202/day at risk across the two out-of-stock SKUs, projecting to roughly £1,400 a week if left running. On TikTok the auction can accelerate this if the out-of-stock item was a recent winner.
  2. The cream linen shirt is the worst offender. It sold through the previous evening, but TikTok’s catalog last synced 18 hours ago, so the Catalog Sales campaign is still serving it. The store already marked it out of stock; the lag is entirely on the feed-sync side.
  3. Catalog Sales cannot always be paused at the SKU level. The fix is to confirm the item is marked out of stock in the TikTok catalog feed and let delivery drop it on the next sync, or to switch the catalog update schedule to a tighter cadence so the gap shrinks from hours to minutes.
  4. The Video Shopping Ads case is simpler. Retargeting ad groups can be edited more directly, and the wasted spend there is reclaimable as soon as the out-of-stock SKU is excluded.
  5. The reclaimed budget compounds. Roughly £200/day moved off dead SKUs onto in-stock high-velocity items earns several times its value back at a typical TikTok Shop catalog ROAS, so the real opportunity is larger than the raw waste figure.
Quick reads:
  • Out-of-stock SKU still spending = pause or exclude, then check the catalog sync schedule.
  • Spend persists after marking out of stock = feed-sync lag. Tighten the catalog update schedule.
  • Whole campaign affected = Catalog Sales auto-selection; fix at the feed level, not the campaign level.

Sibling cards merchants should reference together

CardWhy pair it with Active TikTok Shop Ads on Out-of-Stock SKUsWhat the combination tells you
Shopify Products with Zero/Negative StockThe out-of-stock source list.This card is that list filtered to “out of stock AND being advertised on TikTok Shop”.
Shopify Active Ads on Out-of-Stock SKUsThe commerce-platform view of the same join, across all ad platforms.The store-wide total; this TikTok card is the TikTok slice of it.
Shopify OOS Spike AlertPredicts which SKUs are about to go out of stock.Pause or de-prioritise ads pre-emptively before the waste starts.
Wasted-Spend Burst (3-day spike)The general wasted-spend alert.Out-of-stock ads are one common cause of a zero-conversion burst.
ROAS by CampaignWhere the catalog campaigns sit on efficiency.A catalog campaign with collapsing ROAS often has out-of-stock landing products behind it.
Spend by CampaignThe budget context.How much of total spend is exposed to the out-of-stock catalog.
Google Ads Active Ads on Out-of-Stock SKUsThe same join on paid search Shopping.The full cross-channel out-of-stock exposure across both ad platforms.

Reconciling against TikTok Ads Manager

Where to look in TikTok Ads Manager: TikTok Ads Manager itself has no native “ads on out-of-stock SKUs” view, it has no live link to commerce inventory. The closest reconstruction is across two surfaces: You would have to read the out-of-stock items from Catalog Diagnostics, then match them by hand to the spending ad groups in Ads Manager. This card does that join automatically and continuously. Why our number may legitimately differ from TikTok:
ReasonDirectionWhy
SKU matching gapsOurs lower (underestimate)Matching by GTIN, MPN, or handle covers most catalogues. Non-standard naming or custom feed transforms leave some SKUs unmatched, so they spend without being counted.
Commerce sync lagOurs lower (transient)An item that just went out of stock on the store webhooks into Vortex IQ within minutes; in the gap before that, spend may not yet be flagged.
TikTok catalog sync lagDrives the wasteTikTok keeps serving an out-of-stock item until its next catalog pull. Spend accrues against the out-of-stock SKU during that gap.
Multi-currencyApproximateMulti-platform spend summed without FX is order-of-magnitude correct, not exact.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
shopify.products_with_zero_negative_stockThis card is a subset (out of stock AND advertised on TikTok Shop)Items on that list with no active TikTok ad simply do not appear here.
shopify.active_ads_on_out_of_stock_skusThis TikTok card is the TikTok portion of the store-wide totalThe store-wide card also includes Google, Meta, and Amazon ad spend.
google_ads.active_ads_on_out_of_stock_skusThe paid-search portion of the same exposureGoogle Shopping and Performance Max contribute there, not here.

Known limitations / merchant FAQs

Why is spend still showing on a SKU I already marked out of stock? TikTok’s catalog syncs on a schedule. Until the next sync, TikTok keeps serving the item even though the store has it marked out of stock. Tighten the update schedule on the catalog (or the feed-management tool feeding it) to shrink the gap. Why can’t I just pause the SKU in the Catalog Sales campaign? Catalog Sales and Video Shopping Ads choose which catalog items to show automatically, so there is not always a per-SKU pause inside the campaign. The reliable lever is the catalog feed: mark the item out of stock there and it drops from delivery on the next sync. Why might my figure be lower than I expect? SKU matching depends on a shared identifier between the TikTok catalog and the commerce index. Brands with non-standard SKU naming, white-label items, or custom feed transforms will have unmatched SKUs that spend but are not counted, so the card underestimates rather than overestimates. Why is the figure zero when I know items are out of stock and ads are running? Either no commerce connector is linked (the join needs live inventory), or the out-of-stock items have no active TikTok Shop ad pointing at them, or the SKU mapping key is not matching. Check the connector link and the mapping configuration. Does this include non-catalog TikTok campaigns? The card is about TikTok Shop catalog and Video Shopping Ads spend pointed at specific out-of-stock SKUs. A broad In-Feed campaign that does not serve a specific out-of-stock product is not the target here; pair with Wasted-Spend Burst for the broader zero-conversion case. Should I auto-pause out-of-stock catalog ads? For high daily spend, pausing or excluding promptly is almost always right. The conservative default is to surface the recommendation for a manual review step, because a fast-restocking item can be worth keeping live to capture the back-in-stock buying window, which on TikTok can be substantial if the item was a viral seller. My commerce platform and TikTok disagree on stock. Whose truth wins? The commerce platform is the inventory truth source; TikTok holds a slightly stale copy via the feed. This card treats commerce stock as authoritative and flags TikTok spend that runs against it.

Tracked live in Vortex IQ Nerve Centre

Active TikTok Shop Ads on Out-of-Stock SKUs is one of hundreds of KPI pulses Vortex IQ tracks across TikTok Ads 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.