What AI shopping agents read first on your Shopify store — we checked 42 of them
Published September 2, 2026 by Adot Technologies Inc, the team behind Arvio. We asked 43 live Shopify storefronts for /agents.md on September 2, 2026; 42 answered, and every file comparison below is over those 42. The /.well-known/ucp and product-page counts are over all 43, read on August 26. The robots.txt counts come from a third reading, on August 31, across a wider set of 60 storefronts that contains these 43.
Almost everything published about agents.md explains the format: here is where the file goes, here are the sections it should contain, here is how an agent is supposed to read it. Very little of it says what the file looks like on a store that isn't a demo.
So we fetched it. Sixty storefronts drawn at random from a public list, of which the 43 carrying at least ten products are the ones we asked; the agents.md reads all happened on one afternoon, the other two readings on two earlier days.
The file is identical on every store. Your products are not
What an agent actually gets back is your product data. Arvio reads that layer on your live store, shows you where it comes up empty, and drafts the fill for your approval.
Read your own copy first
You don't need a terminal for this. Type your own domain followed by /agents.md into the browser's address bar — yourstore.com/agents.md — and press enter. The file is plain text, so the browser prints it straight onto the page:

Our own demo store, read on September 2, 2026. The headings are the lines that start with #.
If you get a page of text back, compare its headings against this list. Forty-one of our 42 files had exactly these eleven, in exactly this order:
# Agent Instructions — <Store Name>
## For Personal Shopping Assistants and Agents Acting On Behalf of a User
## Commerce Protocol (UCP)
### Typical Agent Flow
### Supported UCP Versions
### Important Rules
## Read-Only Browsing (No Authentication Required)
### Product Data
### Store Metadata
## Store Policies
## Platform
The forty-second had ten of them. It was missing ## Store Policies, which is the section built from the policy pages a merchant has filled in.
If your headings match, you are shipping the generated file, same as everyone in this sample. There is nothing to fix. What it tells you is where to go looking for the differences between your store and the next one — somewhere other than this file.
If nothing comes back — a 404, or your theme's "page not found" page — that is a case we did not see, and we can't tell you how to fix it from this data. The one store out of 43 that didn't give us the file didn't answer the request at all, which is a different thing from serving a 404. No store in this sample had added the file by hand, so we have no example of anyone doing it. The advice below doesn't change either way: the file is not where your store competes.
All 42 were the same document
We normalised each file by replacing the store's own name and domain with placeholders, then compared them:
| Measurement | Result |
|---|---|
Storefronts asked for /agents.md |
43 |
| Returned the file | 42 |
| Distinct heading sequences among those 42 | 2 |
| Non-empty lines byte-identical across all 42 files | 52 of an average 61.6 — 84.4% |
| Lines that differ, per store | between 4 and 10 |
| Similarity to the most common version | median 0.988, lowest 0.944 |
| File size | 4,062 to 4,475 bytes |
Forty of the 41 comparisons scored 0.95 or above. There was no store in this sample whose file had been rewritten, extended, or trimmed by hand.
And the four-to-ten lines that do differ are worth listing, because they are the entire merchant-specific content of the document:
- the title line,
# Agent Instructions — <Store Name> - one sentence describing the store as "'s online store at "
- two lines carrying the store's own discovery and MCP endpoint URLs
- the policy links under
## Store Policies, in whatever language the store publishes them
Every one of those is derived from a setting. Nothing in the file was typed by a merchant thinking about an agent.
What the file does not say about your store
Here is ### Product Data and ### Store Metadata, verbatim, from one of the 42:
### Product Data
- Browse all products: `GET /collections/all`
- Product page: `GET /products/{handle}`
- Product JSON: `GET /products/{handle}.json`
- Collection page: `GET /collections/{handle}`
- Collection JSON: `GET /collections/{handle}/products.json`
- Search: `GET /search?q={query}&type=product`
### Store Metadata
- Sitemap: `GET /sitemap.xml`
- Agent discovery: this document (`/agents.md`) is the canonical agent-facing description of the store.
Two headings and eight lines. The file tells an agent where to look, then stops. What you sell, how fast you ship, what is out of stock this week — none of that is in here.
An agent that reads your agents.md and stops there knows six URL patterns and your privacy policy link. Everything that would make it recommend your store over the next one is behind those six URLs — in the product data itself.
Which is the useful conclusion to draw from a sample where every file is identical: the file is not the surface you compete on. The catalogue it points at is. We measured that layer separately in what a Shopify store already serves an AI agent.
The endpoints behind it all answered
The same 43 storefronts, read the week before:
| Endpoint or field | Count |
|---|---|
/.well-known/ucp returned a merchant profile |
43 of 43 |
| Distinct capability sets across those 43 | 1 |
| Capabilities advertised, per store | 8, the same eight everywhere |
| Version reported in the UCP profile | 2026-04-08, on all 43 |
| Payment methods including Shop Pay | 35 of 43 |
| Payment methods without it | 8 of 43 |
robots.txt naming the agent endpoints |
38 of 43 |
One capability set across 43 unrelated stores is the same finding as one heading sequence across 42 files: this is platform default, not configuration. Seven of the eight capabilities are the protocol's own, and they are named as such in the profile: dev.ucp.shopping.catalog.search, dev.ucp.shopping.catalog.lookup, dev.ucp.shopping.cart, dev.ucp.shopping.checkout, dev.ucp.shopping.discount, dev.ucp.shopping.fulfillment and dev.ucp.shopping.order. The eighth sits in Shopify's own namespace: dev.shopify.catalog.
The version number is worth a caveat, because it moves. Those 43 profiles all reported 2026-04-08 on the day we read them, while the agents.md file on the same stores lists three versions under ### Supported UCP Versions and marks 2026-08-25 as the latest stable. Our own demo store, read a week later on September 2, reports 2026-08-25 in its profile. We did not re-read the 43, so we cannot tell you whether they moved too — only that 2026-04-08 in that table is a reading from August 26, not a property of the platform. Either way there is nothing here for a merchant to set: no store in this sample chose any of it, and none of it appears anywhere in the admin.
The payment line is the only one in that table that varies. Eight of the 43 advertise a payment set with no Shop Pay in it — while the same store's agents.md, under ## For Personal Shopping Assistants and Agents Acting On Behalf of a User, tells the agent to expect "Buyer-approved checkout via Shop Pay (no card-handling on the agent's part)". That line is in all 42 files, word for word. Worth a look if you care about agent-initiated purchases — it is Settings → Payments in your Shopify admin, the same list a human checkout draws from. We did not test what an agent does when it hits that combination.
Five stores had no agent lines in robots.txt at all
Separately, on August 31, 2026, we requested robots.txt from a wider set of 60 storefronts. Fifty-nine answered. Fifty-four carried the agent-related lines that come with the platform default. Five did not.
All fifty-four files that carried the agent lines were exactly 116 lines long. Not close to it — 116 on every one of them. The five without were the only files in the set that were any other length: four longer, at 202, 188, 176 and 167 lines, and one much shorter, at 22.
Those five are the same five the table above counts as not naming the agent endpoints: all five sit inside the 43, and 38 of 43 is that set minus exactly these stores.
What produced them we did not measure. A line count tells us a file is not the default one and nothing more, and that holds for the 22-line file exactly as much as for the four long ones. The reading we would bet on for the long four is that a customised robots.txt replaces the default instead of extending it, so anything the platform added afterwards never arrived — but that is an inference from five files, not something we tested. The check costs five seconds either way, and it is another address in the browser: yourstore.com/robots.txt. On a default Shopify storefront the agent lines are the first thing in the file:

