NewThe tragent CLI is on npm: npx @tragent/cli scan your-store.com

Issue reference

Your product data does not say whether it is in stock

Issue code
SCHEMA_AVAILABILITY_MISSING
Stage
Check stock
Protocol
—
Severity
Medium

What it means

tragent reports this at the “Check stock” stage. The question there is “Can it tell whether the product is in stock?” An agent that cannot tell what is available will recommend things you cannot sell.

What it does to an agent

Agents can usually carry on, but more slowly or less sure of what they found, and an unsure agent is likelier to recommend another store.

Agents stop recommending what they cannot confirm is in stock, or worse, recommend what is not. Offer.availability is the one field that tells them, as a schema.org URL such as https://schema.org/InStock or https://schema.org/OutOfStock.

This matters most per variant: the shoe may be in stock in size 9 and sold out in 10, and an agent asked for 10 needs to know before it adds it to a basket.

How to fix it

Set Offer.availability so agents stop recommending out-of-stock variants.

Before: No availability
"offers": { "@type": "Offer", "price": "89.00", "priceCurrency": "USD" }
After: Availability per offer
"offers": { "@type": "Offer", "price": "89.00", "priceCurrency": "USD", "availability": "https://schema.org/InStock" }

On your platform

Shopify

The structured_data filter sets availability from each variant. In a hand-written block, derive it from variant.available.

Liquid
"availability": "{% if variant.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"

WooCommerce

WooCommerce sets availability from the stock status. Make sure products track stock, or have a stock status set, rather than none.

Headless or custom

Map your inventory states to InStock, OutOfStock, PreOrder, BackOrder or LimitedAvailability. Do not invent values.

In practice

Availability should reflect what the shopper can buy now, in the market they are in. If you sell from several warehouses, InStock should mean in stock for that shopper, not somewhere. Use PreOrder with an availabilityStarts date for items not yet released, and BackOrder for items you will take an order for but cannot ship immediately; both let an agent tell the shopper the truth instead of refusing.

Update the markup when stock changes, not on a nightly job. Agents check stock right before recommending, and a page that says InStock for an item that sold out at lunchtime sends shoppers to checkout to be disappointed. If the page is cached, purge it when a variant sells out, or render availability on request.

Products that are discontinued should either leave the catalogue or be marked Discontinued, not left as OutOfStock forever. An agent treats OutOfStock as "try again later" and may tell a shopper to wait for a restock that will never come. Discontinued tells it to look for an alternative, which might be another of your products if you link one from the page.

Check the fix

  1. Check the JSON-LD on an in-stock product and on a sold-out one; the two should differ.
  2. Sell out a test variant on staging and reload its page without the cache, to confirm the markup follows stock.
  3. Run the scan; Check stock should pass.

Run the check that reported SCHEMA_AVAILABILITY_MISSING again after the change. The scan needs no account; an issue found during an AI shopping test needs that test run again.

Terminal
npx @tragent/cli scan https://your-store.com

Common mistakes

  • Values like "in stock" or "available" instead of the schema.org URL.
  • Every variant marked InStock because the group is.
  • Availability rendered from a nightly export, hours behind the stock the basket checks.