Skip to content

Agent Conversion Score specification

Every check, weight and cap behind the score, published so that "agent-ready" means one thing. Version 0.5, published 17 Oct 2026. Licensed CC BY 4.0: implement it, cite it, extend it.

Machine-readable: /spec/agent-conversion-score.json

Two sub-scores, one funnel

Agent Choice

Can an agent find, read, trust and recommend you?

Access, Legibility, Offer clarity, Trust

Agent Checkout

Can an agent complete the purchase?

Transactability

Agent Conversion Score = Agent Choice × (0.7 + 0.3 × Agent Checkout / 100), then caps. A funnel rather than an average: a closed checkout limits the score instead of being averaged away, but a site agents can recommend still converts through the human handoff, so it is not zeroed. The checkout share rises in future versions as agent-completed purchases become common.

Scoring method

Each check earns points inside its dimension (pass = full weight, partial = weight × credit, fail = 0; not-applicable checks are excluded from the denominator). A sub-score is the weighted average of its dimensions' percentages. The lowest cap among failed capped checks limits the final score.

  • 25 Access
  • 25 Legibility
  • 15 Offer clarity
  • 25 Transactability
  • 10 Trust
A
85-100
B
70-84
C
55-69
D
40-54
F
0-39

Caps

When any of these fails, the score cannot exceed the cap, whatever the other checks say. Each one stops a sale outright.

  • ACC-10 Product pages return 200 to agent identities (no 403, 429 or challenge) (cap 40)
  • LEG-02 Offer with a numeric price in JSON-LD (cap 50)
  • TRX-01 Guest checkout is available (cap 60)

When a site refuses claimed agents

Requests are made as a real browser and as named agent identities from the auditor's own address. When the browser is admitted, robots.txt allows the agents, and every claimed agent is refused, the site may be verifying agent identity and admitting real agents. Access checks are then scored at half credit and flagged for verification, never capped, until a live agent check (asking the real assistants to read a product page) confirms access (pass) or refusal (fail, and the cap applies).

Digital products and services

Sites whose products are software or services. These checks are not applicable, and the retail checkout protocols UCP and ACP are optional. Not applicable: LEG-05, LEG-09, OFF-04, OFF-05, TRX-09, TRX-04, TRX-05.

Access

25 points. Can agents reach the site at all?

CheckWeightWhat passesThe fix when it fails
ACC-011robots.txt is present and parseablePublish a robots.txt at the site root. Agents that find none assume everything is allowed, but Cloudflare and most WAFs use its absence as a weak signal of an unmanaged site.
ACC-020.5robots.txt allows GPTBot on product pagesRemove the Disallow rule for GPTBot, or add "User-agent: GPTBot / Allow: /" above any blanket block. GPTBot feeds ChatGPT's product knowledge.
ACC-030.5robots.txt allows ChatGPT-User on product pagesChatGPT-User is the live fetch a shopper triggers when they ask ChatGPT about you. Allow it explicitly.
ACC-040.5robots.txt allows OAI-SearchBotOAI-SearchBot indexes for ChatGPT search results. Allow it.
ACC-050.5robots.txt allows PerplexityBotAllow PerplexityBot so Perplexity can index product pages.
ACC-060.5robots.txt allows Perplexity-UserPerplexity-User is the live fetch for a shopper's question. Allow it.
ACC-070.5robots.txt allows ClaudeBotAllow ClaudeBot for Claude's index.
ACC-080.5robots.txt allows Claude-UserClaude-User is the live fetch from a Claude conversation. Allow it.
ACC-090.5robots.txt allows Google-ExtendedGoogle-Extended governs Gemini's use of your content. Blocking it keeps you out of Gemini's shopping answers.
ACC-10cap 408Product pages return 200 to agent identities (no 403, 429 or challenge)Your WAF or bot protection is refusing AI agents on product pages. In Cloudflare, open Security > Bots > AI Crawl Control and allow the Search and Agent categories; if you block by user-agent, remove GPTBot, ChatGPT-User, PerplexityBot and ClaudeBot from the list.
ACC-113Homepage returns 200 to agent identitiesAgents start at the homepage. Allow the same agent identities there as on product pages.
ACC-123No JavaScript challenge or captcha interstitial served to agentsA "checking your browser" page is a dead end for an agent; it cannot run the challenge. Exempt verified agents (Web Bot Auth) or the agent user-agents from the challenge rule.
ACC-131Agent fetch of a product page completes in under 3 secondsAgents time out faster than people. Cache product HTML at the edge and defer non-critical scripts.
ACC-142Product content reaches an agent without a consent or age gateServe product name and price in the HTML before any consent banner or gate; the gate can still appear for people.

Legibility

25 points. Can an agent read the offer without guessing?

