Agent Usability Rating
Methodology
How a storefront earns its AUR, check by check. Engine version 1.0.1.
What AUR measures
The Agent Usability Rating is a 0–100 score of how usable a website is for an AI shopping agent: can an agent acting for a shopper find the store and its products, read them reliably, trust who is selling and on what terms, and buy through a published protocol rather than by driving a browser. Higher is better; the levels below translate the number into words.
It is a passive HTTP scan. We fetch a handful of public pages and well-known documents and look at what comes back. We do not run a browser, execute JavaScript, log in, add anything to a cart, or attempt a purchase. A high AUR means the store is legible and transactable to agents in principle; it says nothing about whether a given agent will choose to recommend it.
The score
Every check is worth a fixed number of points and scores between zero and that weight (many checks award partial credit). The points add up to a raw score out of 100 across four pillars. Gates then cap the result, and a curve maps the raw score to the final AUR.
Pillars
| Pillar | Points |
|---|---|
| Access | 35 |
| Catalog legibility | 25 |
| Transactability | 25 |
| Trust & policy | 15 |
| Total | 100 |
Gates
A gate names the one thing a site must fix to rise above a ceiling. When a gate triggers, the final AUR cannot exceed its cap, whatever the raw score. Gates are shown on the report with the reason they triggered.
| Gate | Cap | Triggers when |
|---|---|---|
| Shopping agents are blocked | 29 | Four or more of the six shopping-agent user agents were blocked or challenged on the product page (or, with no product page found, every shopping-agent probe of the homepage was blocked). |
| No product structured data | 59 | No Product JSON-LD or microdata was found on the product page. |
| No agent-native way to buy | 79 | None of UCP, a UCP/Storefront MCP endpoint, or an attested ACP integration was found. |
The curve
The raw score is passed through a convex curve, AUR = 100 × (raw / 100)1.5, rounded to the nearest whole number. The last points are the hardest to earn: being open and legible gets a store into the sixties, but the nineties require an agent-native way to buy.
| Raw | AUR |
|---|---|
| 40 | 25 |
| 60 | 46 |
| 80 | 72 |
| 90 | 85 |
| 95 | 93 |
| 100 | 100 |
Levels
| Level | AUR | Meaning |
|---|---|---|
| Agent-Native | 95–100 | Open to agents, fully legible, and transactable through a published protocol. |
| Shoppable | 80–94 | Agents can read the catalog and complete a purchase through an agent-native surface. |
| Legible | 60–79 | Agents can get in and understand products, but can't yet shop the store end to end. |
| Visible | 30–59 | Agents can reach the site, but product data is thin or inconsistent. |
| Blocked | 0–29 | Shopping agents are blocked or challenged before they can see a product. |
Every check
28 checks, grouped by pillar. The description says what earns full credit. Check titles on a report link back here.
Access · 35 points
| Check | Points | What passes |
|---|---|---|
robots.txt allows AI agents access.robots-ai-bots | 6 | robots.txt permits each named AI agent (GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, PerplexityBot, Meta-ExternalAgent, Meta-ExternalFetcher, Amazonbot, Google-Extended, Bytespider, AURbot) to fetch the homepage and the product page. Scored in proportion to the agents allowed. |
Homepage serves AI agents access.home-agents | 6 | The homepage returns real content (not a block, challenge page, or empty JavaScript shell) when requested with each AI agent user agent. |
Product page serves shopping agents access.pdp-agents | 12 | The product page returns real content to the agents that shop on behalf of a user: ChatGPT-User, OAI-SearchBot, Claude-User, PerplexityBot, Meta-ExternalFetcher, and AURbot. Blocking four or more caps the score at 29. |
Site search works for agents access.search-agents | 4 | The site search results page returns content for a browser and for ChatGPT-User and Claude-User, so an agent can find products by query. |
Datacenter traffic is not challenged access.browser-baseline | 3 | A plain browser user agent from our scanner (a datacenter IP, like the ones AI agents use) receives the homepage and product page without a challenge. Failing marks the scan as "scanner blocked". |
Content-Signal allows AI input access.content-signal | 2 | robots.txt carries a Content-Signal directive (contentsignals.org) that does not set ai-input=no. An explicit signal scores fully; no signal scores half; denying AI input scores zero. |
Web Bot Auth directory access.web-bot-auth | 2 | Publishes /.well-known/http-message-signatures-directory, the Web Bot Auth key directory that lets verified agents (including Visa and Mastercard agent programs) authenticate instead of being treated as anonymous bots. |
Catalog legibility · 25 points
| Check | Points | What passes |
|---|---|---|
Product structured data catalog.product-jsonld | 8 | The product page carries Product JSON-LD (or microdata) with name, image, offers.price, priceCurrency, and availability. Scored per field; none at all caps the score at 59. |
Product identifiers and brand catalog.identifiers | 3 | The product markup includes a sku, gtin, mpn, or productID, and a brand, so agents can match the item across retailers. |
Shipping, returns, and price validity in markup catalog.offer-details | 3 | The Offer includes shippingDetails, hasMerchantReturnPolicy, and priceValidUntil: the facts agents use to rank options by delivery, return risk, and price confidence. |
Price and details are server-rendered catalog.ssr-price | 4 | The product name and price are present in the raw HTML, for a browser and for a shopping agent, rather than appearing only after client-side JavaScript runs. |
Breadcrumb and list markup catalog.list-markup | 2 | BreadcrumbList on the product page and ItemList on a category or search page, so agents can understand where a product sits in the catalog. |
Sitemap lists products catalog.sitemap-products | 3 | A sitemap is reachable (from robots.txt or /sitemap.xml) and includes product URLs or a product sitemap, so agents can enumerate the catalog. |
Markdown content negotiation catalog.markdown-negotiation | 1 | Requesting the product page with Accept: text/markdown returns Markdown, a compact format agents can read without parsing HTML. |
llms.txt catalog.llms-txt | 1 | Publishes /llms.txt, a plain-text guide to the site for language models. |
Transactability · 25 points
| Check | Points | What passes |
|---|---|---|
UCP business profile tx.ucp-profile | 9 | Publishes /.well-known/ucp, the Universal Commerce Protocol profile that tells agents which shopping services, capabilities (including checkout), and payment handlers the store supports. |
UCP MCP endpoint answers tx.ucp-mcp-endpoint | 5 | The MCP endpoint named in the UCP profile (or /api/ucp/mcp) responds to tools/list and exposes checkout or cart tools an agent can call. |
Storefront MCP server tx.storefront-mcp | 3 | An MCP server at /api/mcp responds to tools/list (Shopify stores expose catalog, policy, and cart tools here). |
MCP server card tx.mcp-server-card | 2 | Publishes /.well-known/mcp/server-card.json describing an MCP server agents can connect to. |
API catalog tx.api-catalog | 2 | Publishes /.well-known/api-catalog (RFC 9727) or a Link: rel="api-catalog" header on the homepage, pointing agents at the site's APIs. |
OAuth discovery tx.oauth-discovery | 2 | Publishes OAuth 2.0 authorization server metadata (RFC 8414), OpenID configuration, or protected resource metadata (RFC 9728), so agents can authenticate for account-level actions. |
Agent cards and skills tx.agent-cards | 1 | Publishes an A2A agent card (/.well-known/agent-card.json or agent.json) or an Agent Skills index (/.well-known/agent-skills/index.json). |
ACP integration (self-reported) tx.acp-attested | 1 | The OpenAI/Stripe Agentic Commerce Protocol has no public discovery mechanism yet, so this is self-reported by the merchant and labelled as such. |
Trust & policy · 15 points
| Check | Points | What passes |
|---|---|---|
Organization structured data trust.org-jsonld | 4 | The homepage carries Organization (or OnlineStore) JSON-LD with name, url, logo, and sameAs links, so agents can verify who is selling. |
Return and shipping policy pages trust.policy-pages | 4 | A return/refund policy page and a shipping policy page are linked from the homepage (or live at the platform's standard paths) and load successfully. |
MerchantReturnPolicy markup trust.return-policy-markup | 2 | MerchantReturnPolicy structured data (on the product offer, the homepage, or the organization) states the return window and fees in machine-readable form. |
HTTPS everywhere trust.https-hsts | 3 | The site is served over HTTPS, plain http:// requests redirect to it, and Strict-Transport-Security is set. |
Review markup trust.reviews | 2 | The product markup includes aggregateRating with a rating value and a review or rating count. |
User agents we send
Access checks request the same pages with each of these user-agent strings and classify the response as content, a block, a challenge page, or an empty JavaScript shell. Shopping agents are the ones that fetch pages on behalf of a live user, as opposed to crawlers that build an index or a training set; they matter most.
| Agent | Vendor | robots.txt token | Shopping agent | Note |
|---|---|---|---|---|
| Chrome (baseline) | Browser | * | No | Plain browser baseline from a datacenter IP |
| GPTBot | OpenAI | GPTBot | No | |
| ChatGPT-User | OpenAI | ChatGPT-User | Yes | |
| OAI-SearchBot | OpenAI | OAI-SearchBot | Yes | |
| ClaudeBot | Anthropic | ClaudeBot | No | |
| Claude-User | Anthropic | Claude-User | Yes | |
| PerplexityBot | Perplexity | PerplexityBot | Yes | |
| Meta-ExternalAgent | Meta | Meta-ExternalAgent | No | |
| Meta-ExternalFetcher | Meta | Meta-ExternalFetcher | Yes | |
| Amazonbot | Amazon | Amazonbot | No | |
| Google-Extended | Google-Extended | No | robots.txt token only; no request is sent with this name | |
| Bytespider | ByteDance | Bytespider | No | |
| AURbot | OpenTools | AURbot | Yes | Our scanner, under its own name |
Blocked us vs. blocks agents
The scanner runs from datacenter IP addresses, like every AI agent does. Before probing with agent names, we fetch the homepage and product page with a plain Chrome user agent. If even that is blocked or challenged, the site is rejecting cloud traffic wholesale, and the report carries a scanner blocked flag so readers know that the per-agent results reflect network-level blocking rather than rules aimed at specific agents.
The score still counts. What blocked us blocks the agents too: ChatGPT, Claude, Perplexity, and Meta all fetch from the same kind of infrastructure, and a store that challenges every non-residential visitor is, in practice, closed to them. The flag is there so the store can tell the difference between “we block AI” and “our bot manager is too aggressive”, which have different fixes.
Platform-granted capabilities
Some capabilities come from the commerce platform rather than from anything the store built. When Shopify provides a store’s UCP profile, UCP MCP endpoint, or Storefront MCP server, the check is marked (via Shopify). The points count the same, because an agent does not care who built the endpoint; the label is there so that stores on other platforms understand what they are comparing against, and so that a Shopify store knows the fix is a setting rather than a build.
What we can’t see
- ACP. The Agentic Commerce Protocol (OpenAI and Stripe) has no public discovery document, so a passive scan cannot tell whether a store accepts ACP checkouts. The ACP check is self-reported by the merchant and labelled as such on the report.
- x402 and MPP. Pay-per-request protocols are not evaluated in version 1.
- Checkout itself. We never place an order, so we cannot see whether the checkout works for an agent once it gets there. That is what the Agent Walk is for.
Scanner policy
- A scan makes roughly 25–40 requests: GET and HEAD requests for the homepage, one product page, one listing or search page, robots.txt, the sitemap, the policy pages, and a set of well-known documents, plus two documented JSON-RPC
tools/listPOSTs to the MCP endpoints. - Access probes repeat the homepage and product page with the agent user agents listed above. Everything else is sent as
Mozilla/5.0 (compatible; AURbot/1.0; +https://opentools.com/aur). - No logins, no cart mutations, no form submissions, no purchases.
- No crawling: we never follow links beyond the handful of pages above, and we read at most the first few kilobytes of a sitemap.
- Scans of the same domain are cached and rate-limited, so a store is not re-fetched on every page view.
- To opt out, disallow
AURbotin robots.txt. We honour it: the domain is shown as “opted out” instead of being scored.User-agent: AURbot Disallow: / - Questions, corrections, or a request to remove a domain: team@opentools.com.
Changelog
- v1.0.0 — initial rubric.
- v1.0.1 — a single HTTP 429 is retried once after the server’s Retry-After (as an agent would), and user-agent probes are paced instead of sent as a burst, so a site’s rate limiter no longer counts as blocking.
Scores are stored with the engine version that produced them, so a rubric change never silently moves a published score.