Spoke 4 / 8
AgentMall · Spoke 4 of 8

Agent-Readable Product Data: The Exact Format AI Agents Need to Find, Evaluate, and Buy Your Products.

Only 19% of e-commerce product pages include both Schema.org Product and Offer markup — the minimum an AI agent needs to evaluate price and availability. The other 81% are structurally invisible. This page is the exact JSON structure your products need, the four layers that make a product agent-readable, and the six failure modes that silently block agent purchases.

19%
Sites with Product + Offer
4
Layers Required
~20
MVP Field Object
6
Silent Failure Modes
§1 · The 81% Problem

Most product pages are structurally invisible to AI agents.

A 2026 audit of more than 5,000 e-commerce sites found that 73% emit some Schema.org Product markup, but only 19% pair Product with the full Offer object — the combination an AI agent needs to evaluate price, currency, availability, and condition before deciding to look further (DigitalApplied 5,000-site audit, 2026). The remaining 81% force agents to fall back on raw HTML, where price and inventory are buried in JavaScript bundles, gated behind sessions, or hidden inside cross-origin iframes. The agent walks in blind. By the end of this page you will know the exact JSON structure your products need, the four layers that make a product agent-readable, and the six failure modes that silently block agent purchases.

§2 · The HTML Problem

Why HTML Fails Agents.

What the agent actually sees

An AI agent loading a standard product page does not see what a browser renders. It sees the raw DOM before JavaScript execution — meaning price, inventory, and variant selectors that are JS-rendered appear as empty placeholder elements. It sees CORS-blocked iframes containing pricing widgets, shipping calculators, and third-party inventory feeds. It sees session-cookie or login-gated content that returns a wall instead of a price. And it sees CAPTCHA challenges (hCaptcha, reCAPTCHA v3) triggered by non-human request patterns.

The contrast is brutal. A human sees a price; the agent sees an empty span.

What the agent receives — raw HTML
<div class="product-detail">
  <h1>Wireless Headphones</h1>
  <span id="price"></span>
  <span id="stock"></span>
  <div data-react-root="variants"></div>
</div>
<script src="/bundle.js" defer></script>
What it needs — clean JSON
{
  "id": "prod_wh1000xm5_001",
  "title": "Wireless Headphones",
  "price": 279.99,
  "currency": "USD",
  "availability": "InStock",
  "image_url": "https://example.com/img.jpg"
}

Token cost

Parsing the same product as raw HTML versus a structured JSON object is not a small difference. It is the difference between a viable agent commerce system and one that burns budget on noise. The figures below are directional benchmarks drawn from Cloudflare's Agent Readiness work and general LLM tokenization research — not peer-reviewed product-page studies — but the gap is consistent across every public source.

Format Approx. Tokens (1 product) vs. Raw HTML What the agent does with it
Raw HTML product page ~1,200 baseline Parses navigation, ads, scripts, recommendations before reaching product fields
Markdown extraction ~100–150 −85% to −90% Reads page text but loses structured field semantics
Structured JSON object ~40–50 −96% to −98% Directly addresses fields: price, availability, variant_id

Specific HTML patterns that break agents

JS-rendered prices. The price in raw HTML is <span id="price"></span>. The actual price is rendered by a React or Vue component after the bundle loads. Most AI crawlers do not execute JavaScript — they see the raw HTML, not the rendered page (Sanity, How to serve content to agents). Agents without a full headless browser receive $0.00 or nothing at all.

Session-cookie-locked pricing. Enterprise pricing, account-tier pricing, and regional pricing all require authenticated sessions. Anonymous agents either get the list price (which may not be the price the user would actually pay) or a 403. Google explicitly warns that structured-data pages should not be blocked by login requirements (Google Search Central).

CAPTCHA-gated inventory. Anti-bot systems triggered by non-browser User-Agents or rotation patterns return challenge pages instead of product payloads. One documented finding from BrowserAct's industry analysis: preserving session cookies across requests (rather than rotating User-Agents blindly) reduced CAPTCHA triggers by 90% or more. Most agent fetch pipelines do neither.

Cross-origin iframes. Pricing widgets and shipping calculators embedded in <iframe> tags from third-party domains are blocked by CORS and X-Frame-Options. The agent cannot navigate into them and cannot read what is inside. The product page renders for a human; the agent gets an empty container.

