What an AI agent sees when it comes to buy in your store
An agent never looks at your page, it receives a record. Field by field: what has to be in that record before a purchase can close, three silent failures worse than a missing field, and the standards decision (ACP, UCP, the Shopify agent flow) that nobody will make for you.
An AI agent arriving to buy in your store usually receives this much: a product name, one amount, a word about availability and an image. To finish the order it also needs a stable identifier, a price carrying its currency and tax status, availability with a timestamp, and explicit delivery and return terms. This piece is about reading your own product the way a machine reads it, field by field, and about the standards decision that lands on your desk as a result. It assumes you know what an agent purchase is; if not, start with preparing your store for agentic commerce.
Key takeaways
- An agent reads a record, not a storefront. Before you pick a protocol, check that record for seven fields: a stable identifier, price with currency and tax status, availability with a timestamp, selling unit and multiple, machine-distinguishable variants, delivery cost and date, and return terms.
- A conflict between sources does more damage than an empty field. The feed says one thing, the page another, and the mismatch surfaces at payment, so your customer meets the failure first and you meet it later in cancelled orders.
- The protocol contest is real and it asks something of you: ACP comes from Stripe and OpenAI under the Apache 2.0 licence, Google announced UCP on 11 January 2026 with partners, and Shopify documents its own agent flow built on UCP (checked 2026-08-19).
- Clean product records, a single source of truth for price and stock, and return rules stored as data all pay off under every one of those standards. Do that work first and let the protocol decision wait.
Input: a record, not a product page
Open your best selling product and cover everything except the text. Photography, layout, review stars, the discount banner, the buy button: none of that is input for an agent. The input is a set of key and value pairs pulled from your feed, your structured data or your API, plus whatever survives being scraped from HTML. When the price in that set reads "from 39", the selling unit is absent and availability says "only a few left", the agent holds a description of mood and no transaction parameters.

