# UCP profile

Universal Commerce Protocol discovery for agentic shopping.

**[Commerce](/docs/commerce)** · checked once per host (item type `ucp`) · 4 checks that can fail it

The profile is how an agent discovers that a business supports agentic commerce and how to connect to it. A profile that declares no usable capability or no connectable transport is discoverable and useless, which is the shape we look for.

## Adoption

**Platform default** (L3) — the entire measurable footprint comes from a single platform enabling it by default

A major platform ships it by default or in one click, so its footprint is measurable at web scale. Direction of travel: ▲ rising, as of 2026-08-22.

Shopify turned UCP on by default for every store (Jun 17, 2026). A Lumar probe of 12 hosts on 2026-08-22 found four live profiles, all Shopify-hosted; Target, Walmart, Wayfair, Etsy and Nike serve no profile at all.

| Adopter | Depth | Evidence |
|---|---|---|
| Shopify (all stores) | default-on | [shopify.engineering](https://shopify.engineering/UCP) |
| Google (AI Mode and Gemini checkout, Merchant Center) | production | [blog.google](https://blog.google/company-news/inside-google/message-ceo/nrf-2026-remarks/) |
| Fenty Beauty, Steve Madden, Allbirds, Gymshark (verified by probe) | production | [shopify.engineering](https://shopify.engineering/UCP) |
| Etsy, Walmart, Target, Wayfair (co-developers) | announced | [nrf.com](https://nrf.com/blog/google-deepens-ai-investments-that-impact-retail) |
| Salesforce, BigCommerce | announced | [bigcommerce.com](https://www.bigcommerce.com/blog/universal-commerce-protocol/) |

## What we check

Absence is never a finding: every check below runs only once `ucpPresent` is true, so a site that has not
adopted this is not assessed on it and appears in no report.

| Check | Kind | Raises | On whose authority |
|---|---|---|---|
| `ucpInvalidDocument` | high severity | conformance, usability | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, specification overview §Profile Structure) |
| `ucpMissingRequiredRegistries` | high severity | conformance, usability | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, ucp.json $defs.business_schema) |
| `ucpMissingTransports` | high severity | usability | Lumar readiness profile |
| `ucpInvalidVersion` | medium severity | conformance, usability | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, ucp.json $defs.version + $defs.base) |
| `ucpMissingCapabilities` | informational | nothing | specification (Universal Commerce Protocol (ucp.dev) v2026-04-08, ucp.json $defs.business_schema) |

## Examples

These are the fixtures the test suite runs through the real collector, not snippets written for a document.

- Correct: `test/e2e/test-pages/commerce/correct.ucp.json`
- Present but wrong: `test/e2e/test-pages/commerce/issues.ucp.json`

## Specifications

| Document | Revision | Kind |
|---|---|---|
| [Universal Commerce Protocol](https://ucp.dev) | living document | guidance |
| [UCP profile schema (pinned tag; cite ucp.json, not the later profile.json on main)](https://github.com/Universal-Commerce-Protocol/ucp/tree/release/2026-04-08/source/schemas) | v2026-04-08 | specification |

Last re-read against the published documents: 2026-08-12.

**On pinning it.** Two traps at this tag. `profile.json` is a later addition on `main` and does not exist at the tag, so cite `ucp.json`; and the key set is `signing_keys` here, renamed to `keys` on `main` afterwards.
