“AI-ready product data” is a query people already type into Google looking for a checklist. There isn’t a single spec that defines it β schema.org gives you the vocabulary, but not which fields actually decide whether a shopping agent can complete a purchase. AgentReady’s audit engine answers that narrower question directly: it is a deterministic set of checks, each one pass/partial/fail, each one scoped to a single fact an agent needs before it will buy. Below is the field-by-field walk, taken from the check definitions themselves.
Can the agent find a product at all?
The first check (sd.product, in the audit’s structured-data pillar) looks for a
Product node in JSON-LD, either on the product page or the homepage. Its logic is
binary on purpose: a page can be fully readable by a human and still return nothing
here, and when that happens every check below it is moot β there is no product object
for price or availability to live inside. The fix the audit hands back is literally
a JSON-LD snippet: Product with name, image, brand, sku/gtin13, and an
offers block.
Can it price and stock-check the item?
Two checks, both binary in what they’ll accept:
- Structured price + currency (
sd.price) passes only whenoffers.priceandoffers.priceCurrencyare both present. A number with no currency code earns half credit β the audit’s own comment on the check is that “a number with no currency is not a price.” - Structured availability (
sd.availability) checks foroffers.availabilityand has no partial state at all: it’s PASS or FAIL. The rationale in the check itself β “the agent can’t tell if it’s in stock” β is why a missing availability field scores as a hard failure rather than a minor deduction.
Can it trust and resolve the listing?
Three more checks decide whether the agent trusts the offer enough to act on it:
- Structured brand (
sd.brand) β a barebrandfield, PASS/FAIL. - Product identifier (
sd.identifier) β SKU, GTIN (in any of its 8/12/13/14-digit forms) or MPN. The audit’s framing: without one of these “the agent can’t disambiguate the product” from near-identical listings elsewhere. - Aggregated reviews (
sd.rating) βaggregateRatingwith aratingValue. Lower weight than the others, but it’s the field that lets an agent compare your reputation against a competitor’s in the same query.
Can it resolve a variant and filter the catalog?
This is where most stores actually lose points, and it’s a separate pillar (catalog, not structured data) for a reason β a store can have flawless single-SKU JSON-LD and still be unusable for a search like “size 43, black, under $120”:
- Structured variants (
cat.variants) looks forhasVariant, more than oneOffer, or more than one entry in a Shopifyproducts.jsonfeed. AProductGroupwith a price range and nothing purchasable underneath it β the group without its members β earns only partial credit: an agent has parsed the page correctly and still has nothing to add to a cart, a distinction covered in more depth in our walk through schema.org’s variant fields. - Attributes as fields, not prose (
cat.attributes) checks forcolor,size,material,pattern,categoryoradditionalPropertyas structured fields β or, on Shopify, named feed options. Two or more of these pass in full; fewer earns partial credit; “trail, size 43” in a paragraph of marketing copy earns nothing, because an agent can’t filter on a sentence. - Product feed / catalog signals (
cat.feed) rewards a machine-readable feed β Shopify’sproducts.jsonscores the full weight; OpenGraphproducttags andog:availabilityscore partial credit as a fallback signal.
What this actually predicts
None of these eight checks asks whether your page reads well. They ask whether a
specific fact exists as a parseable field. That gap is the recurring finding across
every store we’ve scanned: pages that are perfectly legible to a human and still
unbuyable to an agent, because the price,
the stock status or the variant lives in a <span> or a dropdown rather than a field an
agent’s parser can read.
It’s also, per our own Search Console data, a query people are already typing β “ai ready product data” showed up with real (if early) search demand in our own property’s 28-day export, alongside “ai ready product feed”-shaped phrasing, which is the reason this checklist exists as its own piece rather than staying folded into the JSON-LD article.
FAQ
What is AI-ready product data?
It’s product information exposed as machine-readable fields β JSON-LD Product and
Offer nodes, or a structured feed like Shopify’s products.json β rather than as text
inside a styled page. A shopping agent parses fields; it does not reliably parse prose,
click dropdowns, or infer a price from a screenshot.
What’s the minimum a store needs for an agent to buy?
At minimum: a Product node with name and brand; an offers block carrying
price and priceCurrency together; and availability. Missing any one of these three
is enough to stop a transaction β a price with no currency or a product with no stock
status leaves an agent unable to confirm what it would actually be buying.
Why do variants break more stores than missing prices?
Because variants require a second structural layer most platforms don’t add by
default: a ProductGroup (the “T-shirt” template) has to expose hasVariant links down
to each purchasable size/color combination, or list more than one Offer directly. A
store that only markets the group β a price range, no individually addressable SKUs β
looks complete to a human and is a dead end to an agent, which is why AgentReady scores
that state as partial credit rather than a pass.
Sources
audit/pillars/structured_data.pyandaudit/pillars/catalog.pyβ AgentReady’s own check definitions (sd.product,sd.price,sd.availability,sd.brand,sd.identifier,sd.rating,cat.variants,cat.attributes,cat.feed), the primary source for every check described above.audit/scoring.pyβ pillar weighting (structured_data,catalogas distinct scored pillars).research/GSC_QUERY_INSIGHTS.md, addendum 2026-08-19 β the 28-day Search Console export recording real query demand for “ai ready product data”.
An audit that only checks for a Product tag existing can’t tell you any of this β
these are the fields that decide whether that tag translates into a completed order.