> ## Documentation Index
> Fetch the complete documentation index at: https://docs.asva-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Product Feed Specs for UCP, ACP, and Merchant Center

> Format, field requirements, variant rules, price formatting, and validation steps for product feeds used in UCP and ACP implementations.

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:

```json theme={null}
{
  "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 theme={null}
<?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:

```html theme={null}
<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

| Field            | UCP                      | ACP                      | Google MC                  | Notes                                            |
| ---------------- | ------------------------ | ------------------------ | -------------------------- | ------------------------------------------------ |
| `id`             | Required                 | Required                 | Required                   | Stable, unique per product                       |
| `title` / `name` | Required                 | Required                 | Required                   | Clear, descriptive — no keyword stuffing         |
| `description`    | Required                 | Required                 | Required                   | Use at least 150 characters for AI comprehension |
| `link`           | —                        | —                        | Required                   | Canonical product URL                            |
| `image_link`     | Required                 | Required                 | Required                   | Absolute HTTPS URL                               |
| `price`          | Required                 | Required                 | Required                   | See price formatting rules below                 |
| `availability`   | Required                 | Required                 | Required                   | See availability values below                    |
| `brand`          | Recommended              | Recommended              | Required (most categories) | —                                                |
| `gtin`           | —                        | —                        | Recommended                | Improves match quality                           |
| `variants`       | Required (if applicable) | Required (if applicable) | Required                   | See 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:

```json theme={null}
{
  "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"
    }
  ]
}
```

<Note>
  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.
</Note>

***

## Price and availability rules

### Price formatting

| Platform               | Format                           | Example                                              |
| ---------------------- | -------------------------------- | ---------------------------------------------------- |
| UCP / ACP endpoints    | Decimal string, no currency code | `"129.99"` with a separate `"currency": "USD"` field |
| Google Merchant Center | Decimal string + currency code   | `"129.99 USD"`                                       |

<Warning>
  Mixing these formats is the most common feed error. The wrong format causes Google to reject feed items or ACP agents to misread prices.
</Warning>

### Availability values

| UCP / ACP      | Google Merchant Center | Meaning                                        |
| -------------- | ---------------------- | ---------------------------------------------- |
| `in_stock`     | `in stock`             | Available to purchase now                      |
| `out_of_stock` | `out of stock`         | Not available                                  |
| `preorder`     | `preorder`             | Not yet released — include `availability_date` |
| `backorder`    | `backorder`            | Available 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](https://asva-ai.com/tools/readiness)

### 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/shopify).

### UCP (Custom / Headless)

Host a feed JSON endpoint and reference it in your manifest:

```json theme={null}
{
  "capabilities": {
    "product_catalog": {
      "endpoint": "https://yourstore.com/api/ucp/products",
      "format": "json"
    }
  }
}
```

Use the [Manifest Generator](https://asva-ai.com/tools/manifest) to build the full manifest, or call the [Manifest API](/api-reference/manifest) 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](/acp/getting-started).

***

## Formatting best practices

<AccordionGroup>
  <Accordion title="Use stable product IDs">
    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.
  </Accordion>

  <Accordion title="Prices in the correct format per platform">
    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.
  </Accordion>

  <Accordion title="Absolute image URLs">
    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.
  </Accordion>

  <Accordion title="Keep availability in sync">
    Update availability within 5 minutes of inventory changes. Stale availability is the leading cause of AI-to-purchase conversion failures.
  </Accordion>

  <Accordion title="Descriptions of at least 150 characters">
    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.
  </Accordion>
</AccordionGroup>

***

## Feed validation

Run the Asva audit API to check your catalog, feed format, and schema in one call:

```bash theme={null}
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](https://asva-ai.com/tools/acp-validator)
* [ ] JSON-LD `Product` schema is present on all product pages

***

## Related

* [UCP Product Catalog](/ucp/product-catalog)
* [AEO + GEO](/attribution/aeo-geo)
* [Manifest API](/api-reference/manifest)
* [Readiness Score tool](https://asva-ai.com/tools/readiness)