What agents can parse reliably

The positive list is short: JSON-LD <script> tags (static in HTML, no JS execution required), standard <meta> tags and <title> elements, static text in rendered HTML when the page is not JS-gated, and OpenGraph tags. That is why Schema.org JSON-LD is Layer 1. It is the only reliable agent-parseable signal on a standard product page.

§3 · The Four Layers

What agent-ready actually means.

AI agent product readability is not one problem. It is four stacked problems. Each layer serves a different access pattern. You need all four because different agents access products differently — and a product missing any layer has a gap agents will route around.

Layer 1

Schema.org Product JSON-LD

What it is
Structured metadata embedded in your HTML <script type="application/ld+json"> tag. Indexed by search engines. Parsed by agents that crawl the web or read page content.
Why it matters
The only reliable agent-parseable signal on a standard product page. Without valid JSON-LD, your product is invisible to any agent that finds it via search or web crawl.
What it enables
Discovery and basic evaluation — name, price, currency, availability, rating, description, condition.
Who reads it
Google AI Overviews, Bing Copilot, browsing-enabled LLMs, web-crawling agents.
Layer 2

REST API Product Endpoint

What it is
A structured JSON API endpoint returning product data. Standard for platforms — Shopify, WooCommerce, Stripe, custom storefronts.
Why it matters
Agents building shopping flows, price comparison tools, or inventory checks call APIs directly rather than parsing HTML. A clean REST response avoids the HTML parsing problem entirely.
What it enables
Real-time inventory, variant-level data, cursor-paginated catalog access, authenticated pricing.
Who reads it
Agent frameworks calling external tools, shopping assistants with API access, B2B procurement agents.
Layer 3

MCP Resource and Tool

What it is
Model Context Protocol primitives for exposing products. Resources for static or browsable catalog data; Tools for dynamic search and filtering.
Why it matters
MCP is the 2025–2026 standard for native agent integration. Stripe, Shopify, and major platforms are shipping MCP servers. An MCP-compatible agent discovers and calls tools natively — no custom API integration required.
What it enables
Semantic tool discovery, structured parameter validation, native agent checkout flows.
Who reads it
Claude, GPT-4o with MCP support, any agentic framework using an MCP client.
Layer 4

UCP (Universal Commerce Protocol)

What it is
Google's open protocol for AI agent–to–merchant checkout, launched January 11, 2026 at NRF Retail's Big Show. Spec at ucp.dev; GitHub at Universal-Commerce-Protocol/ucp.
Why it matters
If a product is not UCP-compatible, agents can browse it but cannot complete a purchase through Google AI Mode or the Gemini app.
Who is live
Etsy and Wayfair are live. Shopify, Target, and Walmart scheduled. Endorsers include Stripe, Mastercard, Visa, American Express, Adyen, Best Buy, The Home Depot, Macy's, Flipkart, Zalando.
Who reads it
Google AI Mode, Gemini app, and any agent surface that adopts the UCP spec.

Each layer reaches a different class of agent: Schema for discovery, API for real-time access, MCP for native integration, UCP for purchase. A product missing any one of them has a gap. Agents route around gaps.

§4 · The MVP Schema

The MVP product schema — copy and ship.

Two complete, copy-pasteable blocks. One for the HTML <script> tag (Schema.org JSON-LD). One for your REST API and MCP Resource (the canonical internal object, ~20 fields, including the UCP variants array). Together they satisfy Schema.org Product validation, work as a REST response or MCP Resource payload, and include the UCP fields required for checkout.

