A shopper tells an assistant: "I need running shoes in size 43 that arrive before Saturday." Price is only one question. The agent also has to know whether that size is in stock and how long the order takes to arrive. If your page says "fast delivery" and your feed says nothing, the agent has a promise it can't check.
In this article, we look at how agents treat stock and delivery, the fields schema.org, Google Merchant Center and OpenAI's product feed use for them, and how to keep all three in agreement. Our catalog guide touched on this briefly; this is the detailed version.
This article is for information only and is not legal advice.
Why agents weigh stock and delivery
Agent instructions are explicit about both. The skill file Shopify publishes for agents using Shop MCP says search applies availability filtering by default, offers a ships_to filter for the delivery destination, and tells the agent to confirm the selected option's stock and price before recommending it or building a cart. It is just as careful about time: "Shipping eligibility does not establish arrival by a deadline." When a shopper gives a date, the agent is told to say that search can't confirm arrival by then and to point to the merchant's checkout.
So an agent will not assume your item arrives in time. It needs a number it can read before checkout. Google's Merchant Center help makes the same point from the shopper's side: shipping speed and cost are two of the most common reasons shoppers abandon a product.
Availability: one value per offer, from a short list
Structured data. In schema.org, an Offer carries availability, whose values come from ItemAvailability. Google supports ten of them, including InStock, OutOfStock, PreOrder, BackOrder and SoldOut, and adds: don't specify more than one value.
Merchant Center. The availability attribute is required for all products, with four values for regular retail: in_stock, out_of_stock, preorder and backorder. Google publishes the mapping: for example, SoldOut and Discontinued both become out_of_stock.
OpenAI's product feed. availability is a required field with five values: in_stock, out_of_stock, pre_order, backorder and unknown. An omitted, empty or unrecognized value rejects the row. If you don't know, say unknown explicitly; it does not claim the item is in stock.
The same idea, three spellings. Generate all three from one stock field.
Preorder, backorder and sold out
- Preorder is for a product that hasn't been released yet. Google says existing products that are out of stock and will come back should use backorder instead.
- Backorder means the item isn't available right now, but you accept orders and ship when it returns.
- Out of stock means you aren't accepting orders. Google accepts clear text such as "sold out" or a disabled buy button on the page.
For preorder and backorder, Merchant Center requires availability_date: the day the product becomes available for delivery, up to one year ahead. The date must also be visible on the landing page, and Google maps it to Offer.availabilityStarts in structured data.
OpenAI's spec adds a warning: availability values and dates do not schedule a future change. When the item arrives or sells out, you update the feed.
And from Google: don't mark products out_of_stock to pause them for maintenance or a holiday. Use excluded_destination instead.
Delivery time: handling plus transit
Schema.org splits a delivery promise into parts. deliveryTime is the total delay between receiving the order and the goods reaching the customer. Inside it, a ShippingDeliveryTime holds:
handlingTime: from receiving the order until the goods leave the warehouse.transitTime: from handing the order to the carrier until it reaches the customer.
On a product, this sits in shippingDetails (an OfferShippingDetails) next to shippingRate and shippingDestination. Google expects each time as a QuantitativeValue with minValue, maxValue and unitCode set to DAY. Its example: handling 0 to 1 day, transit 1 to 5 days.
Google recommends declaring a store-wide shipping policy once, with hasShippingService under Organization, and using offer-level shippingDetails only for products that differ. That version can also state a cutoffTime and businessDays; a handling time of 0 means same-day processing before the cutoff.
Merchant Center uses the same split: the shipping attribute takes min_handling_time, max_handling_time, min_transit_time and max_transit_time. Handling counts business days: an order placed on Tuesday that leaves by Friday has a maximum handling time of 3.
OpenAI's feed is different. shipping_price describes a charge, and the spec says it "does not quote a checkout total or guarantee a delivery date." An empty value means unknown, not free shipping. The optional shipping field, available only with feed-specific setup, takes country:region:service_class:price, and the spec states that handling and transit day suffixes are not part of it. So for that channel, the delivery time lives on your page and in your markup.
Keeping page, markup and feed in sync
Google's rule is direct: availability must match across the landing page, structured data, checkout and your data source, and a mismatch in one triggers a disapproval. Google also recommends Product markup in the initial HTML, since markup generated by JavaScript can make Shopping crawls less frequent and less reliable for fast-changing data like availability and price.
For shipping, know which source wins. Google's order, strongest first: Content API account settings, Merchant Center or Search Console settings, product markup, organization markup. If your dashboard says 2 to 4 days and your page says next day, what Google shows will contradict your page.
We covered why disagreement costs you on price in your feed, your page and your structured data should agree on price. Stock and delivery follow the same logic.
Turkey: the delivery time is a legal promise too
In Turkey's Distance Contracts Regulation, as currently published, the pre-contract information must include a delivery period consistent with what was promised in advertising and promotion. The seller must deliver within the period it committed to, and for goods, except those made to the customer's request, that period can't exceed 30 days from the order.
So a line such as "kargoya veriliş: 1 iş günü" on a Turkish product page is already a commitment. Mark it up as handlingTime, enter the same number in Merchant Center, and the agent reads the promise you are already making.
Common mistakes
- Words instead of numbers. "Fast shipping" or "usually ships soon" gives the agent nothing to compare.
- One availability for every variant. A sold-out size hides behind an in-stock group. Each variant needs its own
Offer; see variant pages an agent can read. - A delivery time only in checkout. The agent has to start buying just to learn when the item arrives.
- A feed refreshed once a day. Stock sells out at noon, the feed says
in_stockuntil tomorrow.
A practical checklist
- Pick 20 products: best sellers, one sold out, one on preorder or backorder.
- In the page source, check that each
Offerhas exactly oneavailabilityvalue and that it matches the visible page and checkout. - Check that preorder and backorder items show an expected date on the page and carry
availability_datein the feed. - Write handling and transit time as day ranges in markup, in Merchant Center, and in plain text on the page. Use the same numbers in all three.
- Compare Merchant Center shipping settings with your markup, since the account settings win.
- In any OpenAI feed, make sure every row has an explicit
availability, and leaveshipping_priceempty only when the cost is truly unknown. - Trigger a feed update whenever stock changes, not just once a day.
The bottom line
Agents don't take "in stock" or "fast delivery" on trust. They read a stock status and a day range, and they check that the page, the markup and the feed say the same thing. A store that states one availability value per offer and an honest handling plus transit range, everywhere, gives the agent a promise it can repeat to the shopper.
Specoria checks whether your offers carry price, currency and availability, whether your shipping information is machine-readable, whether shipping cost and time appear on the page, and whether stock agrees between your catalog and your pages. Start with a free readiness test.
Sources
- Google Search Central, Merchant listing (Product, Offer) structured data, last updated September 8, 2026.
- Google Search Central, Merchant shipping policy (ShippingService) structured data, last updated September 8, 2026.
- Schema.org, OfferShippingDetails, ShippingDeliveryTime and ItemAvailability, accessed October 20, 2026.
- Google Merchant Center Help, Availability (availability), accessed October 20, 2026.
- Google Merchant Center Help, Availability date (availability_date), accessed October 20, 2026.
- Google Merchant Center Help, Shipping (shipping), accessed October 20, 2026.
- Google Merchant Center Help, Maximum handling time (max_handling_time), minimum handling time (min_handling_time), accessed October 20, 2026.
- OpenAI, Product Feed Spec, accessed October 20, 2026.
- Shop, Shop MCP agent skill, accessed October 20, 2026.
- Mevzuat Bilgi Sistemi, Mesafeli Sözleşmeler Yönetmeliği (Distance Contracts Regulation, Articles 5 and 16 as amended), accessed October 20, 2026.