The conversation about Shopify ad performance is usually about creative, audience, or bid strategy. Nobody talks about the simplest leak: products that have run out of stock but are still being advertised.
We measured this across our own multi-brand Shopify portfolio running paid acquisition on Google Ads and Meta Ads over a 30-day window. The result is uncomfortable.
The headline number
Average wasted spend on ads for out-of-stock products: 18% of total paid budget per store.
For a merchant spending US$10,000/month on ads, that is US$1,800 going to clicks that cannot convert. Across the 30-day window we observed three patterns:
- Every brand had at least one ad set running on a product that was out-of-stock for more than 48 hours
- The worst single SKU on a single brand burned over US$2,000 of monthly waste before we caught it
- Out-of-stock-ad waste was the single largest line item in each brand's paid leakage audit, ahead of dead keywords and broken pixels
These are not edge cases. They are typical of how mid-sized Shopify merchants run paid ads today. Multi-brand operators see the same pattern multiplied across every store in the portfolio.
Why it happens
Two reasons. Both structural.
Reason 1: ad platforms do not know your inventory state. Google Merchant Center pulls a feed daily or hourly. Meta pulls when you connect your catalog. Both lag behind real Shopify inventory by hours to days. A product sells out at 2pm Tuesday and your ads keep running until the next feed sync.
Reason 2: nobody is watching at the right altitude. Your media buyer monitors campaigns. Your operations team monitors inventory. Nobody sits in between watching "is the campaign promoting something we can fulfil right now?"
The merchant ends up paying for clicks that route to "Out of Stock" product pages and bounce. Customer acquisition costs spike. ROAS drops. Reports blame creative fatigue.
The fix is not complicated
Once you can see the connection between inventory and ad state, the fix is a one-tap pause:
- Detect SKU goes out of stock in Shopify
- Find every active ad set promoting that SKU across Google and Meta
- Pause those ad sets automatically
- Reactivate when stock returns
The hard part is not the action. The hard part is connecting Shopify, Google Ads, and Meta Ads in one place with the diagnostic running 24/7.
That is exactly the problem oddly was built to solve. Watch tier is free forever, monitors your store + ad accounts, and surfaces these exact leaks as action cards. Spark on Shopify ($19/mo) adds Google Ads diagnostic alongside. Higher tiers on the platform layer one-tap automation on top.
What to do this week
Even without oddly, you can audit your own store today:
- In Shopify admin, export your current inventory state. Filter to products with quantity = 0.
- In Google Ads, search for active shopping ads referencing those SKUs.
- In Meta Ads Manager, do the same for any product-promoted campaigns.
- Pause every match.
For a 200-SKU store, this is a 30-minute audit. For a 2,000-SKU store, it is a full afternoon and most operators never do it. That is where the 18% goes.
If your number turns out to be higher than 18%, you have company. If it is lower, you are probably already watching this manually and would benefit from the time back.