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

PillarPoints
Access35
Catalog legibility25
Transactability25
Trust & policy15
Total100

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.

GateCapTriggers when
Shopping agents are blocked29Four 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 data59No Product JSON-LD or microdata was found on the product page.
No agent-native way to buy79None 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.

RawAUR
4025
6046
8072
9085
9593
100100

Levels

LevelAURMeaning
Agent-Native95–100Open to agents, fully legible, and transactable through a published protocol.
Shoppable80–94Agents can read the catalog and complete a purchase through an agent-native surface.
Legible60–79Agents can get in and understand products, but can't yet shop the store end to end.
Visible30–59Agents can reach the site, but product data is thin or inconsistent.
Blocked0–29Shopping 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

CheckPointsWhat passes
robots.txt allows AI agents
access.robots-ai-bots
6robots.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
6The 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
12The 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
4The 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
3A 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
2robots.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
2Publishes /.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

CheckPointsWhat passes
Product structured data
catalog.product-jsonld
8The 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
3The 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
3The 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
4The 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
2BreadcrumbList 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
3A 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
1Requesting the product page with Accept: text/markdown returns Markdown, a compact format agents can read without parsing HTML.
llms.txt
catalog.llms-txt
1Publishes /llms.txt, a plain-text guide to the site for language models.

Transactability · 25 points

CheckPointsWhat passes
UCP business profile
tx.ucp-profile
9Publishes /.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
5The 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
3An 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
2Publishes /.well-known/mcp/server-card.json describing an MCP server agents can connect to.
API catalog
tx.api-catalog
2Publishes /.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
2Publishes 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
1Publishes 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
1The 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

CheckPointsWhat passes
Organization structured data
trust.org-jsonld
4The 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
4A 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
2MerchantReturnPolicy 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
3The site is served over HTTPS, plain http:// requests redirect to it, and Strict-Transport-Security is set.
Review markup
trust.reviews
2The 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.

AgentVendorrobots.txt tokenShopping agentNote
Chrome (baseline)Browser*NoPlain browser baseline from a datacenter IP
GPTBotOpenAIGPTBotNo
ChatGPT-UserOpenAIChatGPT-UserYes
OAI-SearchBotOpenAIOAI-SearchBotYes
ClaudeBotAnthropicClaudeBotNo
Claude-UserAnthropicClaude-UserYes
PerplexityBotPerplexityPerplexityBotYes
Meta-ExternalAgentMetaMeta-ExternalAgentNo
Meta-ExternalFetcherMetaMeta-ExternalFetcherYes
AmazonbotAmazonAmazonbotNo
Google-ExtendedGoogleGoogle-ExtendedNorobots.txt token only; no request is sent with this name
BytespiderByteDanceBytespiderNo
AURbotOpenToolsAURbotYesOur 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/list POSTs 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 AURbot in 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.