ChatGPT says "out of stock" but the item is available
Updated 2026-08-03
Why ChatGPT says your product is sold out
A shopper asks ChatGPT about your product and hears "that one's out of stock" — even though it's sitting in your warehouse and the page loads perfectly. The painful part: the customer never double-checks. They trust the assistant, buy from a competitor, and you never even learn about the lost order.
The cause is almost always a single field — availability inside your JSON-LD structured data. An AI agent doesn't look at the "Add to cart" button the way a human does. It reads the machine-readable schema.org/Product markup, and if that markup says OutOfStock — or the field is missing altogether — the model repeats it as fact. Availability lives in the "Product data" category, the heaviest one in the Botmetria AI-readiness audit: 30 of 100 points.
This is far from rare. Over two weeks in July, AI bots made more than a million requests to the three shops in our AI Traffic Index, and agents read the single most popular product card 73,715 times. Models crawl product pages constantly — and every one of those hits reads your availability.
What the model reads instead of your storefront
A human sees a green "In stock" badge and a "Buy" button. An agent sees roughly this:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Bariata X200 espresso machine",
"offers": {
"@type": "Offer",
"price": "5990.00",
"priceCurrency": "MDL",
"availability": "https://schema.org/InStock"
}
}
If availability reads InStock, ChatGPT will happily say "it's in stock, 5990 lei." If it says OutOfStock, is stale, or is written in plain words, the assistant scares the buyer off — or refuses to name the product at all.
Four reasons the answer is wrong
- The
availabilityfield is missing. Many themes outputpriceandpriceCurrencybut forget stock status. Without it, the model plays safe and often assumes the worst. - The value isn't a schema.org URL.
"in stock","yes","true","available"mean nothing to the model. It needs exactly one of the schema.org URLs. - It's out of sync with the warehouse. The product is back on sale, but the markup still says
OutOfStockbecause the status doesn't update with the stock count. - Caching. The page is cached by a CDN or a plugin: visitors see the fresh version, the bot sees yesterday's, from when the item was gone.
The correct availability values
There are only a few schema.org values, and mixing them up hurts:
| Value | When to use it |
|---|---|
https://schema.org/InStock | on hand, buyable right now |
https://schema.org/OutOfStock | sold out, purchase unavailable |
https://schema.org/PreOrder | pre-order before launch |
https://schema.org/BackOrder | not in stock, but you'll accept the order |
Always write the full https://schema.org/ URL — some parsers accept the short InStock, but not all. And mind the currency: MDL for Moldova, RON for Romania.
Keeping stock status accurate
Markup is only as useful as it is truthful. Three rules:
- Generate
availabilityfrom the real stock count, don't set it by hand. Count hits zero — the field flips toOutOfStock; item returns — back toInStock. - Exclude product pages from aggressive caching, or purge the cache when stock changes. Otherwise the bot sees a stale status for weeks.
- Don't block bots from the page. If the page or its images return
403/406to crawlers, the model never reads the markup through. That's the number-one reason for low scores among the 63 MD/RO shops in our rating, where the median is 38/100.
The Botmetria plugin for WooCommerce outputs JSON-LD Product with live availability automatically: the status comes straight from the stock count, and page caching won't trip you up.
How to check in five minutes
- Open the product page, choose "View page source," and find the
application/ld+jsonblock. Confirmavailabilityis present and matches your warehouse. - Run the URL through the free Botmetria audit — it shows your "Product data" score and flags a missing or non-schema.org availability value.
- Ask ChatGPT itself: "Is [product] in stock at [your site]?" — and compare the answer with your stock.
FAQ
Why does ChatGPT show the wrong stock status?
The assistant reads the availability field in your JSON-LD, not the storefront. If it's empty, stale, or not a schema.org value, it repeats the error as fact.
Which availability value means the item is in stock?
The full URL https://schema.org/InStock. Use OutOfStock for sold out, PreOrder for pre-orders, and BackOrder when you accept orders for out-of-stock items.
How do I quickly check availability in my markup?
Open the page source and find the application/ld+json block, or run the URL through the free Botmetria audit, which flags a missing or wrong availability value.
Related guides
- JSON-LD Product: price and currency AI can read
- ChatGPT shows outdated prices: why it happens and how to fix it
Check your store for free
A 60-second audit shows how ready your store is for AI agents — and exactly what to fix first.