Block 1 · Schema.org JSON-LD — for the HTML <script> tag
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Noise-Cancelling Headphones",
  "description": "Over-ear Bluetooth headphones with 40-hour battery, active noise cancellation, and foldable design. Compatible with USB-C charging.",
  "image": "https://example.com/products/headphones-wh1000xm5.jpg",
  "url": "https://example.com/products/wireless-headphones",
  "sku": "WH-NCA-001",
  "mpn": "WH1000XM5",
  "gtin14": "00027242920958",
  "brand": {
    "@type": "Brand",
    "name": "AudioPro"
  },
  "category": "Electronics > Audio > Headphones > Over-Ear",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "2841"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/wireless-headphones",
    "price": "279.99",
    "priceCurrency": "USD",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "USD"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "businessDays": {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"]
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 3,
          "maxValue": 5
        }
      }
    }
  }
}
</script>
Block 2 · REST API / MCP Resource JSON — canonical internal object (~20 fields)
{
  "id": "prod_wh1000xm5_001",
  "title": "Wireless Noise-Cancelling Headphones",
  "description": "Over-ear Bluetooth headphones with 40-hour battery, active noise cancellation, and foldable design. Compatible with USB-C charging.",
  "sku": "WH-NCA-001",
  "mpn": "WH1000XM5",
  "gtin": "00027242920958",
  "brand": "AudioPro",
  "category": "Electronics > Audio > Headphones > Over-Ear",
  "price": 279.99,
  "currency": "USD",
  "price_valid_until": "2026-12-31",
  "availability": "InStock",
  "condition": "new",
  "image_url": "https://example.com/products/headphones-wh1000xm5.jpg",
  "url": "https://example.com/products/wireless-headphones",
  "rating": 4.6,
  "review_count": 2841,
  "shipping_free": true,
  "updated_at": "2026-05-15T10:30:00Z",
  "active": true,
  "ucp_variants": [
    {
      "id": "var_wh1000xm5_black",
      "title": "Midnight Black",
      "price": { "amount": 27999, "currency": "USD" },
      "availability": { "available": true }
    },
    {
      "id": "var_wh1000xm5_silver",
      "title": "Platinum Silver",
      "price": { "amount": 27999, "currency": "USD" },
      "availability": { "available": false }
    }
  ]
}
Critical · Price encoding

UCP price is in cents as an integer, not a decimal float. $279.99 = 27999. This differs from Schema.org (which accepts "279.99" as a string) and from REST API conventions (which use 279.99 as a float). A mapping layer is required. This is not a bug — it is a deliberate spec decision to eliminate floating-point drift in payment paths. Get this wrong and UCP checkout fails silently while every other layer continues to work.

§5 · Field-by-Field Reference

Every field in the MVP object, and what breaks without it.

This is a reference table, not a summary. Every field in the canonical object above gets one row. The Layers column shows which of the four layers (Schema, REST, MCP, UCP) each field is required or recommended for. The What Breaks column is the operational consequence of omitting it — the failure you should expect.

Field Name Type Example Value Layers (Schema / REST / MCP / UCP) What Breaks Without It
id / @id String "prod_wh1000xm5_001" REST, MCP, UCP Agents cannot reference, cache, or deduplicate the product
name / title String "Wireless Headphones" Schema, REST, MCP, UCP Required for Schema.org. Zero discoverability; no rich results
description String (150–300 words) "Over-ear headphones..." Schema, REST, MCP, UCP Agents lack context to evaluate fit; lower relevance score
price Number (decimal) 279.99 Schema (string), REST (float), MCP (float), UCP (integer cents) Cannot evaluate purchase decision; offer skipped entirely
currency / priceCurrency String (ISO 4217) "USD" Schema, REST, MCP, UCP Google Rich Results fails validation; agent cannot determine cost
price_valid_until / priceValidUntil String (ISO 8601) "2026-12-31" Schema, REST Expired date = agent treats offer as invalid and skips; omit for permanent prices
availability String (Schema enum) or Boolean (UCP) "InStock" / {"available": true} Schema (enum), REST (string), MCP (string), UCP (boolean) Product excluded from in-stock results; purchase blocked
image_url / image URL "https://example.com/..." Schema, REST, MCP Multimodal agents cannot evaluate visual product; lower recommendation confidence
url / link URL "https://example.com/products/..." Schema, REST, MCP, UCP No checkout path; agent cannot complete purchase
sku String "WH-NCA-001" Schema, REST, MCP No internal tracking; retailer-specific deduplication fails
mpn String "WH1000XM5" Schema, REST Cross-merchant precision matching fails; same model not matched across sellers
gtin / gtin14 String (8–14 digits) "00027242920958" Schema, REST Cross-source deduplication fails; duplicate listings displayed
brand / vendor String or Object "AudioPro" Schema, REST, MCP "Sony headphones" query cannot match; lost in category search
category String (taxonomy path) "Electronics > Audio > Headphones" Schema, REST, MCP Poor search relevance; agents cannot narrow by category
condition / itemCondition String "new" / "https://schema.org/NewCondition" Schema, REST Refurb/used vs. new cannot be distinguished; incorrect purchase decisions
rating / aggregateRating Number (0–5) 4.6 Schema, REST, MCP Agents cannot rank by quality; recommendation confidence drops
review_count Integer 2841 Schema, REST, MCP Rating without sample size is untrustworthy; agents may de-weight it
shipping_free / shippingDetails Boolean / Object true / OfferShippingDetails Schema, REST Total cost calculation fails; cheaper competitor recommended incorrectly
updated_at String (ISO 8601 datetime) "2026-05-15T10:30:00Z" REST, MCP Stale data propagation; agents cannot determine freshness
active / status Boolean / String true / "active" REST, MCP Discontinued products returned in search results; false purchase attempts
UCP variants[].price.amount Integer (cents) 27999 UCP Checkout fails; UCP cannot parse decimal float
UCP variants[].availability.available Boolean true UCP UCP checkout blocked; variant treated as unavailable
§6 · Failure Mode Catalog

