Home / Stock-aware advertising

Inventory · paid media

Stock-aware advertising

Cover days are a media input. If your ads stack ignores the shelf, it is optimising the wrong game.

Direct answer

Stock-aware advertising means every decision about ad spend is made with days of cover per size in the room, before the money moves rather than after the ROAS chart looks good. It treats inventory as a media input in the same way as audience or creative, because a winning ad pointed at a shelf that empties on Friday is a loss by Monday whatever the dashboard says. The method is simple arithmetic done every day at variant level and joined to what each campaign spent. Ralph does that join overnight for Meta and Google and stages the fix, and you approve it.

If you want to try the number before reading the argument, the free days of cover calculator takes units on hand and recent sales and gives you a media stance. Nothing leaves your browser.

Why the ad platforms cannot do this for you

Meta and Google are very good at finding buyers and have no idea whether you can ship to them. Their catalogue engines will stop serving a specific sold-out item once the feed catches up, which is automatic and free, but that is where their knowledge of your warehouse ends. They do not know that the parent product with three sizes left is unsellable because the three that sell are gone. They do not know that a SKU with a brilliant click-through rate has four days of cover and a restock three weeks out. They do not know that the ad they are scaling features a colourway you sold through last Tuesday. Anyone can show you ROAS; almost nothing will refuse to celebrate a winner that is about to stock out. That refusal is the whole discipline.

The reason it is rare is boring. The ad account and the inventory live in different systems owned by different people, and joining them at size level every day is tedious work that nobody is paid to do. So it gets done in a spreadsheet after the stockout, which is too late, or not at all.

Days of cover, with the working

Days of cover is how many days you can keep selling at the current rate before the shelf is empty. You calculate it in two steps. First the sell rate: take the units sold in a recent window and divide by the number of days in that window. Fourteen days is a sensible default for a DTC store, seven if the world just changed, twenty-eight if volume is thin. Then the cover: take the sellable units on hand, meaning available to sell rather than on order or damaged, and divide by that sell rate.

Worked example. A linen shirt in medium has 120 sellable units on hand and sold 56 units in the last 14 days. The sell rate is 56 divided by 14, which is 4 a day. Days of cover is 120 divided by 4, which is 30 days. The restock lands in 10 days, so this one is healthy and you can scale it. Now the same shirt in large has 18 units on hand and sold 42 in the same 14 days. The sell rate is 3 a day and the cover is 6 days. The restock is 12 days out, so there are 6 days coming with nothing to sell, and every pound of paid traffic sent to the large in that window buys a disappointed customer. The large is the one you exclude or buffer today, even though it is the better seller.

Two refinements make the number honest. If the last fortnight had a promotion in it, dampen the sell rate, because a wild week will otherwise lie about cover. And if you plan to keep the last units back for organic and repeat customers, the paid buffer is roughly the sell rate multiplied by the days until the restock, so for the large that is 3 units a day for 12 days, more than you hold, which is another way of saying stop advertising it now. The default DTC bands we use are healthy above 21 days, watch between 10 and 21, critical between 4 and 10 and near empty below 4, and if 30 percent or more of your ad budget sits on one SKU the band should be treated one step worse, because concentrated spend runs out faster than the average suggests. The longer version, with the objections, is in days of cover for advertisers, and the buffer logic in paid buffer stock.

Core loop

Sell rateCover daysMedia decisionFulfilment
Work out the sell rate, then the days of cover, then decide what the ads should do, then check you can actually ship it. Run the loop every day, not after the stockout.

Where the money actually leaks

The size run breaks and the parent looks fine

A jacket with the 6, 8 and 16 in stock and the 10, 12 and 14 gone reads as 50 percent in stock and is, commercially, sold out. Catalogue ads keep serving it because the parent is available, and every click lands on the wrong sizes. The fix is a core-size rule: pull the style from catalogue ads when the sizes that carry the conversions are gone, even if tail sizes remain. That is a stock rule with a lag of minutes, whereas a performance rule that waits for the ad to look bad has a lag of days and cannot tell a broken size run from a tired creative. The distinction is in stop-loss vs core-size automation and core-size automation, with the footwear version in footwear size variants.

