How to Monitor Competitor Stock Levels (Not Just Prices)
Published on August 13, 2026 by Niccolò
What "In Stock" Actually Is on a Competitor's Page
It is two separate things, and they disagree often enough that Google runs a dedicated error class for it. The first is a declared value sitting in the page's structured data. The second is the state of the buy path: whether the add-to-cart button is live, whether the size you care about is greyed out, whether a notify-me box has appeared where the price used to be.
Monitoring competitor stock means reading both, for the right unit, and having a rule for what to do when they contradict each other. The competing guides on this topic skip it entirely and treats whatever the competitor's page says as fact. It frequently is not.
The rest of this covers what availability is encoded as, why the encoding drifts from reality, and the order in which to resolve a conflict. If you have not set up competitor monitoring at all yet, the guide to tracking competitor prices covers the mechanics that come first.
Availability is set on Offer.availability, and schema.org's vocabulary (version 30.0, March 2026) contains twelve possible values: BackOrder, Discontinued, InStock, InStoreOnly, LimitedAvailability, MadeToOrder, OnlineOnly, OutOfStock, PreOrder, PreSale, Reserved and SoldOut (schema.org). They are case-sensitive URIs, and they carry real distinctions: BackOrder and SoldOut are opposite commercial situations, and only one of them means your competitor has stopped taking money.
Three Vocabularies, and Only Four Slots at the End
The same product's availability passes through three different vocabularies on its way to a shopper, and each one is smaller than the last.
Google Search's structured data documentation supports ten of the twelve values, dropping MadeToOrder and Reserved, and adds an explicit rule that you must not specify more than one value (Google Search Central). The Merchant Center product feed narrows further: the [availability] attribute accepts four values, in_stock, out_of_stock, preorder and backorder.
Twelve to ten to four. Merchants have to map between them, and the mapping is theirs to choose, not an official crosswalk. That is precisely where the truth thins out.
| schema.org value | Supported in Google Search markup | Nearest Merchant Center feed slot |
|---|---|---|
InStock | Yes | in_stock |
OutOfStock | Yes | out_of_stock |
SoldOut | Yes | out_of_stock |
Discontinued | Yes | out_of_stock (no slot of its own) |
BackOrder | Yes | backorder |
PreOrder | Yes | preorder |
PreSale | Yes | preorder (no slot of its own) |
LimitedAvailability | Yes | in_stock (the "limited" part is gone) |
OnlineOnly | Yes | in_stock |
InStoreOnly | Yes | no online slot |
MadeToOrder | No | no slot |
Reserved | No | no slot |
Read the right-hand column as a list of things a feed value cannot tell you. A competitor down to their last few units and one with a full warehouse both land on in_stock. A discontinued line and a temporary sellout both land on out_of_stock, though one is never coming back and the other might return on Tuesday. If your monitoring then stores a boolean, you have performed the same flattening a second time on top of theirs.
Why Listed Availability Drifts From Reality
The vocabulary loses detail. The data itself is separately, independently wrong.
The underlying records were already wrong in 2008
A study of nearly 370,000 inventory records across 37 stores found 65% of them inaccurate, meaning the system's count did not match the physical shelf (DeHoratius and Raman, Management Science, 2008). That study is old, and it is worth flagging the year rather than passing it off as current.
The problem also persists. A more recent paper covering about 24,000 SKUs across 11 stores found that inventory auditing alone produces roughly an 11% store-wide sales lift, concentrated entirely on items with negative record inaccuracy, where the system believed it held stock it did not have (Rekik, Oliva, Glock and Syntetos, arXiv preprint, revised June 2026). It is a preprint, not a peer-reviewed finding, so weigh it accordingly. The logic holds regardless: if records were accurate, counting them again would produce no lift.
Google runs an entire error class for this
The most direct evidence comes from the company with the largest sample of product pages on earth. Merchant Center has a dedicated disapproval reason called "Inaccurate availability status due to inconsistency between feed and landing page", and Google's own documentation lists the causes (Google Merchant Center Help):
- availability rendered differently depending on IP address or geolocation, so the value depends on who is looking;
- products still marked in stock after selling out or moving to pre-order only;
- some variants unavailable but not reflected at listing level;
- outdated microdata left in the HTML, contradicting the visible page;
- purchase buttons disabled while the markup still says in stock;
- feed and landing page updated at different moments.
Every one of those is a way for a monitoring tool to record something a shopper would never see. Google's structured data policies separately require markup to be "a true representation of the page content" (Google Search Central). Note the asymmetry: the penalty for stale markup falls on the merchant, the cost of believing it falls on whoever reads it as truth.
One more mechanism, worth naming even though it has no clean quantification: availability rendered by JavaScript after page load can be absent from the initial HTML entirely, so a crawler and a human see different pages.
Monitor Competitor Stock Levels per Variant, Not per Product
Most tools watch the product page. That is the wrong unit, and not by a small margin.
Google's product variant documentation puts availability on each variant's own Offer, nested under ProductGroup.hasVariant. The parent ProductGroup has no availability property at all (Google Search Central). Google's own worked example shows one variant marked InStock beside a sibling marked BackOrder on the same page. There is no defensible way to collapse that into one number.
Now add what happens commercially when a single variant goes. Researchers analysing roughly 1.5 million records covering 217 stores, 503 products and 4,024 SKUs over two years found that most of a stockout's unmet demand never leaves the product at all (Li, Lu, Lu and Huang, Manufacturing & Service Operations Management, 2023).
| Where demand goes when a size sells out | Share |
|---|---|
| Adjacent larger size, same style | 25.1% |
| Adjacent smaller size, same style | 26.6% |
| A different style | 20.2% |
| Lost outright | 28.1% |
The first two rows sum to 51.7%. Over half the demand released by a stockout moves sideways inside the same product, to the neighbouring size, where a parent-level read sees nothing happen at all. The page still says available, because something on it is. What actually happened is that a competitor's medium ran out and the pressure moved to their large.
Parent-level monitoring is not a lower-resolution version of the right measurement. It measures a different object.
Rank Your Signals Before You Trust Them
Not every stock signal carries the same weight. This ranking follows what Google names as acceptable availability evidence, adjusted for what survives contact with real product pages.
| Signal | Reliability | Why |
|---|---|---|
Variant-level Offer.availability, when it agrees with the visible page | Highest | Authoritative when true, but agreement cannot be assumed |
| Add-to-cart button state, enabled versus disabled | High | Google names a disabled or greyed buy button as an unavailability signal |
| Variant selector state, one size or colour disabled | High | Google names unreflected per-variant unavailability as a mismatch cause: the grid leads, the feed lags |
| Explicit sold-out text | High | Merchant Center accepts a clear textual notice |
| Notify-me or back-in-stock control present | High in practice | The strongest positive sign of a deliberate out-of-stock state rather than a broken page |
| Low-stock banner, "only 3 left" | Low as a count, useful as a change | Frequently synthetic urgency. Track the transition, never the number |
| Numeric stock in embedded product JSON | Variable | Genuine on some platforms, absent or capped on most |
The low-stock banner deserves its own warning. Plenty of stores render "Only 3 left" from a template rather than from inventory. What is informative is the moment the banner appears or disappears, since that usually tracks something real even when the digit is decoration.
The Five-Step Resolution Order
When two signals conflict, you need a rule decided in advance, not a judgement call made per page.
- Read the variant-level availability, not the parent. If the page exposes a
ProductGroup, go intohasVariantand take the offer for the specific variation you compete with. - Read the buy-path DOM state for that same variant. Button, selector, sold-out text, notify-me control.
- If they disagree, trust the buy path. Structured data is a claim about the product. The buy path is the product. A customer cannot buy a JSON-LD blob.
- Require two consecutive agreeing observations before recording a flip. A single disagreement is more often a rendering or geolocation artefact than a real event, and Google documents IP-based variation as a genuine cause of inconsistent availability. Confirming the change is worth more than catching it three minutes earlier.
- Record the specific value, not a boolean.
BackOrderandPreOrdermean the competitor is still taking orders and still taking revenue.SoldOutandOutOfStockmean they are not. Those are different competitive situations and a true/false column erases the difference.
Step 4 is the one people cut, and it is the reason so many stock alerts feel untrustworthy. Confirmation costs one extra check and removes most false positives.
The Amazon 999 Cart Trick Is Not a Monitoring Method
If you have researched this topic before, you have met the 999 method: add 999 units of a competitor's product to your cart, and the quantity Amazon corrects it down to reveals their remaining stock. It is the most-covered technique in the competing content on this subject, and it is largely broken. Sellers routinely set maximum order quantities that defeat it, it only ever worked against FBA offers, it returns nothing above 999 units, and it produces one number at one moment. Even in its best years it gave you one number at one moment, and marketplace stock questions are better answered through the mechanics in the Amazon repricing and Buy Box guide.
The Benchmark You Are Probably Quoting Is From 2002
Somewhere in your research you will meet the claim that the average retail out-of-stock rate is 8.3%. The number is real: it comes from a study of more than 71,000 consumers across 29 countries by Gruen, Corsten and Bharadwaj for the Grocery Manufacturers of America. It was published in 2002, it measured physical shelves, and it is still recycled today by reports that present it as current.
Nothing credible has replaced it for online availability. The closest web-scale count is Adobe's, which recorded shoppers seeing over 2 billion out-of-stock messages online in October 2021 alone, up roughly 250% against January 2020 (Adobe, November 2021). That was measured mid-pandemic, during a supply shock, so it is not a normal-conditions rate either.
What is well sourced is the cost rather than the rate. IHL Group puts global inventory distortion at $1.73 trillion a year, equal to about 6.5% of global retail sales, of which $1.157 trillion is out-of-stocks (IHL Group, September 2025). The problem is large and expensive, and nobody can tell you what share of online listings are currently wrong. That leaves one option: measure the competitors you actually have.
What a Competitor Stockout Is Worth to You
Briefly, because this ground is covered elsewhere. When a shopper hits an out-of-stock item, 66% leave and shop elsewhere, and among those hitting an in-store stockout, 34% order online from a different retailer (AlixPartners 2024 Consumer Sentiment Index, October 2024). Some of that demand is available to you, immediately.
That stock outranks price during heavy discounting is already established in the Black Friday monitoring playbook, and the alert setup, frequency tiers and response sequence once a rival sells out are covered in the guide to back-in-stock alerts for sellers. This post is about getting the underlying observation right, because a fast response to a false stockout is worse than no alert.
Where Respot Sits in This
Respot tracks price and stock per variation rather than at parent-product level, the distinction the spillover data makes expensive to get wrong. You paste a competitor's product URL, product details are detected automatically, and stock changes on the variation you compete with alert separately from price changes. Extraction is browser-free and covers Shopify, WooCommerce, BigCommerce, Magento and marketplace listings, so one watch list can span platforms.
The free plan gives you 5 trackers with 7 days of history and no credit card, enough to test the resolution order above against a few competitors you already suspect of misreporting availability. Paid plans run to 100, 400 or 2,000 trackers with longer history, and competitor stockouts deserve their own watch list rather than being a side effect of price tracking.
The Decision This Leaves You With
Pick the unit of observation before you pick the tool. If you monitor at parent-product level, you have chosen not to see the event that matters most, because over half of a stockout's displaced demand never leaves the product listing you are watching.
Everything else follows from it. Variant-level reads give you something to compare against the buy path, the comparison gives you a conflict to resolve, and the resolution rule gives you alerts you can act on without opening the page yourself. Start with your ten most contested products, at the variation level, and see how often markup and buy path actually agree. Set up your first trackers and find out on your own competitors.
12 min read
Catch competitor price cuts before they cost you sales
Respot monitors any competitor product page and emails you within minutes of a price or stock change. Free plan, no credit card.
Catch competitor price cutsRelated articles
How to Set Your Peak-Season Floor Price and Discount Depth
Your peak-season floor price is not cost plus shipping. Work through the returns and surcharge arithmetic, and the discount depth your margin can actually fund.
2026 Peak Season Pricing Checklist: Dates and Surcharges
A dated 2026 peak season checklist, month by month from September to January, covering the calendar, the carrier surcharge windows and the new landed-cost math.
Competitor Price Tracking by Platform: The Complete Guide
Your competitor's ecommerce platform decides how reliably you can read their price. What Shopify, WooCommerce, BigCommerce, Magento and marketplaces expose.