Skip to main content
Your product feed is what AI systems read when they decide whether to surface your products in response to a user’s query. If the feed is missing fields, has stale availability, or uses the wrong price format for the target platform, AI agents either skip your products entirely or show incorrect information — both of which kill conversion. Feed quality directly affects your Readiness Score: catalog issues account for 25% of the total score.

Feed formats

JSON (preferred for UCP and ACP)

Use JSON for any programmatic UCP or ACP catalog endpoint:
{
  "products": [
    {
      "id": "prod_123",
      "title": "Running Shoes",
      "description": "High-performance running shoes for trail and road. Available in sizes 7-13.",
      "link": "https://yourstore.com/products/running-shoes",
      "image_link": "https://yourstore.com/images/running-shoes.jpg",
      "price": "129.99",
      "currency": "USD",
      "availability": "in_stock",
      "brand": "YourBrand",
      "gtin": "0123456789012",
      "product_type": "Apparel & Accessories > Shoes > Athletic Shoes"
    }
  ]
}

XML (Google Merchant Center)

For Google Merchant Center submission:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <item>
      <g:id>prod_123</g:id>
      <g:title>Running Shoes</g:title>
      <g:description>High-performance running shoes for trail and road.</g:description>
      <g:link>https://yourstore.com/products/running-shoes</g:link>
      <g:image_link>https://yourstore.com/images/running-shoes.jpg</g:image_link>
      <g:price>129.99 USD</g:price>
      <g:availability>in stock</g:availability>
      <g:brand>YourBrand</g:brand>
      <g:gtin>0123456789012</g:gtin>
    </item>
  </channel>
</rss>

JSON-LD (on-page structured data)

Add Product schema to every product page for AEO and GEO coverage:
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Running Shoes",
  "description": "High-performance running shoes for trail and road.",
  "image": "https://yourstore.com/images/running-shoes.jpg",
  "brand": { "@type": "Brand", "name": "YourBrand" },
  "offers": {
    "@type": "Offer",
    "price": "129.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>

Required vs optional fields

FieldUCPACPGoogle MCNotes
idRequiredRequiredRequiredStable, unique per product
title / nameRequiredRequiredRequiredClear, descriptive — no keyword stuffing
descriptionRequiredRequiredRequiredUse at least 150 characters for AI comprehension
linkRequiredCanonical product URL
image_linkRequiredRequiredRequiredAbsolute HTTPS URL
priceRequiredRequiredRequiredSee price formatting rules below
availabilityRequiredRequiredRequiredSee availability values below
brandRecommendedRecommendedRequired (most categories)
gtinRecommendedImproves match quality
variantsRequired (if applicable)Required (if applicable)RequiredSee variant handling below

Variant handling in feeds

Each variant must be its own item in the feed with its own id. Use the item_group_id field to group variants of the same base product:
{
  "products": [
    {
      "id": "prod_123_10_black",
      "item_group_id": "prod_123",
      "title": "Running Shoes — Size 10, Black",
      "color": "Black",
      "size": "10",
      "availability": "in_stock",
      "price": "129.99",
      "currency": "USD",
      "image_link": "https://yourstore.com/images/running-shoes-black.jpg"
    },
    {
      "id": "prod_123_11_black",
      "item_group_id": "prod_123",
      "title": "Running Shoes — Size 11, Black",
      "color": "Black",
      "size": "11",
      "availability": "out_of_stock",
      "price": "129.99",
      "currency": "USD",
      "image_link": "https://yourstore.com/images/running-shoes-black.jpg"
    }
  ]
}
ACP agents select a specific variant when a user specifies size, color, or other options. If variants are collapsed into a single product entry, the agent cannot resolve the user’s selection to a purchasable SKU.

Price and availability rules

Price formatting

PlatformFormatExample
UCP / ACP endpointsDecimal string, no currency code"129.99" with a separate "currency": "USD" field
Google Merchant CenterDecimal string + currency code"129.99 USD"
Mixing these formats is the most common feed error. The wrong format causes Google to reject feed items or ACP agents to misread prices.

Availability values

UCP / ACPGoogle Merchant CenterMeaning
in_stockin stockAvailable to purchase now
out_of_stockout of stockNot available
preorderpreorderNot yet released — include availability_date
backorderbackorderAvailable for backorder
Update availability within 5 minutes of inventory changes. Stale availability is the leading cause of AI-to-purchase conversion failures — an agent that shows an out-of-stock item as available loses the customer’s trust immediately.

Submission paths

UCP (Google path)

  1. Submit your feed via Google Merchant Center (Content API or scheduled fetch)
  2. Ensure the feed URL is in a supported format (RSS/XML or Content API JSON)
  3. Publish your /.well-known/ucp manifest pointing to your catalog endpoint
  4. Validate with the Readiness Score

UCP (Shopify)

Shopify exposes your product catalog automatically when UCP is enabled. Ensure your product data in Shopify is complete — descriptions, images, and availability — before enabling the feature. See the Shopify UCP Guide.

UCP (Custom / Headless)

Host a feed JSON endpoint and reference it in your manifest:
{
  "capabilities": {
    "product_catalog": {
      "endpoint": "https://yourstore.com/api/ucp/products",
      "format": "json"
    }
  }
}
Use the Manifest Generator to build the full manifest, or call the Manifest API directly.

ACP

ACP agents consume your catalog through the search_products tool endpoint. That endpoint must return well-structured product objects with all required fields including variant data. See ACP Getting Started.

Formatting best practices

Never use session-based, timestamp-based, or auto-incremented IDs that change on reimport. Stable IDs let agents re-reference products across sessions. If an agent caches prod_123 and you reimport with a new ID, the agent’s product reference becomes a dead link.
UCP/ACP: decimal string in major currency units ("129.99") with a separate currency field. Google Merchant Center: decimal string plus currency code ("129.99 USD"). Mixing these is the most common feed formatting error.
Images must be absolute HTTPS URLs. Relative paths (/images/shoe.jpg) do not work in feeds. Images should be at least 400×400 pixels, ideally 1000×1000 pixels.
Update availability within 5 minutes of inventory changes. Stale availability is the leading cause of AI-to-purchase conversion failures.
AI systems use product descriptions to match user queries. Short descriptions (“Running shoes. Size 7-13.”) give the model almost no signal. Write full, natural-language descriptions that describe use cases, materials, and fit.

Feed validation

Run the Asva audit API to check your catalog, feed format, and schema in one call:
curl -X POST https://asva-ai.com/api/audit \
  -H "Authorization: Bearer $ASVA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "yourstore.com", "checks": ["catalog", "feed", "schema"]}'

Pre-submission checklist

  • Feed URL is publicly reachable (no authentication required)
  • All required fields are present and non-empty
  • Prices are in the correct format for the target platform
  • Images are absolute HTTPS URLs and accessible
  • /.well-known/ucp manifest references the feed endpoint
  • ACP endpoints validated with the ACP Validator
  • JSON-LD Product schema is present on all product pages