← All articles
Guide · 8 min read · June 15, 2026

Inventory-Aware Advertising: Stop Promoting What You Can't Sell

Inventory-aware advertising uses stock levels, availability, and days of supply to point Google Shopping and PMax budget at the products you can actually sell.

Inventory-Aware Advertising: Stop Promoting What You Can't Sell

A customer searches for a size 10 running shoe on Google. Your ad fires, the click lands on your product page, and the size 10 is gone. The customer leaves. You've paid for the click and you have no chance of converting it. The platform that placed the ad had no way of knowing about the size, because it sees the product, not the inventory behind it.

What the Ad Platforms See vs What Your Warehouse Knows

PMax reads your Google Merchant Center feed. The inventory signal in that feed is the availability attribute, which takes one of four values: in stock, out of stock, preorder, or backorder. If your feed exposes variants correctly, with each variant as its own offer linked to a parent through an item group ID, each variant can carry its own availability value. The size 10 running shoe and the size 9 running shoe can read 'in stock' independently of each other.

That sounds like enough to handle variant-level inventory. In practice it usually isn't, for two reasons.

First, most retailers' feeds undersell the variant model. A common pattern is to roll availability up to the parent product so the offer reads 'in stock' whenever any variant has units. The ad stays live on every relevant search even after the popular sizes have sold through. Google's spec isn't the problem there; the data going into it is.

Second, even when variant-level availability is wired up correctly, the signal is binary. 'In stock' means you have at least one unit and you'll accept the order. It does not tell PMax whether the variant has 2 units left or 200, whether it is about to run out, or whether the SKU has been sitting on three months of stock and the buying team wants it gone. The gradient between healthy stock and a problem doesn't fit inside that field.

The warehouse knows all of this. Your ERP knows which variants are sitting on which shelves and how fast each one is moving. That detail doesn't have a home in the standard Google Merchant Center feed, and there is no native signal in the ad platform for stock cover, days of supply, or any of the other numbers your buying team uses to plan replenishment.

What the ad platform can see versus what the warehouse knows, with the rule response for each inventory signal.
Signal What PMax sees What your warehouse knows Rule response
Availability In stock / out of stock (per variant, if the feed is set up for it)Exact units per variantOut of stock → Low priority
Stock depth Nothing2 units left or 200Low stock → pull spend back
Days of supply NothingDays until the shelf is empty at the current sell-throughBelow threshold → pull back; above threshold → push to clear
Replenishment NothingLead time and incoming POsRestock imminent → keep live; no restock → pull back

The Two Inventory Problems

There are two ways inventory misalignment costs retailers ad budget, and they pull in opposite directions.

The first is the low-stock problem. A product is selling well, replenishment lead time is six weeks, and stock cover has dropped under a few days. Every additional click pays for impressions that arrive after the variant the buyer wanted is gone. The algorithm has no incentive to pull back because conversions are still happening on the slower-moving sizes.

The second is the high-stock problem. A product has been sitting on three months of inventory, the buying team needs to clear it, and the merchandising plan has already moved on to next season. The algorithm sees average conversion data and treats the SKU as a normal-priority item, which means it gets normal-priority budget while the buyer is asking for accelerated sell-through.

These need opposite responses. The product with two days of supply needs less ad spend or no ad spend until replenishment lands. The product with ninety days of supply needs more spend so it moves before the new range arrives. A static feed treats them identically.

Stock Cover as a Signal

Stock cover is the calculation that makes both directions actionable. Units in stock divided by average daily sales gives you the number of days you can keep selling at the current rate before the shelf is empty.

If you sell 10 units a day and you have 30 in stock, you have three days of supply. The number is meaningful in retail because every category has an expected range. Three days of supply on a fast-moving consumable is normal. Three days of supply on a seasonal jacket is a problem.

It is also a number the rule layer can evaluate every day. Expanly computes it from two inputs: the stock quantity from your inventory feed, and a daily sales velocity derived from your purchase data over a rolling window. The output sits next to your margin, ROAS, and other fields as something rules can read.

Stock cover translates cleanly into priority. Below a low threshold, the product needs less budget because the click can't convert. Above a high threshold, the product may need more budget because the buyer needs the inventory to move. The thresholds are category-specific.

Building Inventory-Aware Rules

The simplest inventory rule is the one Expanly recommends as a starting point: when the availability attribute reads 'out of stock', set the product to Low priority. Products that are entirely out of stock stop getting ad budget. The supplemental feed updates the next day; Google Ads can then take 24–48 hours to reflect a changed label in serving.

That rule covers the worst case. It doesn't cover broken size runs (the product is still in stock somewhere, so availability still reads 'in stock'), and it doesn't cover stock-cover urgency (the product is in stock today but won't be by week's end).

For those, you need stock-cover-driven rules. The same logic in plain English:

  • If days of stock is below your low-cover threshold (often 3–7 days depending on category) and replenishment is not imminent, set Low priority.
  • If days of stock is above your high-cover threshold (often 60+ days) and the buying team has flagged the product for clearance, set High priority.
  • Otherwise, leave the inventory signal silent and let margin and other rules drive the priority.

Notice what this does not include: no bid changes, no campaign restructuring, no manual budget reallocation in Google Ads. Expanly's output is a priority signal written to one of the GMC custom label slots. Once PMax reads the updated label from your feed, your campaign structure routes budget toward High-priority products and away from Low-priority ones within the daily cap you've already set.

The variant question is where retailers with size and color matrices have to make a choice. If your feed exposes variant-level identifiers (SKU, variant ID, EAN), Expanly can run rules at the variant grain. The size 10 running shoe and the size 9 running shoe become separate offers, and each gets its own priority based on its own stock. The size 10 going out of stock pulls back ad spend on that one variant while the rest of the product stays in market.

If your feed only carries product-level identifiers, rules run at the product level. The size-run problem stays partly invisible: the parent product reads 'in stock' as long as any variant has units, and the ad platform keeps pushing the product to every relevant search. Most fashion retailers run this gap and never measure the cost.

Scandinavian Outdoor: Inventory Acceleration in Practice

Scandinavian Outdoor used the second of the two patterns. Their catalogue covers a wide outdoor range with promotional cycles that move specific categories at specific times. Some inventory ended up sitting longer than the buying team wanted, and the algorithm had no way to know which products were on clearance plans and which were running normally.

They built an inventory rule that pushed products with high stock cover into High priority during their promotional windows, while keeping full-price items at Standard priority so they were not crowded out by the discount-driven conversion lift. The rule sat alongside their other priority logic: margin protection on full-price products, promotional priority for items inside a scheduled campaign, and an automatic reversion at the end of each window so the rules did not need manual cleanup.