Six failures that silently block agent purchases.

Every one of these is a real, documented agent failure mode. They look fine to a human visiting the page. They break the moment an agent tries to complete a purchase. Each block: the trigger, what the agent does, and the exact fix.

Failure 01

Availability mismatch — Schema.org says InStock, REST API returns out_of_stock

Trigger
Inventory system updates stock status but Schema.org markup is not regenerated. Cached JSON-LD shows stale InStock.
Agent does
Selects product as purchasable, attempts checkout, receives out-of-stock error. In MCP flows, the purchase tool returns failure. Trust collapse in the agent system — once it gets burned, it deprioritizes the merchant.
Fix
Regenerate Schema.org markup on every inventory change event, not on page render. Use Google Merchant Center's Automatic Item Updates to override the feed with landing-page status. Maintain a single inventory source of truth that feeds both Schema.org markup and REST API simultaneously.
Failure 02

Price stored as string with symbol — "$49.99" instead of numeric 49.99

Trigger
Data pipeline stores the display price (currency symbol included) in the same field used for the machine-readable price.
Agent does
Numeric comparison fails or throws a type error. Cannot compare price across products. Purchase flow receives "$49.99" as non-numeric, fails at checkout validation.
Fix
Strip currency symbols at the API/schema layer. Store price as Number (float for REST/MCP) or String with decimal only (for Schema.org, per spec: use . as decimal separator, digits 0–9 only). Never reuse the display price field for the machine-readable price.
Failure 03

Product data behind auth — login or session cookie required

Trigger
Merchant uses account-tier or regional pricing. Anonymous requests receive the list price or a 403.
Agent does
Sees incorrect price (too high or unavailable), abandons the purchase. Or attempts purchase at the displayed price and hits a pricing mismatch at checkout.
Fix
Implement OAuth 2.1 with PKCE for agent authentication (per MCP spec and WorkOS guidance). Grant agents scoped, time-limited tokens with specific permissions rather than cookie-based sessions. Provide a public-facing price endpoint returning list price for unauthenticated agents.
Failure 04

Expired priceValidUntil — date is in the past

Trigger
A temporary sale ended. Markup was updated for the sale price, but priceValidUntil was not removed or reset when the sale expired.
Agent does
Treats the offer as expired and ignores it entirely. Product disappears from price comparison results. Google may suppress rich results.
Fix
For permanent prices, omit priceValidUntil entirely. For sales, update it to the sale end date and automate removal or reset when the sale ends. Never leave a past date in the field.
Failure 05

Missing priceCurrency — price present, currency absent

Trigger
Developer adds a price field but forgets the ISO 4217 currency code. Or currency is nested only inside priceSpecification, not at the Offer root.
Agent does
Google Rich Results Test throws MISSING_OR_INVALID_FIELD; the product is excluded from rich results. Agents cannot determine whether 49.99 is USD, EUR, CAD, or BRL. Documented systematically since May 2025 — see WooCommerce GitHub issue #60652.
Fix
Always include priceCurrency at the Offer object root level as an ISO 4217 code ("USD", "EUR", etc.). Do not rely solely on priceSpecification nesting. Validate with Google Rich Results Test after any schema change.
Failure 06

JS-rendered price with no fallback — price only in the JavaScript bundle

