Spend burning on SKUs that can’t convert. The single highest-ROI ‘pause’ recommendation in the AI OS.
At a glance
Daily ad spend running on SKUs that are out of stock on Shopline. The single highest-ROI “pause now” recommendation the AI OS makes; every dollar of this is provably wasted because the underlying product cannot convert. Joined across Google Ads, Facebook Ads, Amazon Ads, and (where connected) TikTok Ads.
| What it counts | SUM(active_ad_groups.daily_spend WHERE primary_sku.inventory_quantity <= 0). Returned in the merchant’s reporting currency, daily run-rate at snapshot time. |
| Source data | Shopline product/variant inventory joined to ad-platform product_ad or dynamic_ad records by SKU/ASIN/product_id. Spend is the most recent 24h actual spend per ad. |
| Coverage | Google Ads (Performance Max, Shopping), Facebook Ads (Advantage+ Shopping, dynamic-product retargeting), Amazon Ads (Sponsored Products, Sponsored Brands), TikTok Ads (Catalog ads). Plain text/image ads not tied to a product feed are excluded. |
| Match key | (1) SKU code in the ad-platform feed, (2) GTIN, (3) Shopline product_id where the ad platform supports it. |
| OOS definition | inventory_quantity <= 0 AND continue_selling_when_out_of_stock = false. Backorder-enabled variants are excluded since they convert. |
| Currency | Converted to merchant reporting currency at daily-close FX. |
| Refunds / cancellations | Not relevant (no order-level data). |
| Time window | RT (5-minute polling on inventory; ad-platform spend updated hourly per platform refresh cadence). |
| Alert trigger | >$0/day spend on OOS SKUs. The hero-tier threshold reflects “any spend here is wasted”; some merchants tighten the threshold to >$10/day to ignore micro-spend. |
| Sentiment | None directly; the dollar value is the signal. |
| Roles | owner, marketing, finance. |
| Only when | has_google_ads_sibling OR has_amazon_ads_sibling OR has_facebook_ads_sibling OR has_tiktok_ads_sibling. |
Calculation
Calculated automatically from your Shopline data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
An APAC fashion brand running Hong Kong Shopline + Google Ads (Performance Max) + Facebook Ads (Advantage+), snapshot at 09:00 HKT on 27 Apr 26. The brand runs a HK$ 65,000 / month combined ad budget across Google and Meta. Their inventory has 47 OOS variants (seeshopline_inventory_alerts).
| Ad platform | OOS SKUs being advertised | Daily spend on OOS SKUs |
|---|---|---|
| Google Performance Max | 12 | HK$ 1,140 |
| Facebook Advantage+ Shopping | 6 | HK$ 760 |
| Facebook dynamic retargeting | 4 | HK$ 240 |
| Total | 18 distinct SKUs | HK$ 2,140 / day |
- Pause the 18 ads at the SKU/variant level, immediate stop on HK$ 2,140 / day waste.
- Configure the ad-platform OOS auto-pause integration (Google offers it natively; Meta needs a third-party feed-management tool). Future OOS variants get auto-paused.
- Reroute the freed budget to in-stock hero SKUs that are currently spend-constrained. Expected ROAS lift: ~30 to 50% of the previously-wasted spend converts at normal margins.
Sibling cards merchants should reference together
| Card | Why it matters next to ads-on-OOS | What the combination tells you |
|---|---|---|
| Inventory Alerts (OOS) | The OOS source. | The OOS variant count is the universe; this card is the actionable subset (those being advertised). |
| Top Products by Revenue | Identify hero SKUs going OOS. | If hero SKUs are in the OOS-with-ads list, the lost revenue is amplified. |
| Days-of-Cover by SKU | Forward-looking. | Use to predict which currently-in-stock SKUs will join the OOS-with-ads list next. |
| Total Revenue | Channel impact. | Pausing OOS ads frees budget; the net revenue lift shows in this card 2 to 4 weeks later. |
| Conversion Rate (where available) | Efficiency. | Ad-on-OOS pulls conversion rate down; pausing should lift it materially. |
| OOS Spike Alert | Real-time anomaly. | A sudden OOS spike + active ads = ad-spend bleed accelerating; act fast. |
| Catalogue Drift vs Amazon | Adjacent cross-channel diagnostic. | Both cards reveal cross-system inefficiencies that are invisible inside any single dashboard. |
| Shopline Health Score | Composite. | Wasted ad spend on OOS drags the health score significantly when above $0. |
Reconciling against the vendor’s own dashboard
Where to look: There is no single vendor view of this; the data is split across two systems. The closest manual workflow:Shopline Admin -> Inventory -> Variants (filter to OOS, export SKU list) Google Ads / Meta Ads Manager (export active campaigns with product feeds, cross-reference SKU list)Even disciplined teams typically only run this comparison weekly; the card runs every 5 minutes. Why our number may legitimately differ from a manual comparison:
| Reason | Direction | Why |
|---|---|---|
| Ad-platform spend lag | Ours occasionally lower | Google Ads spend updates hourly; Meta updates every 6 hours; Amazon Ads daily. Our spend numbers are last-reported, not real-time. |
| Match precision | Ours stricter | We require exact SKU/GTIN match; manual reviews sometimes accept loose name matches. |
| Backorder exclusion | Ours stricter | We exclude backorder-enabled variants; manual reviews include them. |
| Currency normalisation | Ours unified | We convert all platforms to a common reporting currency; manual reviews may leave each platform in its native currency. |
| OOS at variant vs product | Ours stricter | We treat each variant separately; if XS is OOS but M is in-stock and the ad targets the parent product, our card weights by the OOS variants’ share of the parent’s velocity. |
| Multi-warehouse | Marginal | Total inventory across all warehouses is the OOS test; merchants who manually check single-warehouse stock can disagree with our count. |
shopline_xc_ads_on_oos = SUM(active_ad.daily_spend) for ads where primary_sku.inventory_quantity <= 0 AND NOT continue_selling_when_out_of_stock
The drill-down view shows per-ad / per-SKU breakdown ranked by daily spend.
Known limitations / merchant FAQs
Why is the alert at >$0? Because every dollar here is provably wasted; there is no acceptable level. The alert is meant to be loud and constant until the merchant fixes the integration. My count says $200 / day but I have hundreds of OOS variants. Why so low? Because most OOS variants are not in active ad campaigns. The card only counts spend on SKUs that are both OOS and being advertised. Tail OOS variants that nobody is advertising do not contribute. Can I auto-pause ads on OOS variants? Yes. Google Ads supports it natively (set inventory filter on Performance Max). Meta requires a third-party feed-management tool (Channable, Feedonomics) that pauses dynamic ads when feed shows OOS. Amazon Ads needs manual or API-driven pause. The card surfaces the underlying problem; the auto-pause is a separate integration the merchant chooses. My ad spend on OOS dropped to 200 the next day. What happened? Almost always a new SKU went OOS and was already in an active ad campaign. The card detects it on next refresh; the merchant should pause the new offender immediately or rely on auto-pause if configured. Does this include retargeting ads? Yes if the retargeting ad is product-specific (dynamic product ads); no if it is a generic brand-awareness retargeting ad with no product reference. The card only counts spend that is provably tied to a specific SKU. My ad agency manages the campaigns; how do I get them to act on this? Share the drill-down view URL with the agency; the per-SKU per-ad breakdown is what they need. Agencies typically respond within 24 hours when shown the dollar waste in clear terms; the card is designed to make the conversation easy. Why do TikTok Ads sometimes not show even though I run them? TikTok Ads’ product-feed integration is newer and less standardised. If TikTok’s feed does not include SKU-level inventory linkage, our matcher cannot tie ads to OOS status; the card excludes that platform’s spend rather than guess. Manual review is needed for TikTok-heavy stacks. Should I worry about ads on low-stock (not OOS) SKUs? Yes, but it is a separate card. Low-stock variants will OOS soon; pre-emptive ad-pause is inshopline_low_stock_alerts cross-referenced with the same ad data. This card is OOS-only.
Does the auto-pause feature break when I restock?
Configured well, no; the auto-pause re-enables the ad on next inventory refresh. Configured badly, yes; some merchants set the pause condition manually and forget to set the resume condition. Always set both.
Why does this matter more on Shopline than other platforms?
It does not, definitionally. Shopline-specific note: APAC merchants often run aggressive paid social on Sundays, when warehouses are closed; Sunday OOS combined with peak ad spend creates a spike in this card every Sunday afternoon if not managed.