The catalogue lags the warehouse

Between Shopify saying a variant is gone and Meta or Google acting on it there are minutes to hours, and paid clicks land on nothing the whole time. On Google Shopping this is the empty-shelf problem, on Meta it is the product set that still contains last week's bestseller list. The tax is quantified in the catalogue lag media tax, the set decay in product set rot, and the Google side in Shopping and empty shelves.

Dead stock gets paid traffic at full price

The mirror problem is stock that will never move at full price still receiving budget because it is in the catalogue. Buying demand for it is not clearing it, it is subsidising the eventual markdown. Dead stock and paid traffic covers when to stop and how to clear deliberately.

The weekend

Most stockouts that cost real money happen between Friday afternoon and Monday morning, because that is when nobody is looking and the ads run hardest. A size that sells out at three on Friday and stays live in two campaigns until Monday can cost more than a month of software. That is the leak to close first. When stock is thin rather than gone, the throttle-or-kill decision is in ads when stock is thin, and the ways to make a low-stock alert actually reach the ads are in Shopify low stock alerts that reach your ads.

A policy you can write down this afternoon

Write it down once, tune it to your category, and stop re-arguing it every Monday. A working DTC version looks like this.

Cover bandWhat the ads should do
Healthy, meaning more than 21 days of cover with the core sizes in stock.The SKU is eligible for scale tests and new creative, and the only check is that the restock is confirmed.
Watch, meaning 10 to 21 days of cover, or healthy cover with 30 percent or more of the budget on it.Hold the budget where it is, do not launch new tests on it, and chase the inbound order this week.
Critical, meaning 4 to 10 days of cover, or a core size gone.Throttle spend or exclude the style from catalogue ads, hold back a buffer for organic and repeat orders, and move the budget to a healthy sibling.
Near empty, meaning under 4 days of cover.Exclude it from paid today and write the revert down for when the restock lands.
Dead stock, meaning cover measured in months with no sell-through at full price.Do not buy demand for it. Clear it deliberately with a markdown or a bundle and keep the acquisition budget for products that move.

Ops speaks in weeks of supply and media speaks in ROAS, and if you let them keep their own languages you will spend every meeting converting units. Pick days of cover, put it in the brief, and then argue about strategy instead. Pair it with the metrics that lie without it: ROAS on a SKU about to stock out, CPA that ignores the refund rate from late shipping, and incremental lifts that merely moved demand from an in-stock sibling. That story is in when ROAS looks fine and the store still hurts.

Do it yourself first

You can run stock-aware advertising for a week with Shopify, a spreadsheet and the two ad platforms. Do it once before you buy anything, because it tells you the size of the problem.

  1. Get the sell rate. In Shopify open Analytics, then Reports, and run Sales by product variant for the last 14 days. Export it. You want units sold per variant, not per product.
  2. Get the units on hand. In Shopify open Products, then Inventory, and export available quantity per variant. Join the two exports on the variant SKU and divide on-hand by the daily sell rate. That column is days of cover. Sort it worst first, or paste the rows into the calculator and let it rank them.
  3. Add the spend. In Ads Manager, open the catalogue sales campaigns and use the product-level breakdown to get yesterday's spend by product. In Google Ads open the Shopping or Performance Max campaign and run the product report. Write the spend next to each variant's style. Anything with under 10 days of cover and real spend goes on today's list.
  4. Check the size run. For each style on the list, ask whether the sizes that carry the conversions are the ones that are gone. If they are, the style is broken however many tail sizes remain.
  5. Act by hand. In Commerce Manager, edit the product set the campaign uses so the broken item is removed, or build a new set without it. In Merchant Center add a supplemental feed with a custom label and exclude that label in the listing groups. Write down every change and the date the restock lands, so you can put it back.
  6. Do it again tomorrow. This is the part that fails. The first day takes an hour, the fifth day gets skipped, and the stockout happens on the Friday you did not look.

Where Ralph fits

