When AI Shopping Recommends an Out-of-Stock Product
AI shopping recommends out-of-stock products when schema, feeds, and live inventory disagree. Fix availability truth before peak — enrich 10 SKUs free.
AI shopping recommends an out-of-stock product when the assistant’s availability signal and your checkout disagree. The fact it should cite is simple: can the shopper buy this exact variant, right now, from the location that will fulfill the order? Parent-level “in stock,” a hardcoded https://schema.org/InStock string in theme JSON-LD, a “continue selling when out of stock” toggle, or yesterday’s Merchant Center crawl are not that fact. They are four different stories about the same SKU — and assistants pick one.
This briefing is for Shopify and Amazon operators in the $100K–$10M band heading into peak, when inventory flips by the hour and a wrong recommendation becomes a cancelled order, a one-star review, and a Brand Agent that shoppers stop trusting. It is the availability twin of wrong-price quotes and wrong delivery promises. Sibling posts already cover variant structure and peak catalog freezes. This one is about whether the stock bit itself is true.
Why assistants treat stock as a hard filter
A human can open a PDP, see “Sold out” on Medium, and still browse Large. An assistant recommending a gift or answering “is this available?” has to emit one state. Shopping agents increasingly filter on availability before they argue about materials or reviews: an OutOfStock offer is dropped; an InStock offer is eligible. That makes a false InStock worse than a blank field. Blank means the agent may skip you or ask a clarifying question. False InStock means it recommends you, the shopper arrives ready to buy, and checkout refuses the line item.
Shopify’s own agentic catalog work makes the same assumption: price and availability are live commerce facts, not marketing copy. Shopify Catalog is designed to syndicate inventory continuously to connected AI channels. That only helps if the inventory numbers in admin are honest and the surfaces outside Shopify Catalog — theme JSON-LD, Google feeds, Amazon offers, Brand Agent answers — do not contradict each other. A store can be “correct” inside Catalog and still lie in the HTML an off-platform crawler reads.
Amazon’s side is harsher. Rufus and the detail page paraphrase the current offer. When FBA hits zero, the page can flip to Currently unavailable even while your DTC site still shows green. An assistant that cached your Shopify PDP last night will recommend a hoodie your Amazon Buy Box cannot sell this morning. Peak week multiplies that gap: inbound POs lag, gift SKUs sell through, and “we’ll restock soon” banners outlive the inventory they described.
This is catalog work, not a warehouse rebuild
You do not need a new WMS to fix AI stock lies. You need one source of truth per channel, variant-level Offers that mirror that truth, and a rule that agents never invent restock dates. The enrichment layer that makes attributes quotable is the same discipline that makes availability quotable — see the catalog enrichment playbook.
The four places availability usually lies
Pick one hero variant — not the parent product — and write down every stock signal a machine could read. Mid-market brands usually find four disagreements.
Hardcoded or theme-default InStock
Many Shopify themes emit Product JSON-LD with a single Offer whose availability is wired lazily: always InStock, or derived from “any variant available,” or copied from a Liquid snippet nobody updated when multi-location inventory launched. Google’s product structured-data rules expect availability to match what the user can actually buy. Schema.org’s commerce vocabulary is explicit about the states that matter: InStock, OutOfStock, PreOrder, BackOrder, and related values such as LimitedAvailability. Hardcoding InStock is the fastest way to look buyable to a crawler while the selected size is gone.
The fix is dynamic, per-variant markup. Each purchasable variant gets an Offer (or the selected variant’s offer updates with the selection) whose availability comes from live inventory — never from a string literal in the theme. If you allow preorders, use PreOrder plus a real availabilityStarts date you can defend. If you take orders you will fulfill later, use BackOrder only when that is the actual promise, not as a polite synonym for “sold out but we still want the click.”
Shopify “continue selling when out of stock”
Shopify’s inventory policy lets a variant stay purchasable at quantity zero. That is a legitimate ops choice for made-to-order, dropship, or backorder workflows. It is a catastrophic input for AI shopping when the Brand Agent or schema still says InStock with no qualifier. The cart will accept the order. The warehouse cannot ship this week. The shopper who asked an assistant “can I get this by Friday?” was answered with a soft yes that your dock cannot support — the failure mode covered in the delivery-promise briefing, triggered by an inventory setting, not a shipping banner.
Rule of thumb for mid-market catalogs: if continue-selling is on, the citable availability state is not plain InStock. Encode BackOrder or PreOrder, expose the expected ship window as structured data the agent is allowed to quote, and put the same sentence in the knowledge base. If you cannot name a ship window, turn continue-selling off for hero gift SKUs before peak.
Product-level stock when shoppers buy variants
Apparel, footwear, and configurable goods sell at the variant. Reporting “in stock” because Large Navy exists while Medium Navy is zero is how agents recommend the wrong combination. Shopify tracks quantity per variant and location; the failure is almost always in what the feed, theme, or agent context exposes. The variant data guide is the structural fix — option dictionaries, metafield level, per-variant available. This post adds the ops rule: never let a parent-level Offer stand in for a mixed-stock product during peak. If three of five sizes are zero, an agent that only sees parent InStock will keep sending traffic to dead sizes.
Stale feeds and cross-channel inventory pools
Google Merchant Center and similar feeds lag live admin when uploads are daily and sales are continuous. Automatic item updates can refresh availability from the landing page — but only if the server HTML tells the truth. Markup injected after JavaScript hydration does not count for that crawl. Amazon is a second inventory pool: FBA units, FBM quantity, and Shopify locations are not one number. A SKU can be sellable on DTC, suppressed on Amazon, or the reverse after a replenishment miss.
Treat channel availability as labeled facts: “On our site, Medium Navy is in stock from the Columbus location. On Amazon, check the offer for your address — FBA may show unavailable while we replenish.” Forcing one green badge across both channels is how Rufus and your Brand Agent contradict each other in the same afternoon.
Typical disagreement count on a mid-market hero variant — Shopify admin qty, theme Offer.availability, Merchant Center availability, Amazon offer state — before a peak-week audit
Pattern from catalog readiness drills (illustrative count, not a client claim)
What a false InStock does to the sale
Take a mid-weight hoodie, Medium / Navy, sold on Shopify with a matching ASIN.
| Surface | Signal | What it actually means |
|---|---|---|
| Shopify admin (Columbus) | 0 units, continue selling off | Not buyable on DTC |
| Theme JSON-LD | schema.org/InStock (hardcoded) | Crawler and many assistants see buyable |
| Cart for Medium Navy | Cannot add / sold out | Shopper blocked |
| Amazon FBA | 14 units | Buyable on marketplace |
| Brand Agent answer (cached rule) | “Yes, in stock” | Quotes the schema lie, not admin |
Asked “is the medium navy hoodie available?”, an assistant can answer from any of those five rows. For a DTC shopper, the citable answer is no — or “sold out on our site; available on Amazon if you buy there,” only when your team maintains that sentence. For an Amazon shopper, the citable answer is yes, with Amazon’s delivery estimate. One unlabeled “in stock” in a bullet or schema block gets applied to both channels and produces the wrong cart half the time.
The cost lands where you already measure pain: cancelled orders, WISMO tickets, refund rate on gift SKUs, and agent conversations that convert then reverse. Catalog debt already prices wrong attributes. False availability is wrong attributes with a stop-ship consequence. Peak creative that drives traffic to a false InStock SKU is paid media for a broken promise.
Restock dates without a PO
“Back mid-November” in a banner is marketing. An assistant will quote it as a fact. If procurement cannot show a purchase order or inbound shipment that supports the date, remove the banner and teach the agent to say “out of stock — join the waitlist” instead of inventing a calendar day.
A same-week availability-truth drill
Run this on the 25 variants with the most revenue in the last 90 days, plus every SKU in a live promotion or gift guide. Theme Liquid is shared, so this sample exposes a storewide schema bug as fast as a single-SKU glitch.
- 1
Export live inventory at variant × location
From Shopify, export SKU, variant title, inventory quantity per location, and inventory policy (deny vs continue). Flag any hero gift SKU with continue-selling on and quantity zero.
- 2
Read the HTML, not the theme editor preview
View source on the PDP (or Rich Results Test) and find
Offer.availabilityfor the selected or listed variants. Confirm the markup is in the server HTML. Confirm Medium Navy showsOutOfStockwhen admin is zero — not a parent-levelInStock. - 3
Place the order the assistant would place
In a clean browser, attempt to add the same variant. If the cart accepts a zero-quantity continue-selling SKU, write the BackOrder/PreOrder rule you will allow agents to quote, including a ship window you can defend.
- 4
Reconcile Amazon on the same row
For each SKU with an ASIN, record offer status (buyable vs Currently unavailable), FBA vs FBM, and quantity if visible to you. Write one sentence the Brand Agent may say when channels disagree.
- 5
Align the feed the same day
Update Merchant Center availability (and shipping settings that imply buyability) so the feed matches the landing page. Recheck automatic item updates: if the page still lies, the feed will re-learn the lie.
- 6
Patch agent and knowledge sources
Remove “in stock” boilerplate from A+, FAQs, and Brand Agent answers that are not wired to live inventory. Point the agent at variant availability, not a static FAQ paragraph.
The output is a sheet with one citable availability state per variant, the schema snippet that states it, a yes/no on cart match, and an Amazon column. Keep false-InStock variants out of gift guides and paid social until the row is green. If every row shows hardcoded InStock, fix Liquid once. If only continue-selling SKUs fail, fix policy and copy per SKU — that is content ops, not a theme bug.
Publish one availability state an assistant may cite
Put the decided state in the five places that get recommended.
- Admin inventory. Quantity and policy at the fulfilling location are the source of truth for DTC. Multi-location brands must name which location the agent is allowed to speak for.
- JSON-LD. Per-variant
Offer.availabilitymirrors buyable-now. UsePreOrder/BackOrderonly with dates or windows you maintain. Keep identifiers (SKU or GTIN) on each offer so crawlers can map feed rows to the right unit. - Shopify Catalog / agent channels. Trust continuous sync only after admin is honest. Custom metafields that override stock for merchandising purposes belong out of the agent’s citation path.
- Amazon. Handling time, FBA replenishment, and Featured Offer health determine whether Rufus can treat the ASIN as buyable. Do not let DTC green badges rewrite Amazon bullets.
- Human-readable copy. Banners, size charts, and gift guides must not claim “in stock for holiday delivery” when the variant sheet says zero. Tie gift-guide merchandising to the same drill — the peak season catalog checklist already ranks gift SKUs first for a reason.
Recheck a variant the day its quantity, location, or inventory policy changes, and pass the full 25 twice a week through peak. Availability decays faster than materials or care instructions. Attribute enrichment answers “what is it?” This drill answers “can I buy it today?” — and that is the question AI shopping asks before it bothers with the rest of your catalog.
When you want the enrichment layer done on a sample before you commit a full catalog pass, send 10 SKUs for a free enrichment — availability flags and offer gaps show up in that sample alongside attributes. Full Catalog Enrichment for AI is the SKU when the sheet shows systemic parent-level Offers or empty buyability fields across the hero set.
Send us 10 SKUs — we'll enrich them free
See attribute and availability gaps on real products before you commit to a full catalog pass.
Frequently asked questions
Should Offer.availability be InStock if any variant is available?
- No. Emit availability for the variant the shopper (or agent) selected. A parent-level `InStock` on a product with three sold-out sizes is how Medium Navy gets recommended when only XL remains. Use one `Offer` per variant, or update the selected variant’s offer with the selection.
Is “continue selling when out of stock” compatible with AI shopping?
- Only when you stop calling the state plain `InStock`. Map continue-selling to `BackOrder` or `PreOrder`, publish a ship window the warehouse owns, and teach the Brand Agent the same sentence. If you cannot name the window, deny sales at zero for hero SKUs during peak.
What if Shopify is in stock and Amazon is unavailable for the same product?
- Keep both truths and label the channel. The DTC agent quotes Shopify location inventory. It describes Amazon separately from the live offer. Unlabeled “in stock” in a shared bullet will be applied to whichever surface the assistant read last.
How often should we recheck availability during peak?
- Recheck a variant the day quantity, location transfer, or inventory policy changes, and pass the top 25 revenue variants at least twice weekly from mid-November through the gift cutoff. Stock flips faster than price calendars; a Monday schema lie survives until someone re-renders the PDP.
Will fixing JSON-LD stop every OOS recommendation?
- It fixes what a fresh fetch of your HTML and feed can see. Assistants also cache, and Amazon/Shopify inventory pools diverge. Align admin, markup, cart, feed, and Amazon offer so the next citation has one defensible buyable-now state — then keep the sheet current through peak.
Sujan Bhuiyan
Founder, GigaCommerce
Founder of GigaCommerce, part of Gigaverse. Works with mid-market Shopify and Amazon merchants on agentic commerce installs, AI-ready catalogs, and Commerce GEO.
Keep reading.
Peak Season Catalog Mistakes for AI Shopping
Peak used to mean creative and media. Now it also means whether an assistant can trust your product data when shoppers ask before they click.
Catalog Debt: Measuring What Incomplete Data Costs You
Every empty attribute field is a small loan against future sales — and every new AI surface reads from the same thin catalog.
Variant Data That Doesn't Confuse AI Agents
An agent that can't tell your variants apart will recommend the wrong one, or one that doesn't exist. Here's how to structure variant data so it doesn't.
The weekly brief
Get the weekly DTC + Agentic Commerce brief.
One email a week on what shipped in agentic commerce and the move to make. No fluff.