CheckWeightWhat passesThe fix when it fails
LEG-013Product JSON-LD present on product pagesAdd a schema.org Product block in JSON-LD on every product page. It is the single structure every assistant reads.
LEG-02cap 503Offer with a numeric price in JSON-LDAdd an Offer inside the Product with "price" as a number. Without it an agent has to guess the price from the page text it receives, and most will not guess.
LEG-031Offer declares priceCurrencyAdd "priceCurrency" as an ISO code (GBP, EUR, USD). A price without a currency is ambiguous to a cross-border agent.
LEG-042Offer declares availabilityAdd "availability" as a schema.org URL (InStock, OutOfStock, PreOrder). Agents skip products they cannot confirm are buyable.
LEG-052Product identifiers present (gtin, mpn or sku)Add gtin13 (or gtin, mpn, sku). Agents use identifiers to match your product to the same item elsewhere and compare prices.
LEG-061Product declares a brandAdd "brand" with a Brand object. Brand is one of the first filters a shopper's agent applies.
LEG-072Organization JSON-LD with sameAs on the homepageAdd an Organization block with name, url, logo and sameAs links to your official profiles. This is how an agent confirms it is talking to the real you.
LEG-083Product name and price are in the HTML an agent receives (server-rendered)Render product name and price on the server. Content that only appears after JavaScript runs is invisible to most agent fetches, even though people see it in a browser.
LEG-092Shipping or delivery policy page is discoverableLink a plain-HTML shipping and delivery page from the footer and product pages, with delivery times and costs in text, not images.
LEG-102Returns policy page is discoverableLink a plain-HTML returns page from the footer and product pages. Agents weigh return terms when choosing between near-identical offers.
LEG-111llms.txt presentPublish /llms.txt with a short description of the business and links to catalogue, policies and feeds. Support is uneven but it costs nothing.
LEG-121sitemap.xml present and lists product URLsPublish a sitemap that includes product URLs and reference it from robots.txt. It is how agents enumerate the catalogue.
LEG-131Canonical URL set on product pagesAdd a rel=canonical link on each product page so variants and tracking URLs resolve to one offer.

Offer clarity

15 points. Is there one clear, verifiable offer?

CheckWeightWhat passesThe fix when it fails
OFF-013Structured price matches the price in the HTML an agent receivesThe JSON-LD price and the price in the page text disagree. Agents treat a mismatch as untrustworthy and move on. Generate both from the same source.
OFF-023Price present in what an agent receives (no login, modal or region gate)Make sure the price is in the HTML an agent receives, for any visitor. Prices drawn in by script, or behind "log in to see price" or a country selector, are invisible to an agent even though people see them.
OFF-032Promotions are expressed structurallyWhere the page shows a discount, add a priceSpecification (or validThrough and a list price) so the agent can verify the deal rather than read a badge.
OFF-042Shipping cost stated in structured dataAdd OfferShippingDetails with shippingRate and shippingDestination to the Offer. Delivery cost decides many agent comparisons.
OFF-052Delivery time stated on the product pageState the delivery time (as shippingDeliveryTime in schema or plain text on the product page). "Delivered by Friday" is the kind of constraint shoppers give their agents.
OFF-062Returns terms in structured dataAdd hasMerchantReturnPolicy (MerchantReturnPolicy with returnPolicyCategory and merchantReturnDays) to the Offer.
OFF-071Currency is explicit on the pageShow the currency symbol or ISO code next to every price.

Transactability

25 points. Can an agent get to payment?

CheckWeightWhat passesThe fix when it fails
TRX-01cap 604Guest checkout is availableThe checkout redirects to login or offers no guest path. Enable guest checkout; an agent acting for a new customer has no account to log in with.
TRX-023Cart is reachable by agent identitiesThe cart page refuses agent user-agents. Allow the same identities on cart and checkout paths as on product pages.
TRX-032No captcha on cart or checkout pagesreCAPTCHA, hCaptcha or Turnstile on cart or checkout stops an agent before payment. Move anti-fraud to the payment step or exempt verified agents.
TRX-044/.well-known/ucp business profile present and validPublish a UCP business profile at /.well-known/ucp (Shopify and Adobe Commerce do this automatically; others can generate one). It is how Google, Gemini and UCP agents discover your checkout.
TRX-052ACP discovery (/.well-known/acp.json) or ACP product feed presentPublish an ACP capabilities document or product feed to be purchasable inside ChatGPT.
TRX-062MCP endpoint advertisedAdvertise an MCP server (in llms.txt or at /.well-known/mcp.json) exposing catalogue search and offer lookup so agents can call you directly instead of scraping.
TRX-073Machine-readable product feed availableExpose a product feed (Shopify /products.json, WooCommerce Store API, a Merchant Center feed URL in llms.txt). Agents enumerate feeds far more reliably than they crawl pages.
TRX-082Accepted payment methods declaredDeclare payment methods in the Organization or Offer schema (acceptedPaymentMethod) or in the UCP profile's payment handlers.
TRX-092Variants expressed structurallyWhere a product has sizes or colours, use ProductGroup with hasVariant so an agent can pick the right one without parsing a dropdown.
TRX-104An agent can put a product in the basket and reach checkoutMake sure an agent can add one product to an anonymous basket and open the checkout page without logging in or solving a challenge: keep the platform's basket endpoint open to agent traffic, exempt verified agents from bot protection on cart and checkout, and offer guest checkout.