Test it on your own catalog rather than taking my word for it.
Field by field: where the purchase breaks
Seven fields, ordered by when an agent actually needs them. For each one: what the agent does with it, and what stops being possible when it is missing. Walk the table with one real product open beside you, ideally one with variants and a minimum order quantity.
| Field | What the agent does with it | What becomes impossible without it |
|---|---|---|
| Stable identifier (SKU, GTIN) | Recognises that your variant and the same variant elsewhere describe one thing | Returning to the same item an hour later. An identifier regenerated on every render loses the cart between comparison and checkout |
| Price with currency and tax status | Compares amounts across stores and totals the order | Telling the customer what they will pay. An amount without a currency code is a number, and a net price with no flag understates the bill by the whole tax rate |
| Availability with a timestamp | Decides whether starting a checkout is worth it at all | Separating "in stock now" from "in stock last night". The order goes in and comes back to the customer as cancelled |
| Selling unit and multiple | Turns "two kilograms" or "a case" into a quantity | Ordering the right amount. The agent buys one unit where the minimum is a case of twelve, and the order lands in your exceptions queue |
| Machine-distinguishable variants | Points at one specific variant instead of a product family | Choosing a version when the difference lives only in the photo or in the phrase "variant B with the longer cable". The agent takes the first row or walks away |
| Delivery cost and date for an address | Completes the total and weighs it against the offer next to yours | Showing the full cost before purchase. With "shipping calculated at checkout" the agent has to guess, and guessing usually ends in abandonment |
| Return terms as a field, not a clause in your policy page | Checks the condition the customer set in their instruction | Honouring "buy me this with free returns". A missing field reads exactly like "we do not offer free returns" |
The order of fields follows the four steps Shopify documents for agents: negotiate and authenticate, discover products, build carts and convert to checkout, monitor orders (shopify.dev/docs/agents, checked 2026-08-19). The field list itself is our operational checklist and is not a requirement of any protocol.
Two rows look like housekeeping and decide the most. Selling unit and multiple determine whether an agent order flows into your normal process or into the exceptions queue that somebody clears by hand. Return terms decide something even less visible: an agent holding a condition from its customer drops the offers where it cannot confirm that condition. Silence in your data functions as a refusal, even when your actual returns policy is more generous than your competitors offer. For the schema.org side of these facts, see our piece on structured data for AI.
Three silent failures, worse than an empty field
A missing field announces itself. The three cases below never reach a report, because the data is formally present and quietly wrong.
The feed says one thing, the page says another
An agent rarely reads a single source. Price comes from the feed pulled overnight, attributes from structured data, shipping from an API, the rest from HTML. When those sources drift apart, the agent sees no conflict, because nothing tells it to distrust itself. It simply keeps the value it received first and presents that to the customer as your offer. The mismatch surfaces at payment, at the worst possible moment, and looks to the buyer like your mistake, which is what it is.
A measurement you can run today: take 200 random SKUs, pull price, availability, selling unit and delivery cost in parallel from the feed and from the page, then count the rows where all four agree across both sources. That share is your practical ceiling on orders an agent can close without a surprise. I know of no public benchmark for this ratio and will not pretend otherwise; the number earns its value inside your own monthly time series.
Stock levels from last night
Availability ages faster than any other field in a catalog. A feed refreshed once a day means that during your busiest hours an agent decides on data from many hours earlier, and on thin-stock items that gap separates a sale from a cancellation. Check two things: how often the stock number refreshes in the source agents actually read, and whether your checkout revalidates stock at the moment the order is placed.
When the second answer is no, the first one stops mattering.
A price that exists only in context
This is the interesting one, because it mostly bites well run stores. Contract pricing behind a login, cart-level discounts, free shipping thresholds, bundle promotions, a tax rate that depends on the destination country: an agent working without a customer session holds none of that context.
It sees your list price and builds its comparison on that alone. In wholesale the effect inverts your intent, because the real offer for a returning buyer beats the one the agent quoted, and you lose the comparison to your own shelf price. Exposing a price list behind agent authentication fixes it, once you decide who that agent is allowed to be.
A repair order that holds up in practice: kill the contradictions between sources, then shorten the age of your availability data, and only then fill in the missing fields. The reverse order feels faster because empty fields are easy to count, yet a store with complete contradictory data closes fewer orders than a store with incomplete consistent data.
Protocol contest, read from the merchant seat
There is an open argument about how an agent talks to a store, and the companies on each side want different things. Below is what I could confirm at source on 19 August 2026, with no adoption figures, because nobody publishes them.
| Standard | Who is behind it | What it wants from your data and checkout | Status |
|---|---|---|---|
| ACP (Agentic Commerce Protocol) | Stripe and OpenAI; open source under the Apache 2.0 licence | An agent-initiated checkout flow and secure transfer of a payment credential. Integration over REST or MCP, with the Stripe Shared Payment Token as the first compatible payment method | Specification published, the mechanism for discovering participating merchants still in progress |
| UCP (Universal Commerce Protocol) | Google with partners including Shopify, Etsy, Wayfair, Target and Walmart; announced 11 January 2026 | A JSON manifest at /.well-known/ucp listing your capabilities, product data from your existing Merchant Center feed, native or embedded checkout. Transport over REST, MCP or A2A, payments through AP2 | Open, community-driven standard, live for retail, expanding into lodging and food |
| Shopify agent flow | Shopify, built on UCP | Your Shopify catalog plus a capability profile at a well-known URL, referenced on every UCP request. Carts, checkout and orders through MCP tools | Documented in four steps; trust tiers govern how much access an agent gets, and higher tiers allow it to complete checkout |
Sources for columns 2 to 4: agenticcommerce.dev, developers.google.com/merchant/ucp with the developers.googleblog.com post on UCP internals, and shopify.dev/docs/agents. All checked 2026-08-19. I do not name Shopify trust tiers here, because the documentation I read does not list their names.
One difference worth carrying into a legal review: ACP names its licence outright, while the UCP pages I checked describe an open, community-driven standard without naming a licence. A second difference shows up when you read them side by side. ACP concentrates on the transaction layer and deliberately leaves product data alone, whereas UCP reaches straight for the Merchant Center feed you already maintain. That combination works in your favour, since the shared part of the job is your data and the divergent part is a checkout adapter.
Some of this decision already belongs to your platform
Honestly, you have less room here than the word decision suggests. On closed SaaS your vendor picks the protocol and you learn about it from a changelog. Shopify has documented an agent flow on top of UCP, and that is the answer for every store on Shopify whether the merchant likes it or not. The trust tier that decides whether an agent only browses or completes a checkout is assigned by the platform to the agent, with no merchant in the loop.
Your leverage sits one layer down: in the quality of the data your platform exposes, and in whether your prices and stock can be read programmatically. That makes the arithmetic simpler than it looks. A platform choice turns out to be a protocol choice, so keep the question on the list when you choose the platform, rather than discovering it a year later.
Standard-agnostic work, which is why it goes first
The three items below pay off under ACP, under UCP and under whatever wins next. You do them once and they stop being strategy, becoming instead the foundation any adapter can sit on.
- One record per product. Identifier, selling unit, multiple and variant attributes live in one place, and feeds, pages and APIs read from it instead of keeping private copies with their own life cycles.
- One source of truth for price and stock. The amount in the feed, the amount on the page and the amount in the cart come from the same query. Customer, agent and warehouse then see the same number at the same hour.
- Return rules stored as data. Window in days, who pays for the parcel, exceptions per category. A policy page settles a legal dispute; a field settles the condition a customer gave an agent.
The cheapest home for all three is the layer that already generates your feeds, which is why we treat feed automation as work one level deeper than mapping columns per channel. We build platforms on the BEAM framework, where this data has a single home and keeping it fresh belongs to the Maintenance and Growth stage.
Small catalog and marketplace-only sales: the choice is not yours
A section for readers this article should not put to work. With a few dozen products, no variants, one tax rate, one shipping country and sales running entirely through Amazon, Allegro or Kaufland, your product data already lives in a format the marketplace dictates and the operator owns the checkout. The protocol decision is theirs, and your best investment stays the quality of the listings themselves.
If you run a store and channels together, first check whether your marketplace feed and your product page quote the same price and the same stock today, because that test costs an hour and settles whether protocols deserve any of your attention.
The threshold where this stops being theory is fairly concrete: direct sales large enough that a cancelled order hurts, plus variants, order minimums or contract pricing in play. At that point your data layer has become a sales layer.
One afternoon of diagnosis
The order I recommend: pull the feed and the page for two hundred SKUs, count agreement across the four fields, measure how old your availability data is, check whether checkout revalidates stock, and read the protocol specifications last. The first four steps run on your own data, and their result tells you whether the standards decision is even your most urgent problem this quarter. For the wider view of what happens to traffic when buying decisions move off your site, see our piece on GEO for eCommerce.
You can swap a protocol in a quarter. Messy product data outlives several of them.
Sources and date checked
All four addresses checked on 19 August 2026. Claims I could not find there are flagged in the text as unconfirmed.
- Agentic Commerce Protocol: agenticcommerce.dev (authorship by Stripe and OpenAI, Apache 2.0 licence, REST and MCP compatibility, Shared Payment Token, discovery mechanism in progress).
- Universal Commerce Protocol: developers.google.com/merchant/ucp (Merchant Center feed, native or embedded checkout, interoperability with AP2, A2A and MCP, expansion into new industries).
- UCP under the hood: developers.googleblog.com, post dated 11 January 2026 (announcement, partners, manifest at /.well-known/ucp, capability profiles).
- Shopify agent flow: shopify.dev/docs/agents (the four flow steps, trust tiers and access scope, catalogs, MCP tools for cart, checkout and orders).
FAQ
Do I need to implement ACP or UCP right now?
There is no single answer for every store, but there is an order. While your feed and your page disagree on price or stock, a protocol only delivers wrong data faster. The entry criteria are simple: direct sales that matter in revenue, data consistent across sources, and the ability to revalidate stock when the order is placed.
How do I find out what an agent really sees in my store?
Pull three things in parallel for the same 200 SKUs: the feed row, the structured data on the product page, and the API response if you have one. Compare price, currency, availability, selling unit and delivery cost. The rows where every source agrees are your real agent-ready assortment. The rest is a lottery.
Is correct structured data enough for an agent to buy?
For discovery and comparison, usually yes. For closing a purchase, no. Schema.org describes an offer, while buying requires operations: reserving stock, confirming the price, handling payment and reporting order status. That is why the agent protocols talk about checkout and payments and leave the descriptive layer to data you already publish.
I am on closed SaaS with no say over the protocol. What is left on my side?
The layer that decides the outcome anyway: complete and consistent product data, how often stock refreshes, explicit return terms, and whether your pricing can be read programmatically. Knowing your vendor roadmap helps too, since in practice a platform choice has become a protocol choice.
Can I support both standards without doing the work twice?
Largely yes, because the shared part is your data: one record per product, one source of truth for price and stock, explicit delivery and return terms. What differs is the transaction layer, meaning the checkout adapter and how the payment credential travels. With the data in order, adding a second adapter is an engineering task of known size rather than a rebuild.
Journal
Co-founder of Seedlight · eCommerce platforms, AI, SEO and GEO
Newsletter
The Journal, straight to your inbox
New articles and lessons from real builds, every now and then. No spam, unsubscribe with one click.