Ralph runs that loop every night for every size and colour and puts the result in one list at seven in the morning. He reads Shopify inventory at variant level, maps each variant to its Meta retailer ID and Google offer ID, computes days of cover and core-run health per style, and then looks across your campaigns and product sets for items that are broken on stock and still being paid for, ranked by spend at risk. For each one he stages the fix with the evidence attached: a per-campaign exclusion with a revert, a product-set rebuild from confirmed variant stock that goes live paused, a supplemental Merchant Center feed change, or a buffer proposal that withholds the last units from paid. Shared product sets are left alone so a Tuesday fix does not become a Wednesday incident. The chain, step by step, is in how Ralph handles out-of-stock sizes.

The same stock read sits under his dayparting, which is why a weak evening on a fashion account gets diagnosed as a size run that broke at three o'clock rather than an hour to switch off. That is in how Ralph dayparts Meta and Google. On the Free plan you see every finding above and act on it yourself, with the writers switched off. Growth, at £99 a month, is the first plan where he applies what you approve on one store; Pro is three stores and Scale is ten. Founding members on the waitlist lock 25 percent off for life and billing is not open yet, all of which is in Ralph pricing. For how this compares with feed tools, rule engines and attribution suites, none of which join stock to spend and ask first, read Ralph vs the alternatives.

What Ralph will not do

Ralph is not your warehouse system and does not correct your stock counts; if the inventory in Shopify is wrong, everything built on it is wrong too, so fix catalogue truth first. He does not patch catalogue availability, does not auto-pause ad sets, and does not decide on his own to move budget: every exclusion, set rebuild and feed change waits for your approval, and the writers that move money are off by default on every plan. He will not fix a static or UGC ad that shows a size you cannot ship; he flags it and a person deals with it. And he will not invent a cost price or a margin to make a report look finished.

Related

FAQ

What is stock-aware advertising?

It is paid media where days of cover per variant is a first-class input to every decision, alongside audience and creative, rather than a spreadsheet checked after ROAS looks green. In practice it means a daily join of units on hand, sell rate and ad spend at size and colour level, a written policy for what each cover band means for the ads, and someone who acts on it before the weekend. The platforms will not do it for you because they cannot see your warehouse.

Why do ads ignore inventory?

Because the ad platforms optimise their own metrics and the warehouse lives in a different system owned by different people. Meta and Google will stop serving a specific sold-out item once the feed catches up, but they have no idea that a parent with its core sizes gone is unsellable or that a winner has four days of cover. Without a layer that joins spend to stock every day, budget scales cheerfully into empty shelves.

What is days of cover (DOC)?

Days of cover is sellable units on hand divided by your daily sell rate, which is units sold in a recent window divided by the days in that window. It tells you roughly how many days until the shelf is empty if nothing changes. A shirt with 120 units that sells 4 a day has 30 days of cover; the same shirt in a size with 18 units selling 3 a day has 6. The full method is in days of cover for advertisers and the free calculator does the arithmetic for several SKUs at once.

Should I turn Meta off when stock is low?

Usually not the whole account. Throttle spend on the thin SKU or exclude that style from catalogue ads, hold back a buffer for organic and repeat customers, and move the budget to a healthy sibling. Killing everything because one size ran out wastes the learning on the ad sets that are fine. The decision, with the cases where a full pause is right, is in ads when stock is thin.

Does this apply to Google Shopping?

Especially there, because Shopping intent is high and the clicks land straight on a product page. The feed lags the warehouse, the parent stays available when only tail sizes remain, and Performance Max cannot reason about size runs. The fix is a supplemental Merchant Center feed for availability and labels plus listing-group exclusions in the campaign, which is covered in Shopping when shelves are empty.

How does Ralph use stock in ads decisions?

Ralph reads Shopify inventory per variant every night, works out days of cover and core-run health, and finds the campaigns and product sets still spending against broken items. Each one appears in the morning brief with yesterday's spend and a staged fix: an exclusion with a revert, a set rebuild, a supplemental feed change or a buffer. You approve, he applies, and the writers are off until you switch them on. The detail is in how Ralph handles out-of-stock sizes.