Trust

10 points. Can an agent verify who it is buying from?

CheckWeightWhat passesThe fix when it fails
TRU-013AggregateRating with a review count on product pagesAdd aggregateRating (ratingValue, reviewCount) from your reviews provider. Agents use it as the tie-breaker between similar offers.
TRU-022Policy pages linked from product pagesLink returns, shipping and privacy pages from the product page footer so an agent on a product page can verify terms without a search.
TRU-032HTTPS with no mixed contentServe everything over HTTPS and remove http:// asset references.
TRU-042Business identity (address, phone or email) is publishedAdd address, telephone or email to the Organization schema, or a plain contact page. Agents down-rank sellers they cannot identify.
TRU-051Business name is consistent across schema, title and og:site_nameUse one business name everywhere. Inconsistent names read as different entities to an agent.

How the weights were chosen

The weights are a design decision, not a measurement: no published study says how much each factor should count. They follow three rules. Access and transactability carry the most weight because they are binary for an agent: a refused request or a checkout it cannot reach ends the sale regardless of anything else. Checks that mirror what the assistants themselves ask for (server-rendered text, a numeric price, an allow-listed crawler) weigh more than checks whose benefit is plausible but unproven (llms.txt, FAQ markup). Three failures cap the score because they make the rest moot: refusing agents on product pages, a checkout that needs a login, and no machine-readable price.

We recalibrate against our own benchmark runs and the live agent checks, and every change is dated below.

The basket test

Reading a site is not the same as buying from it, so every audit of a physical-goods store now tries the step an agent takes before paying. As ChatGPT's agent, we add one in-stock product, quantity one, to an anonymous basket using the store's own basket mechanism (Shopify's cart API, the WooCommerce Store API, Salesforce Commerce's add-to-cart endpoint, or the add-to-basket form in the page), confirm the basket holds it, and open the checkout page. If the agent is refused, the same test runs as an ordinary browser so we can tell bot protection from a broken basket. We never log in, never enter personal or payment details and never place an order; the abandoned basket expires on its own, as millions do every day.

What the score does not measure

  • Whether assistants actually recommend you. The recommendation check reports that separately, because answers vary from one ask to the next; it is a signal, not a score.
  • Your prices, range or reputation. The score measures whether an agent can read and act on them, not whether they are competitive.
  • The whole site. A run reads the homepage, the discovery files, a sample of product pages (three in the free score, five in the full report) and the cart and checkout entry points.
  • What a logged-in shopper sees. Everything is fetched as an anonymous visitor, which is how agents arrive.

Known limits

  • Sites that refuse all traffic from cloud data centres cannot be scored automatically; we say so rather than guess, and retry from an ordinary home connection.
  • A site that serves an empty page to automated readers is treated as a refusal, not scored as an empty site.
  • Agent identities are verified live where possible: when a site refuses our imitation of an agent but admits a real browser, we ask the real assistant to open the page before calling it a block.
  • Scores change as sites change. The date on every result is the date of the run.

Changelog

  • v0.5 · 20 October 2026. The basket test: TRX-10 now adds one product to an anonymous basket as ChatGPT's agent and opens the checkout page (weight 1 → 4), replacing the checkout-page status check. Nothing is ever submitted. A recommendation check (does the AI name you when a shopper asks?) is reported alongside the score, not inside it.
  • v0.4 · 17 October 2026. Two sub-scores (Agent Choice, Agent Checkout) combined through the funnel formula; access verification by live assistants; digital-goods mode; the no-price cap confirmed live before it applies.
  • v0.3 · 14 October 2026. 49 checks across five dimensions; three caps; published under CC BY 4.0.

Implementing or citing the score

The specification is published under Creative Commons Attribution 4.0. Cite it as "Agent Conversion Score v0.5, ConversionVector, 2026-10-17". The reference implementation runs each check against a site fetched as a real browser and as the named agent identities; results from other implementations are comparable when the same check list and weights are used. Changes to checks or weights are versioned here.

Score your own site against it.

Free, live, in about a minute.