Trigger
Storefront renders price client-side. No Schema.org markup fallback exists in the raw HTML.
Agent does
Receives raw HTML with an empty price element. Parses the price as null or $0. Excludes the product from any price-aware decision.
Fix
Add a JSON-LD <script> block server-side with the current price. This renders in HTML without JS execution. Keep the JSON-LD price synchronized with the JS-rendered price via a server-side template. MCP and REST endpoints are not affected by this issue — only HTML-scraping agents.
§7 · Validation Tools

Six tools to test before you call it shipped.

Each tool validates a different layer. Run all of them. Passing one does not mean passing the others, and "passes Rich Results" does not mean "agent-readable and transaction-safe."

Tool URL What It Validates What It Does NOT Validate Free / Paid
Google Rich Results Test search.google.com/test/rich-results JSON-LD syntax; required fields for Product rich results (name + offers or aggregateRating); price format (INVALID_PRICE_FORMAT); ISO 4217 currency code; availability values; JavaScript rendering Price consistency with displayed page price; crawlability or indexability; whether the rich result will actually display Free
Schema Markup Validator validator.schema.org Extracts JSON-LD 1.0, RDFa 1.1, Microdata; identifies syntax errors; combines multiple markup formats; applies heuristics for text-based markup Rich results eligibility (Google-specific rules); business logic correctness; agent parsing success Free
MCP Inspector modelcontextprotocol.io/docs/tools/inspector Tool definition structure; JSON Schema compliance for parameters; parameter type and format validation; real-time request and response logging; stdio, SSE, and HTTP transports Deep parameter validation (length, ranges, business constraints); whether LLMs correctly select tools; description sufficiency for agent decision-making Free / open-source
Spectral (OpenAPI linter) stoplight.io/open-source/spectral OpenAPI v2.0/v3.0/v3.1 compliance; AsyncAPI v2.x; custom style-guide rules; operation ID uniqueness; description completeness Agent-specific behavior; Schema.org compliance; MCP compatibility Free / open-source
Redocly CLI redocly.com/redocly-cli OpenAPI spec linting; custom ruleset enforcement; schema accuracy; style-guide compliance; benchmarks ~3× faster than Spectral Agent-specific behavior; runtime correctness; Schema.org CLI free; Respect monitoring $10/1K requests after 1K free/month
Cloudflare Agent Readiness Score isitagentready.com Four scored dimensions — Discoverability (robots.txt, sitemap, llms.txt), Content Accessibility (markdown negotiation, no JS-only rendering), Bot Access Control (AI bot rules, Content-Signal directives), and Capabilities (MCP server cards, OAuth, API catalogs, plus Commerce preview: UCP, x402, ACP). Reports "31% fewer tokens consumed, 66% faster answers" for optimized sites. Individual field validation; Schema.org property-level correctness Free
§8 · FAQ

Eight questions builders actually ask.

1. Do I need all four layers, or can I just do Schema.org?

Schema.org JSON-LD alone makes you discoverable via search and readable by web-crawling agents. It does not make you purchasable. For purchase, you need Layer 4 (UCP) or Layer 3 (MCP with a checkout tool). If your goal is only to appear in AI-powered search results, Layer 1 is sufficient. If your goal is to receive orders from AI agents — the actual AgentMall use case — you need at minimum Layer 1 (discovery), Layer 2 (API for agent verification), and Layer 4 (UCP for checkout). Layer 3 (MCP) is the native integration layer that makes Layers 2 and 4 seamlessly accessible from any MCP-compatible agent.

2. My store already has Schema.org markup. What's likely broken?