The same demo store. Those three # lines — agents.md, the UCP discovery URL, the UCP/MCP endpoint — are what the 54 default files all carried.
If you don't see them at the top, press ⌘F (Ctrl+F on Windows) and search the page for agent. In this sample, every file that had no match was also a file that wasn't the default length — so no matches is a fair sign that your robots.txt has been hand-edited at some point.
What an agent actually gets when it follows the links
We also read one product page per store, in full. Of the 43:
- 41 returned a product page and carried
ProductJSON-LD on it - 40 of those carried an
Offerblock with it - 14 carried a
BreadcrumbList; 27 did not
The platform puts the structured data there. The category context is mostly missing: breadcrumbs are what tell a machine where a product sits in your catalogue, and two out of three stores here ship the product page without them. If you want the mechanics of that layer, we wrote them up in Shopify schema markup, and the checks belong in a product page audit.
The document is boilerplate. The catalogue behind it is yours
That is the only part of this you can change, and it is a per-product job. Arvio does the reading and the drafting; you keep the approval and the undo.
What to do with this
- Don't spend an afternoon writing an
agents.md. In this sample nobody had, the generated one is present and coherent, and it is not the file an agent forms an opinion from. - Check
robots.txtif yours was ever hand-edited. It is the one file in this survey that was not identical everywhere, and the one where being different costs you something. - Check whether Shop Pay is in your payment set (Settings → Payments), because that is the one field in the agent-facing profile that varied between stores.
- Fill in your policy pages (Settings → Policies).
## Store Policiesis the only section of the file whose content comes from something a merchant typed, and it is also the only section that was missing from any file here — one store of the 42 didn't have it. - Put the work into the product data, because that is where the six URLs in
agents.mdall point: titles that name the thing, descriptions that survive being read without the page around them, a product type on every item, and collections a breadcrumb can actually point at.
Point five is the one that takes real time. An agent reading your catalogue sees the fields; your theme never reaches it. A two-word description gives an agent nothing to repeat back to a shopper, and no setting fixes that one — it is a per-product problem, repeated across the whole catalogue.
That last point is the work we build for. Arvio is an AI store agent that goes through a catalogue product by product, does the editing, and shows you each change before it lands. The free Arvio store audit reads a storefront across six stages and prints each finding with the measurement under it. On our own 69-product demo store it returned findings like "7 distinct category spellings across 69 products | 19 products with no category at all". It reads the same public surface every request in this post used, with the same limits: no admin, no login, nothing written.
How this was measured
Sampling frame. Merchants who posted their own storefront URL on the Shopify Community "Store Feedback" board — 720 topics read, 474 candidate hostnames, 244 dropped because they no longer serve a catalogue, leaving a frame of 230 live storefronts. Six reasons account for 236 of those 244: 118 raised a DNS or connection error, 56 returned 404, 31 returned HTTP 402, 18 were not Shopify JSON or were password-protected, 9 returned 401 and 4 returned 409. The other 8 were three 403s, two 308s, a 500, a 429 and one dropped connection. From that frame, random.Random(20260826).sample(stores, 60) drew 60, and the 43 with at least 10 products are the ones read here.
Whether it looks like you. Stores that ask a public board for feedback skew newer and smaller; the median catalogue in this sample is 130 products, ranging from 10 to 5,000. The larger bias is survivorship — more than half the storefronts ever posted to that board are no longer serving a catalogue, and this sample is drawn from the ones still standing. Of the 244 we dropped, 118 had stopped resolving altogether, and another 31 still answered, with HTTP 402 — "payment required" — which is a storefront that exists but is no longer being paid for. Everything here came from endpoints any browser can fetch.
Store names withheld. These merchants posted their storefronts asking for design feedback. That is not consent to appear in a vendor's post as an example, so the counts carry no domains.
Dates. agents.md bodies were fetched on September 2, 2026. The UCP profiles and product pages were read on August 26, 2026, and robots.txt on August 31, 2026, on a wider set of 60. Those are three different readings on three different days; a store could have changed in between.
How "identical" was computed, and what it cannot tell you. Each file had its store name and domain replaced with placeholders before comparison — otherwise every file differs and the comparison says nothing. The 84.4% is the count of non-empty lines present byte-for-byte in all 42 files, divided by the average non-empty line count of a file; blank lines are excluded from both halves. Anyone with the same 42 files gets the same number from that definition; we are not publishing the files themselves, for the reason in the paragraph above. The similarity figure is Python's difflib.SequenceMatcher ratio against the most common version. What none of it settles: whether agents.md can be replaced or edited on a Shopify store — only that in this sample no one had. Every request here was a GET; we sent nothing to a store's MCP endpoint. And a uniform file across 42 storefronts is evidence about the platform, not about whether agents are reading any of it.
FAQ
What is agents.md?
A Markdown file at the root of a website that describes, for an AI agent rather than a human, what the site is and how to interact with it. On the Shopify storefronts in this sample it is served automatically and points the agent at the store's catalogue endpoints and its Universal Commerce Protocol profile.
Do I need to create an agents.md for my Shopify store?
Not in this sample. All 42 storefronts that answered were already serving one without their merchant having written it.
Can I edit my store's agents.md?
We did not test this, and nothing in the 42 files tells us. What we can say is that no store in this sample was serving an edited one.
What is in the file?
Eleven sections. Reading down the list above: the store's UCP discovery and MCP endpoint URLs, the supported protocol versions, rules for agents (checkout needs human approval, respect rate limits), the read-only browsing endpoints, the sitemap, the store's policy links, and a closing ## Platform section that tells the agent this is a Shopify store and recommends installing the Shop skill.
Does agents.md affect my Google rankings?
Nothing here speaks to that. It is a file addressed to agents, and this survey measured what it contains, not what any crawler does with it.
What is UCP?
The protocol the file points at. All 43 storefronts we checked served a UCP merchant profile at /.well-known/ucp advertising the same eight capabilities and the same 2026-04-08 version.
Why did only 42 of 43 stores return the file?
One storefront did not respond to the request at all on the day we ran it. We did not retry it or substitute another store.
How can I check my own store?
Three addresses typed into your browser — no terminal, and nothing to install. yourstore.com/agents.md for the file and its headings, yourstore.com/robots.txt for the agent lines (⌘F or Ctrl+F for agent if you don't see them at the top), and yourstore.com/.well-known/ucp for the profile an agent reads before either. The first two are plain text and the third is JSON, so the browser prints all three straight onto the page — the UCP one arrives as a single unbroken block, and the only thing you are looking for in it is that it arrives at all.
Arvio: AI Store Operator — install it on the Shopify App Store. The agent file is the same everywhere; the catalogue behind it is what differs.
