Skip to content

Caravanserai Research · Report 01

The Agent Readability Index · v1 · Fieldwork 31 August – 1 September 2026

We asked 1,165 shops a question only a machine can ask.

Every other number on this site belongs to somebody else — Adobe’s, Etsy’s, Forrester’s, Walmart’s. This one is ours. We fetched 1,165 independent local shops the way an AI agent would, obeyed every robots.txt, and recorded what came back. The hypotheses were registered and dated before the run, the findings are published as data, and the sampling frame can be rebuilt from a public API.

Findings in brief

H1

Agent-readability is a step on platform, not a gradient.

Confirmed

Shopify 92.7% against a next-best of 0.3%.

H2

The more a merchant spent on the website, the less an agent sees.

Directional

52 of 316 fetches that returned no price (16.5%) had one behind JavaScript.

H3

Nobody publishes a promise a machine can act on.

Confirmed at the limit

0% of 946, upper bound 0.4%.

Headline finding · H3

0%

of 946 readable shops publish a delivery promise a machine can act on

Not few. None. The 95% confidence interval tops out at 0.4% — this is a floor with a bound on it, not a small number rounded down.

Meanwhile 48.5% of them say they deliver, in words, on the page. A human reads that sentence and knows what it means. An agent reads it and has nothing to book against — no address, no window, no commitment it could hold anyone to. The gap between those two facts is the whole of what we are building.

Finding one · H1 · Confirmed

One company flipped a switch, and sorted the market into legible and invisible.

Shopify turned agentic storefronts on by default in March. The result is not a gradient across platforms, it is a step. 92.7% of Shopify shops publish a machine-readable catalogue. On every other platform we measured, the highest figure is 0.3%. None of these merchants made a decision about any of this.

Platform

Shops

Catalogue

Price

Custom / unknown

307

0.3%

2.9%

Square

217

0%

0.9%

Shopify

123

92.7%

36.6%

WooCommerce

88

0%

4.5%

WordPress

79

0%

1.3%

Wix

61

0%

8.2%

Toast *

28

0%

0%

Lightspeed *

23

0%

4.3%

Catalogue = a machine-readable product feed at /products.json. Price = a price in structured data an agent can parse without guessing. Platforms with fewer than 20 shops in the sample are not shown; those marked * have fewer than 30 and are reported with their n rather than used to carry a claim.

Scope, added 6 September 2026 — the Index measures what a shop publishes on its own website. Square’s ChatGPT app and Claude plugin, live since 1 July 2026 for US food-and-beverage sellers with an active Square Online Ordering profile, route orders into Square Online Ordering and the point of sale without passing through the shop’s website. That channel is outside this measurement, and the Square figures above are website figures, measured 31 August – 1 September 2026.

Finding two · H2 · Directional

The better the website looks, the less of it an agent can see.

A Shopify product page puts its price in the HTML the server sends: 87% of them. A custom-built site, the kind a merchant pays a studio for, largely does not — the price arrives later, assembled by JavaScript in the visitor’s browser. A person sees no difference. An agent that does not run scripts sees an empty page.

The pre-registration says a plain fetch can only prove a price is absent from the server response, never that JavaScript would have supplied one — so it commits us to a second pass. We took 316 shops where a plain fetch found no price and opened each one in a real browser. 52 of them — 16.5% — had a price all along, visible only once their JavaScript had run. Those shops are not missing a price. They are publishing one an agent cannot read.

Ranked by how often a price was hiding: Custom / unknown 20.7%, Square 19.0%, WooCommerce 16.1%, Wix 8.5%. Hand-built sites at the top and the hosted page-builder at the bottom is the ordering H2 predicted. WooCommerce sits out of place in the middle, which is why the verdict above reads directional rather than confirmed.

Scope — the render pass covers the 316 shops whose product page was reachable and whose server response carried no price. Rates are within that subset and are never merged into the fetch-only figures above, per the analysis plan registered before the run.

Exploratory · not registered in advance

Almost nobody is keeping the agents out.

We expected to find shops refusing AI crawlers. They are not. 40 of the 1,030 shops whose robots.txt resolved — 3.9% — disallow even one of the five named agents. Posture is scored over every shop that answered for its robots.txt rather than over the analysable set, because reading a posture needs nothing else, and because the analysable set omits the shops that disallowed us — the ones most likely to be closed to the named agents too.

ClaudeBot

3.9% blocked

GPTBot

3.7% blocked

Google-Extended

3.7% blocked

PerplexityBot

1.4% blocked

OAI-SearchBot

1.4% blocked

This is better news than refusal would have been. These shops have not decided to be invisible. They are invisible by default, on platforms that made the decision for them. Nothing here needs anyone’s mind changed.

How this was done.

The sampling frame is OpenStreetMap, queried through the public Overpass API, so anybody can re-run the query and get our sample back. A study whose frame cannot be reproduced is an anecdote with a percentage sign on it.

The hypotheses, measures, analysis plan and falsification conditions were written down and dated on 31 August, before the run started, and are published unchanged.

Read the pre-registration
Frame
6,989 independent shops with a website, across 5 US metros and 7 categories. Chains excluded.
Sample
1,165 drawn, stratified by category and capped, so a finding about pharmacies is not swamped by restaurants. Seeded and reproducible.
Probe
robots.txt, the homepage, at most one product page, and four discovery endpoints. Identified honestly as CaravanseraiBot with a contact URL. One request at a time per shop.
Statistics
Wilson binomial intervals at 95% on every proportion. No point estimate is reported without one. Cells under n = 30 carry their n and do not headline a claim.
Denominators
Each measure is scored over the shops that could answer it. Readability measures use the 946 analysable shops. Robots posture uses the 1,030 whose robots.txt resolved, which is the wider set: a posture needs nothing but robots.txt, and scoring it over the analysable set would omit the shops that disallowed us and bias the answer toward openness.
Ethics
We obeyed every robots.txt, including when it cost us a data point. Where a shop blocked us, that is recorded as a finding, not worked around.
Naming
Aggregate only. We know which shops these are and we are not going to publish that.

What we could not read, and why.

81.2% of the sample produced usable data. A study that hides its denominator is not a study. Ours, in full:

ok

946 · 81.2%

robots-unreachable

96 · 8.2%

http-404

46 · 3.9%

access-denied

23 · 2%

robots-blocked

16 · 1.4%

robots-error

16 · 1.4%

http-403

11 · 0.9%

unreachable

6 · 0.5%

http-400

2 · 0.2%

http-500

1 · 0.1%

http-453

1 · 0.1%

http-502

1 · 0.1%

Cite this.

The Index is a standing measurement, not a one-off. The frame is fixed and the draw is seeded, so a later edition measures the same market rather than a new one — and this edition keeps this URL when the next one lands.

Citation

Caravanserai. "The Agent Readability Index, v1."
Fieldwork 31 August – 1 September 2026.
n = 1,165 probed, 946 analysable.
https://caravanserai.co/index-v1/

Aggregate findings are published as machine-readable JSON under CC BY 4.0, and this page carries schema.org Dataset markup. A study about what machines can read should not need a human to transcribe it.