Three things fail most often. Missing or expired priceValidUntil — if you ever ran a sale and set an expiration date, check that it is either current or removed. Missing priceCurrency at the Offer root level — Google Search Console has flagged this systematically since May 2025 (WooCommerce GitHub issue #60652); run the Rich Results Test to confirm. Availability mismatch — your markup says InStock but your REST API or actual inventory differs. This breaks agent purchase flows even when Schema.org validates correctly. Run the Google Rich Results Test first. Fix errors before warnings.

3. Should I use Schema.org enumerated values for availability, or my platform's native values?

Use Schema.org values everywhere your data is agent-facing. The full enumeration: InStock, OutOfStock, PreOrder, BackOrder, Discontinued, LimitedAvailability, OnlineOnly, InStoreOnly, SoldOut, MadeToOrder, Reserved, PreSale. These are the values agents trained on standard web data recognize. In your database or platform, use whatever internal vocabulary you prefer — but translate to Schema.org values at the API and schema layer. Exception: UCP uses availability.available as a boolean (true/false), which must be mapped separately.

4. My product catalog has 50,000 SKUs. Should I use MCP Resource or MCP Tool?

Tool. The rule of thumb: under ~1,000 products, you can embed the catalog as a Resource (agents get full context upfront). Over 5,000 products, you must use a Tool — the catalog is too large for context. At 50,000 SKUs, a Resource approach would consume the entire context window of most agent runtimes. Use the hybrid approach Shopify employs: a minimal Resource listing available categories (for agent orientation), plus a search_catalog Tool for queries and a get_product Tool for detail retrieval.

5. What is UCP and do I need it now?

UCP (Universal Commerce Protocol) is Google's open protocol for AI agent checkout, launched January 11, 2026. The spec is at ucp.dev; the GitHub is at Universal-Commerce-Protocol/ucp. Etsy and Wayfair are live. Shopify, Target, and Walmart scheduled. If you want AI agents in Google AI Mode or the Gemini app to complete purchases from your store, you need UCP. If you are on Shopify, wait for Shopify's native UCP integration — do not build a custom implementation yet. If you are on a custom storefront, review the spec now and plan your implementation around the id, title, description, price_range (with amount in cents and currency), and variants (with availability.available boolean) fields.

6. What's the minimum viable product JSON for UCP checkout?

Per the ucp.dev specification reference, the minimum viable UCP product object for checkout includes id (unique product identifier), title (product name), description (plain text — no HTML), price_range (object with min and max, each containing amount as integer in cents and currency as ISO 4217), and variants[] (each with at minimum id, title, price as amount + currency, and availability.available as boolean). UCP price is in cents as an integer, not a decimal float. $279.99 = 27999. This differs from Schema.org (which accepts "279.99" as a string) and REST API conventions (which typically use 279.99 as a float). A mapping layer is required.

7. How do I handle product images for AI agents?

Product images matter. Research evaluating frontier vision-language models on zero-shot product purchasing tasks found visual information plays a significant role in how AI agents assess and recommend products ("Beyond Text: Aligning Vision and Language for Multimodal E-Commerce Retrieval"). Practical requirements: image_url must point to a publicly accessible URL (no login-gated CDN); use standard formats — JPEG, PNG, WebP; no JavaScript lazy-loading that requires scroll events (the URL must return an image on direct fetch); for Schema.org, use the ImageObject type with url, width, height for maximum compliance; for multiple images, use the additionalImageLinks[] array in Google Shopping or additionalImages in Schema.org.

8. How do I keep Schema.org, REST API, and MCP data in sync?

This is the hardest operational problem. The failure modes above — especially availability mismatch and expired prices — all stem from synchronization lag. Recommended architecture:

  1. Single source of truth. Your inventory and pricing system is canonical. All other representations derive from it.
  2. Event-driven updates. When inventory changes, trigger a regeneration of Schema.org markup immediately — not on the next page render.
  3. Server-side Schema.org markup generation. Template-level, not client-side. Inject current price and availability from the inventory system at request time or on inventory change events.
  4. Live REST API. Returns live data from the same inventory system on every call. No caching of availability or price longer than 5 minutes.
  5. Short-TTL MCP exposure. For static catalog data (name, description, images, category) cache aggressively. For price and availability, either call the REST API in real-time or set a short TTL of 5–15 minutes maximum. UCP feeds directly from the same inventory system.

Use Google Merchant Center's Automatic Item Updates feature as a safety net — it reads your landing page's Schema.org markup to override stale feed data, catching synchronization failures that would otherwise suppress your products.

§9 · The Window

The agents are already shopping.

The agents shopping the internet in 2026 are hitting 81% of product catalogs and finding them unreadable. The stores that fix their data format this quarter own the agent traffic before the optimization tools commoditize it. Six months from now this work will be table stakes. Right now it is a moat. The MVP schema is on this page. The four layers are on this page. The validation tools are on this page. Build it once, ship it, and watch the next agent crawl actually see your catalog.

Get the AgentMall 30-Day Roadmap →
AgentMall · 8 Spokes

Get the next spoke when it drops.

AgentMall is an 8-part build guide for selling to AI agents. New spokes ship every few weeks. Drop your email and we'll tell you when the next one is live — no pitch, no sequence, just the update.