What the Agent Can't See on Your Best Product Page

I audited the [Universal Commerce Protocol](https://ucp.dev) feeds of six apparel merchants earlier this year. Every merchant returns the same field set: title, price, options, tags, one image, a description of varying length. The protocol is clean and the data contract is consistent. And across all eight merchants, a shopping agent working from that feed alone would have almost no basis for making a real recommendation.

The gap is real, and it is concrete. One product: what a shopper reads on the page, what survives into the agent feed, and what a [brand-truth artifact](/blog/brand-truth-layer-product-feeds-not-enough) adds to close the distance between them.

The product I chose is an outerwear jacket from a British footwear and accessories brand. Its catalog record produced the highest description density of [the six apparel merchants in the audit](/blog/shopify-store-invisible-to-ai-agents): 828 characters, real compare-at pricing, structured Colour and Size options. The richest data point available in the apparel set, which makes the gap demonstration more persuasive. If the densest catalog listing still leaves this much reasoning inaccessible, the median one has considerably further to go.

## What the human reads

What follows is representative of what a product listing for a jacket like this one typically carries: the category of reasoning a merchant authors for human shoppers, as a contrast class to what the agent feed actually receives. The walkthrough is illustrative rather than a verbatim account of any live page.

A shopper landing on this kind of page reads a layered argument for the purchase. The opening copy positions the jacket within the brand's aesthetic: a design language rooted in craft, a particular relationship between function and formality, a reason the piece was made rather than just what it is made of. For a brand whose identity depends on considered design, that framing does real persuasive work.

Below the headline, the product section explains fit. It describes whether the cut runs slim or relaxed, how the shoulders are tailored, whether the length works tucked or untucked, and which size to choose if a shopper is between two. A 180-pound buyer with a 40-inch chest and broad shoulders gets specific guidance. That guidance reduces returns. It also converts undecided shoppers who would otherwise leave the page.

The fabric section does something similar for material. It names the cloth, explains why it was chosen over alternatives, tells the care story (dry clean or machine wash, how the piece ages), and connects the material choice to occasion. A waterproofed wool blend is appropriate for country walks and smarter city wear; a synthetic shell is for weather performance only. This is the brand telling its customer how to use the product.

Occasion and styling follow. The page suggests what to wear it with, which of the brand's other pieces it complements, and what kind of event or season it fits. These are substitution and cross-sell signals dressed as editorial content.

Finally, returns and care. A specific window, the exact conditions, what happens to international orders. This is policy, stated in plain language.

The shopper finishes the page knowing the fit, the fabric, the occasion, the care requirements, the returns terms, and how the piece sits within the brand's wider range. That is a rich decision-support surface. It took a copywriter and probably a product manager to produce.

## What the agent feed carries

When a shopping assistant queries the same brand through the Universal Commerce Protocol, it receives something much thinner.

The table below shows the actual field set from the audit, using the Oliver Sweeney jacket entry as the spine:

| Field | Value (representative) |
|---|---|
| `title` | Waterproof Quilted Jacket |
| `price_range` | $192 |
| `list_price_range` (compare-at) | $256 |
| `options` | Colour (Brown, Khaki, Navy), Size (S, M, L, XL, XXL) |
| `description.html` length | 828 chars |
| `tags` (sample) | `Colour_Brown`, `type_Jacket`, `group_Outerwear` |
| `categories` | Outerwear (Shopify taxonomy) |
| `media` | 1 image |
| Reviews / ratings | None |
| Structured material attribute | None |
| Fit guidance | None (prose only, if at all) |
| Returns policy | None |
| Substitution logic | None |

The 828-character description is the best in the apparel audit: still about the length of two short paragraphs, and the product reasoning inside it is written for a human to read. A shopping agent has to parse natural language to extract anything useful, and that extraction is lossy at every seam. Fit guidance has no structured counterpart in the schema, and material information lives in the description prose, unqueryable. Policy simply does not arrive.

What does hold up: compare-at pricing ($256 down to $192), better than most of the apparel set. Colour and Size as structured options, so a variant lookup by color works cleanly. Tag conventions in a `Key_Value` pattern that is at least machine-readable, even if the vocabulary is thin.

But the agent cannot answer: "Does this fit a broad-shouldered person who usually takes a medium?" It cannot answer: "If this is out of stock in Navy medium, what should I recommend instead?" It cannot tell a shopper what the returns window is, whether dry cleaning is required, or which occasions the brand intended this piece for. Those are the questions that turn a reachable listing into a sold one.

The feed makes the jacket visible, but it does not make it recommendable.

## The brand-truth artifact

The artifact below is an illustrative example of what Sartorial encodes for a product like this: machine-readable YAML, versioned like code, keyed to the product handle, covering fit, substitution, policy, routing, and voice. It is deliberately compact — a few dozen lines an agent can parse without guesswork.

```yaml
# Sartorial brand-truth artifact — illustrative example
# Product: Waterproof Quilted Jacket · v1.0.0 · schema brand-truth/v1

product_handle: waterproof-quilted-jacket

fit:
cut: relaxed-through-chest, tapered-at-waist
sizing_notes: "True to size; broad shoulders size up one. Room to layer over a mid-weight knit; hits mid-hip."
binding_constraint: chest measurement

substitution:
if_oos:
- recommend: quilted-overshirt # same fit family, lighter — transitional weather
- recommend: waxed-field-jacket # equivalent occasion, slightly dressier
never_substitute: technical-shell-jacket # different occasion + register

policy:
returns_window_days: 30
returns_conditions: "Unworn, tags attached. No returns on personalised items."
care: "Machine wash 30C, reshape, no tumble dry; re-proof after repeated washing."
sustainability_verified: ["Recycled lining fabric"]

routing:
surface_for: ["smart casual outerwear", "country walk jacket", "autumn/winter layering", "gift for him"]
do_not_surface_for: ["technical hiking jacket", "cycling jacket", "formal overcoat"]
price_position: "Mid-premium; for craft-led buyers above $150."

voice:
tone: considered, craft-led, understated British
describe_as: "A properly waterproofed quilted jacket built to earn its keep over years, not seasons."
avoid: ["game-changer", "luxury", "premium"]
prefer: ["well-made", "considered", "built to last"]
```

A few dozen lines. A shopping agent consuming this artifact can answer every question the catalog entry cannot: fit guidance is structured and queryable, substitution logic is explicit with the reasoning attached, returns terms and care instructions are present, and sustainability claims are flagged where verified. Shopper intents are mapped bidirectionally. Brand voice is encoded in plain language, followable without interpretation.

The artifact travels through whatever channel the agent speaks: Universal Commerce Protocol, any successor format, a direct API call. Because it is format-agnostic by construction, it survives protocol transitions without requiring reauthoring when the underlying transport changes. Versioning allows merchants to update the artifact without disrupting downstream integrations; a change to the returns window becomes an increment in the version identifier rather than a stale product description that assistants continue citing indefinitely.

## The arithmetic, unpacked

The full UCP feed for this jacket, all fields included, is approximately 1,200 characters of structured data. The brand-truth artifact adds only a compact block of authored reasoning on top of that. That contribution, smaller in volume than the feed itself, is what transforms an agent that can locate the jacket into one that can recommend it convincingly.

The feed makes the product reachable; the brand-truth artifact makes it recommendable, substitutable, and explainable in the brand's own terms. These are categorically different functions. Platforms have addressed the first one. The second has no equivalent solution at scale, which is the gap Sartorial is building toward closing.

Consider the progression. A shopping agent working from the feed alone can answer: "Does this jacket exist in Navy?" Yes, and at $192 with a compare-at of $256. That is the full reach of the structured data. Now add the artifact. "Does this fit someone who usually buys a medium but has broad shoulders?" Size up one. "If Navy medium is out of stock, what should I offer instead?" The quilted overshirt, same fit family, not the technical shell which is a different occasion register. "What does the brand want me to call this jacket?" Considered, well-made, built to last: preferred language, encoded, followable without interpretation. These are questions the feed cannot touch, answered from a compact block of authored reasoning. The agent's capability doesn't improve incrementally; it crosses a threshold.

A human copywriter produced the PDP that the shopper reads. That reasoning already exists. What Sartorial does is take it and encode it in the structured form an agent can consume. The merchant does not produce the artifact from scratch; they author the reasoning once, in a machine-readable format, and Sartorial manages versioning, delivery, and protocol compatibility.

The worked example here is one jacket. Multiply it by a catalog.

---

Sartorial is running a limited set of merchant audits as part of early access. Feed data pulled live, gaps mapped against what the brand actually publishes on the PDP, and an illustrative brand-truth artifact for one of your products. Same shape as what you read here. [Request early access.](/#early-access)