Product data that AI shopping agents can read
Usually fixed by: Developer · Typical effort: days
When an AI agent compares products for someone, it needs facts it can trust: the exact name, the price, the currency, whether it's in stock, how shipping and returns work. Structured data hands it those facts in a standard format, instead of making it guess from your page layout.
What structured data is
Structured data is a small block of machine-readable information in your page's HTML that describes what the page is about, using the shared vocabulary at schema.org. The most common format is JSON-LD: a <script type="application/ld+json"> tag that people never see, but search engines and agents read directly.
Search engines have used it for years to show prices and star ratings in results. For AI agents it matters even more. A person can glance at a page and see that "$24" next to the "Add to cart" button is the price. An agent reading the raw page has to infer that, and on a busy page with sale prices, bundle prices and "from" prices, it can get it wrong. Structured data removes the guesswork.
A complete product example
Here's JSON-LD for a single product page, with the details agents use most:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Ethiopia Yirgacheffe Whole Bean Coffee, 340 g",
"description": "Light roast single-origin coffee with notes of jasmine and lemon.",
"sku": "NW-ETH-340",
"gtin13": "0123456789012",
"brand": { "@type": "Brand", "name": "Northwind Coffee" },
"image": "https://northwind.example/images/ethiopia-340.jpg",
"url": "https://northwind.example/products/ethiopia-yirgacheffe",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "212"
},
"offers": {
"@type": "Offer",
"price": "18.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"url": "https://northwind.example/products/ethiopia-yirgacheffe",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30
}
}
}
</script>
The fields that matter most
| Field | Why agents need it |
|---|---|
name | The exact product, including size or pack where it matters |
offers.price and priceCurrency | The price the customer will actually pay, as a plain number, with no currency symbol |
offers.availability | Whether it can be bought now. Agents skip products they think are out of stock |
sku, gtin, mpn | Let an agent match your product to the same item elsewhere when comparing |
brand | Answers "do you have anything from …?" questions |
aggregateRating | Lets agents weigh quality, but only include it if the reviews are on the page |
hasMerchantReturnPolicy, shippingDetails | Answer the questions people ask before buying, without a trip to your policy pages |
Products with options
If a product comes in sizes or colors with different prices or stock, describe each variant. Schema.org's ProductGroup type groups variants under one parent, with variesBy naming what changes (such as size or color) and hasVariant listing each Product with its own offer. At minimum, make sure the price and availability on the page match the variant a visitor lands on.
Beyond product pages
- Home page:
Organization(orLocalBusinesswith address and opening hours) with your name, logo, website, contact details and social profiles. AgentScore looks for structured data on your home page. - Category pages:
BreadcrumbListshows where a page sits in your catalog, and helps agents move between categories. - Help pages:
FAQPagefor genuine question-and-answer content, such as shipping and returns questions. - Software pricing:
SoftwareApplicationorProductwith anOfferfor each plan.
Rules that keep it trustworthy
- Match the page. Every value must match what a person sees. A price in the markup that differs from the page is worse than none: an agent may quote the wrong one, and search engines may ignore your markup.
- Keep it current. Generate it from the same data as the page, so prices and stock update together. Hand-written markup goes stale.
- Put it in the HTML. Markup added by JavaScript after the page loads is invisible to agents that don't run JavaScript. AgentScore flags this as a warning. See why AI agents can't see JavaScript-only content.
- Prefer JSON-LD. Microdata and RDFa work, but JSON-LD keeps the data in one tidy block that's easier to read and maintain.
- Don't mark up what isn't there. No ratings without visible reviews, no FAQ markup for questions that aren't on the page.
How to add it
- Check what you already have. Many e-commerce platforms and themes output basic product markup. View the page source and search for
application/ld+json. - Fill the gaps. Common missing pieces are
availability, identifiers like GTIN, and return and shipping details. Platform apps and SEO plugins can add these, or your developer can extend the theme template. - Validate. Paste the page URL into the Schema Markup Validator to check the markup is valid, and Google's Rich Results Test to see which fields Google can use.
- Run AgentScore. The structured data check passes when your home page has JSON-LD in its HTML, and warns if it only appears after JavaScript runs.
Structured data is one part of being readable to agents. The other big one is making sure your content is in the HTML at all; see the guide to JavaScript-only content, or the full agent readiness guide.