Most stores know that advertising a product that has sold out wastes money. Most stores also believe their ad platform handles it, because the product feed carries an availability field and the platform reads it.
That belief is roughly half true, and the half that is false is where the money goes.
The failure is not usually a whole product selling out. Stores notice that. The failure is a variant — one size, one colourway — going to zero while the product itself still reads as available. Nothing alerts. Nothing pauses. The product page still loads. Spend continues at full rate against demand you can no longer fulfil.
This guide sets out precisely what happens on each channel, how to measure your own exposure using data you already have, and what can be fixed without custom development.
What actually happens when a variant goes to zero?
Four paths, and they behave very differently.
1. Feed-based shopping ads — partially protected
Google Shopping and Meta's catalogue ads read an availability field per item. In a correctly configured Shopify feed, each variant is its own item, with availability mapped from whether that variant is available for sale.
When a variant goes to zero, its availability flips and it stops being eligible to serve. This works, subject to sync timing — the feed does not update instantly, and there is a window between the last unit selling and the platform knowing.
But note what has not happened. The other variants of the same product are still serving. The product group still has impression share. If a shopper searching for a medium sees an ad for the product because the large is in stock, clicks, and lands on a page where medium is greyed out, that click was paid for and is not recoverable.
2. Non-feed campaigns — entirely unprotected
This is the larger exposure and it is the one almost nobody accounts for.
Search campaigns pointing at a product page. Performance Max asset groups. Meta conversion campaigns with a static or video creative linking to a product URL. Any retargeting built on a custom audience rather than a catalogue.
None of these read availability. None of them have any concept of stock. A Meta campaign running a hand-made creative for a specific product will run exactly as scheduled whether that product has four hundred units or none. The platform has no mechanism to know and no mechanism to ask.
For most stores at £250k–£1m, non-feed campaigns are a substantial share of paid spend. That entire share has zero stock awareness.
3. The creative problem
Sharper still, and worth stating plainly because no platform solves it and no app does either.
Your best-performing creative features the navy hoodie. It performs because navy photographs well and navy is what people respond to. Navy sells out. Charcoal and black remain in stock, so the product reads as available, so the feed keeps it eligible, so the campaign keeps running the navy creative.
Every click that ad now generates arrives wanting navy. Some fraction of those buy charcoal instead. The rest bounce, and you paid for all of them.
There is no field anywhere in any ad platform that connects what this creative depicts to what is currently in stock. The link exists only in the head of whoever made the ad.
4. The landing page
When a shopper arrives on a product where their variant is unavailable, what they see depends entirely on your theme. Some themes grey out the option. Some hide it. Some show it as selectable and only fail at add-to-cart. Some default the selector to the first available variant, which quietly shows the shopper a different product from the one they clicked.
Worth testing your own. Set a variant to zero on a staging product and walk the journey as a customer. Most store owners have never done this and are surprised by what they find.
The reverse leak: stock returns, ads do not
Less discussed and equally costly.
If you use Google's automatic item updates, Google reads your product page and will mark an item out of stock when it detects that state. By default it will not perform the reverse — it will not flip an item back to in stock based on your page — unless strict availability updates are explicitly enabled on the account.
The consequence is a product that sold out, was correctly suppressed, has been restocked, and remains suppressed. You have inventory, demand and no impressions, and nothing on any dashboard is flagged as wrong. Feed status reads normal because the availability value is, from the platform's perspective, exactly what it was told.
A related failure sits on Meta. If a Shopify variant does not have inventory tracking enabled, Shopify sends the quantity as null and Meta interprets null as zero, marking a fully purchasable item unavailable. Made-to-order, print-on-demand and service lines are the usual victims. They can sit unservable for months.
Both are worth checking this week. Neither takes more than a few minutes.
How do you measure your own exposure?
No article can tell you what this costs your store, and you should distrust any that offers a figure. It depends on your variant depth, your stockout frequency, your channel mix and your margin. What follows is a method for calculating your own number, from your own data.
Step one — establish stockout frequency. For the last ninety days, identify how many days each variant spent at zero. If you are not capturing daily stock snapshots, you cannot do this retrospectively, which is itself the finding. Start capturing now; a daily export of inventory by location is enough.
Step two — weight by traffic, not by count. Ten obscure variants out of stock for a week matters far less than your top seller's most popular size being out for two days. Weight each stockout by that variant's share of units sold over the period.
Step three — establish what spend was running. For each stockout window, what was live? Feed campaigns, non-feed campaigns, which creatives. Non-feed spend during a stockout window is the exposed portion.
Step four — apply your own conversion rate. Traffic arriving at an unavailable variant does not convert at your site average; it converts at something close to zero for that variant, with some spill to alternatives. Your recovery rate is the honest unknown here. Estimate it as a range rather than a point.
The output is a range, not a figure, and a range calculated from your own data is worth more than a precise number calculated from someone else's.
What can you fix without custom work?
Turn on the right feed settings. Enable automatic item updates for availability, and make a deliberate decision about strict availability updates. If you do not use out-of-stock status to deliberately suppress low-stock items, enabling strict availability is generally correct.
Check inventory tracking is on for every variant. The Meta null-reads-as-zero problem is entirely preventable and takes minutes to audit.
Verify item_group_id is populating. Both Google and Meta use it to associate variants of one product. Meta's catalogue ads need it to serve the correct variant. A feed where variants are not grouped behaves badly in ways that are hard to diagnose.
Use Shopify Flow for alerting. Flow is free on every paid plan and will fire on inventory quantity changes. A workflow that notifies you when any variant of an A-tier product drops below a threshold will not pause anything, but it will put the information in front of a human before the stockout, rather than a fortnight after. This is the highest-value free thing in this guide.
Structure campaigns so you can act. If your top ten products sit in one campaign with everything else, you cannot pause selectively. Separating your highest-spend products into their own campaigns or ad sets costs nothing and gives you a lever.
Match creative to stock manually for your top lines. Not scalable, and worth doing for the handful of products carrying most of your spend. When navy sells out, swap the creative.
Fix the landing page behaviour. If your theme handles unavailable variants badly, that is a theme fix, and it improves every visit rather than just paid ones.
What cannot be fixed without custom work?
The above closes the obvious gaps. It does not close the structural one.
Everything listed is either a setting, a manual habit, or an alert to a human. None of it is a system that knows, continuously and at variant level, which of your creatives depict which variants, which of those variants are available right now, and what should therefore be paused, reweighted or swapped.
That system cannot be bought, because it has to know things that live in four separate places: your inventory, your feed, your campaign structure and your creative library. No vendor has access to all four, and each vendor's commercial interest is in being the system of record rather than in reconciling with the others.
Below a certain scale you do not need it. A person can watch ten products. Above that scale, the watching stops happening, and the leak becomes permanent rather than occasional.
The App Ceiling
This section appears in every one of The Operational Guides. It describes where the advice above stops working.
Everything above holds to roughly £1m–£1.5m in annual revenue. Past that point the constraint changes, and it changes in a way that adding further apps does not address.
Apps are built to be sold to many stores. That is what makes them affordable, and it is also what limits them: an app can only act on the data inside its own boundary. Your forecasting tool does not know what your ad platform is spending. Your ad platform does not know what is out of stock. Your back-in-stock tool does not know what your supplier lead times are. Each app is correct within its own scope and blind outside it.
Below roughly £1m, a person bridges those gaps. Someone looks at the stock report, notices a line is running low, and adjusts. The bridging is invisible because it is absorbed into the founder's day.
Above roughly £1m, three things happen at once. SKU count rises, so there is more to bridge. Order volume rises, so the consequence of missing something rises with it. And the founder's time is now spent on growth rather than operations, so the bridging stops happening reliably. Nothing breaks visibly. Revenue keeps climbing. What changes is that a percentage of it begins to leak in places nobody is looking — advertising spend running against unavailable variants, stock accumulating in the wrong location, returns sitting unprocessed for a week and a half while the item they contain is out of stock and being advertised.
That is not an app problem, and no app solves it, because the solution has to sit between systems rather than inside one. It requires something built for your specific stack, your specific SKU structure, and your specific supplier terms.
Build the foundations well now. The stores that struggle most at £2m are not the ones that used the wrong apps. They are the ones whose product data was never structured properly in the first place, which makes every subsequent automation expensive to build.
Where to start
Three checks, none of which take an hour.
Confirm inventory tracking is enabled on every variant. Confirm your strict availability setting is what you intend it to be. Set a variant to zero on a test product and walk the customer journey yourself.
Then build one Shopify Flow workflow that alerts you when an A-tier variant drops below its reorder point. It will not solve the problem. It will make the problem visible, which is the necessary first step and the one most stores skip.