AI shops. We test.PL

ACRS: Agent Commerce Readiness Standard

CanItBuy method · specification 1.2 · 20 October 2026 · CC BY 4.0

ACRS measures whether an AI shopping agent can actually buy in a store: find a product, understand variants, add to cart and reach checkout. It is CanItBuy’s open method, not an official industry standard. We publish it in full, with weights, the points of every check and examples, so anyone can see where a score comes from and compute it themselves.

  1. Five levels
  2. Six modules and weights
  3. Checklist: every check and its points
  4. How the score is calculated
  5. Blockers and fix impact
  6. Examples of errors on the reference stores
  7. How to check it yourself
  8. The ACRS badge
  9. Limits
  10. Licence, citation and versions

Five levels

LevelNameWhat has to work
ACRS 1DiscoverableThe agent finds the store, a product and its price.
ACRS 2UnderstandableThe agent understands variants, attributes and availability.
ACRS 3Cart-readyThe agent adds the right product to the cart.
ACRS 4Transaction-readyThe agent reaches checkout and sees delivery and payment.
ACRS 5Agent-optimizedThe full path plus agent data and protocols (UCP, llms.txt, site search).

Level 0 means the agent found no product or price, and the scan could not read them from the page code. Being blocked by bot protection also gives level 0.

Level 5 requires reaching checkout, at least 60/100 in the Protocols module and at least 80/100 in the Catalog module.

Six modules and weights

ModuleWeightWhat it measuresPoints possible
Access10%AI agents are allowed in · Encrypted connection (HTTPS) · Fast page response · Sitemap (sitemap.xml) · Phone-ready page · Page title and description · Canonical page address · Speed on a phone · Stable layout on a phone · Page fits a phone screen16
Catalog25%A product page can be found · Product data (schema.org Product) · Price with currency in data · Availability in data · GTIN/EAN or SKU code · Product brand · Image in product data · Variants described in data · Price in data matches the page · Availability in data matches the page16
Comprehension20%Product name without JavaScript · Price without JavaScript · “Add to cart” button in the code · Image descriptions (alt) · Named variant options · Buttons have names · One main heading (h1) · Accessible purchase path (WCAG)13 + 3
Transaction path30%The stage the agent reached in a real browser: product 25, variant 50, cart 75, checkout 100 module points. Product and cart stages count only when the page confirms them (product data, a buy button, a filled cart). Checkout is detected by code from contact, address or payment fields, not by the AI model.100
Trust & policies10%Shipping in data · Return policy in data · Ratings in data · Store details (Organization) · Seller and contact on the page · Terms and returns behind a link · Lowest 30-day price shown with a discount · Answers to common questions (FAQ) · Delivery time on the product page9 + 3
Protocols5%UCP profile for agents · llms.txt file · Machine-readable search6

Comprehension and Trust also include five shopper questions (price, availability, variants, delivery, returns): 1 point each when the answer can be read from the page data or text. Trust gets 1 point for payment methods visible in the page code.

Checklist: every check and its points

Access 10%

CheckPointsWhy it mattersHow to pass
AI agents are allowed inbots4robots.txt blocks AI assistants and search. They will not see your products.Allow OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot and Claude-User in robots.txt.Partial points: in proportion to the agents allowed from the list (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot, Claude-User); model-training bots (GPTBot, Google-Extended) are shown in the report for information only, because blocking them is the owner’s decision.
Encrypted connection (HTTPS)https1Agents and browsers warn about sites without HTTPS.Enable SSL and redirect to https://.
Fast page responsespeed2Agents work with time limits. A slow page is an abandoned purchase.Enable caching and a CDN. Aim for under 1.5 s.Partial points: 2 points under 1.5 s, 1 point under 3 s.
Sitemap (sitemap.xml)sitemap2Without a sitemap agents find products less easily.Publish sitemap.xml and reference it in robots.txt.
Phone-ready pageviewport1Without a viewport tag the page is shrunk on phones, so mobile agents and shoppers see it worse.Add to <head>: <meta name="viewport" content="width=device-width, initial-scale=1">.
Page title and descriptionseoTitle1Search engines and AI assistants quote the page title and description when they recommend a product. Without them they pick their own words or another store.Give the product page a <title> (10–70 characters) and a <meta name="description"> (50–320 characters) with the product name and its key feature.Partial points: a 10–70 character title and a 50–320 character description on the product page (no product page: the home page).
Canonical page addresscanonical1The same product under several addresses (filters, parameters, variants) splits search results. The assistant may show the wrong address.Add <link rel="canonical" href="…"> to <head> with the main product address on your domain.Partial points: the canonical address must point to the same domain.
Speed on a phonemobileLcp2Most purchases start on a phone. When the main content of the product page takes longer than 2.5 s, shoppers leave and agents lose time.Resize and compress the main image (WebP or AVIF), do not lazy-load it, defer scripts the purchase does not need, and turn on caching.Conditional check: a lab measurement in our browser, not data from real users: the product page (no product page: the home page) on a simulated phone, 390 × 844 px, slow 4G (150 ms, 1.6 Mbit/s) and a CPU slowed down 2×. LCP up to 2.5 s: 2 points, up to 4 s: 1 point. A page that does not load in 20 s gets 0.
Stable layout on a phonemobileCls1Elements that jump while the page loads cause accidental taps. An agent may click the wrong button.Give images and frames their size (width, height), reserve space for banners, and do not insert content above what is already visible.Conditional check: the same phone measurement; CLS is the largest burst of layout shifts (a window of up to 5 s).
Page fits a phone screenmobileFit1Sideways scrolling on a phone hides part of the page, such as the buy button or the price.Find the element wider than the screen (a table, an image, long unbroken text) and limit it with max-width: 100%.Conditional check: the same phone measurement; the point when the page is not wider than the 390 px screen.

Catalog 25%

CheckPointsWhy it mattersHow to pass
A product page can be foundproduct2We found no product page from the home page or the sitemap.Link products from the home page with plain links.
Product data (schema.org Product)jsonld3Without structured data the agent guesses name and price.Add Product JSON-LD to every product page.
Price with currency in dataprice2Agents compare prices. A price without currency is uncertain.Fill in offers.price and offers.priceCurrency.Partial points: 1 point for a price without a currency.
Availability in dataavailability1An agent will not buy what it cannot confirm is in stock.Add offers.availability, e.g. InStock.
GTIN/EAN or SKU codeids2Codes let the agent match the exact same product across stores.Add gtin13 (EAN), or at least sku.Partial points: 1 point for an SKU or MPN alone.
Product brandbrand1Shoppers often ask agents for a specific brand.Fill in the brand field.
Image in product dataimages1The agent shows the product to the shopper and needs an image.Add an image URL to the product data.
Variants described in datavariants1Sizes and colours that exist only in the UI are invisible to agents.Describe variants as a ProductGroup with hasVariant.Partial points: a product without variants gets the point automatically.
Price in data matches the pagetruthPrice2The product data gives a different price from the one the shopper sees. The agent will quote the wrong price or treat the store as unreliable.Make offers.price in the JSON-LD come from the same field as the price on the page, including sales and variants.Conditional check: counted only when the page shows any price in its HTML; a price missing from the HTML is the “price without JavaScript” check.
Availability in data matches the pagetruthStock1The data says something different from the page. The agent will promise a product you do not have, or skip one you do.Generate offers.availability from the same stock level the page shows.Conditional check: only products without variants, where one word on the page decides availability.

Comprehension 20%

CheckPointsWhy it mattersHow to pass
Product name without JavaScriptnameHtml2Many agents do not run scripts. For them the name does not exist.Render the name on the server (SSR).
Price without JavaScriptpriceHtml2A price injected by script is invisible to simpler agents.Render the price on the server (SSR).
“Add to cart” button in the codecartBtn2The agent must find the buy button before scripts load.Use a real <button> labelled “Add to cart”.
Image descriptions (alt)alts1Without alt text the agent cannot tell what an image shows.Add alt text to product images.Partial points: at least 80% of product-page images with a description.
Named variant optionslabels1A size button without a name is a question mark to an agent.Add a <label> or aria-label, e.g. “Size 42”.Partial points: at least 80% of variant controls with a name; a product without variants gets the point automatically.
Buttons have namesbuttonsNamed1A button with no text or aria-label is a question mark for agents and screen readers.Give every button text or an aria-label, e.g. “Close” or “Add to cart”.Partial points: at least 90% of the buttons on the product page with a name; a page without buttons gets the point.
One main heading (h1)h11The h1 heading tells machines what the page is about. No h1, or several, is an unclear signal.Use exactly one <h1> with the product name on the product page.
Accessible purchase path (WCAG)a11yPath3The gaps that block people with disabilities also confuse AI agents: buttons without names, fields without labels, images without descriptions. Since 28 June 2025 most online stores in the EU must meet accessibility requirements (EAA); microenterprises are exempt.On the home page, product page, cart and checkout fix: image alt text, field labels, button and link names, the lang attribute, text contrast of at least 4.5:1 and buttons of at least 24 × 24 px.Conditional check: counted when the agent went through the store (not when blocked). In a real browser we check up to four pages of the path (home, product, cart, checkout) against selected WCAG 2.2 A and AA criteria: 1.1.1 image text, 1.3.1 and 4.1.2 field labels and button and link names, 3.1.1 page language, 1.4.3 text contrast, 2.5.8 button size. A criterion fails from 1 issue, contrast and button size from 2. 3 points with no issues, 2 with one failing criterion, 1 with two or three, 0 with four or more. This is an automated review, not a full accessibility audit.

Trust & policies 10%

CheckPointsWhy it mattersHow to pass
Shipping in datashipping1Agents compute the full cost including delivery.Add shippingDetails (OfferShippingDetails) to the offer.
Return policy in datareturns1Returns are a common question before buying.Add hasMerchantReturnPolicy.
Ratings in datarating1Agents prefer to recommend products with reviews.Add aggregateRating if you collect reviews.
Store details (Organization)org1Contact details and address build agent trust.Add Organization JSON-LD with an email or phone.
Seller and contact on the pageseller1Agents and shoppers check who sells and how to get in touch. Without it the store looks less trustworthy.Show the seller name, company details (e.g. VAT number) and an email or phone in the footer.
Terms and returns behind a linkterms1An assistant answers questions about returns and terms of sale. It has to find the terms and the returns policy.Add footer links to “Terms” and “Returns” (or “Delivery and returns”).
Lowest 30-day price shown with a discountomnibus1The page shows a discount without the lowest price from the 30 days before it. EU law (the Omnibus directive) requires it, and an agent cannot judge the deal.With every discount, show “Lowest price in the 30 days before the discount: …”.Conditional check: counted only when the product page shows a discount (a struck-through or old price).
Answers to common questions (FAQ)faq1Shoppers ask the assistant about delivery, returns and sizing. A store with an FAQ gives it ready answers.Add an FAQ page or section with questions about delivery, payment, returns and choosing the product, ideally with FAQPage data in JSON-LD.
Delivery time on the product pagedeliveryTime1“When will it arrive?” is one of the first questions shoppers ask. The assistant cannot answer if the product page does not say.Show the dispatch or delivery time next to the price, e.g. “Ships within 24 h” or “Delivery in 1–2 business days”.Conditional check: counted only when the scan found a product page.

Protocols 5%

CheckPointsWhy it mattersHow to pass
UCP profile for agentsucp4UCP (Universal Commerce Protocol) is the new standard AI agents use to discover a store’s catalog, cart and checkout.Publish a profile at /.well-known/ucp. Check whether your platform or a plugin supports it.Partial points: 1 point for a profile that exists but fails validation.
llms.txt filellms1A short store summary for AI models helps them understand your offer.Add /llms.txt describing the store, categories and delivery rules.
Machine-readable searchsearch1Agents search for products like shoppers do.Add a SearchAction to WebSite data or an <input type="search">.

How the score is calculated

Each module scores 0 to 100: points earned in its checks divided by points possible. The ACRS score is the weighted average of the modules with the weights from the table above. A module with no checks at all (e.g. no scan) is left out of the average and the remaining weights are scaled to 100%. Conditional checks count only when they apply to the page; otherwise they are left out of the points possible.

If bot protection blocks the agent or the site does not respond, Access and Transaction path score 0. If an error on our side interrupts the test, we do not calculate a score at all and the test goes back to the pool.

Example: Access 80, Catalog 60, Comprehension 70, Transaction path 75, Trust 50, Protocols 20. Score = (10·80 + 25·60 + 20·70 + 30·75 + 10·50 + 5·20) / 100 = 65.

Blockers and fix impact

A blocker is a failed check or the stage where the agent stopped. For each one we show how many points the score gains after the fix: the check’s missing points, divided by the module’s possible points, times the module weight. The report shows the three blockers with the biggest impact and the “after fixing” score, the sum of the score and their impacts.

Examples of errors on the reference stores

We show every obstacle on the NORDLYS reference store: one copy of the store, one obstacle. The stores are public, so you can inspect their code and run any agent on them yourself. The results of different models on these stores are published in the CanItBuy Matrix.

StoreObstacleWhich checks or stages lose
S02 Cookie wallThe consent banner covers the whole page. The first screen only offers “Accept all” and “Settings”. s02.lab.canitbuy.comstage: Product
S03 Discount pop-upAfter a moment a discount window opens on every page. Only an unnamed “×” icon closes it. s03.lab.canitbuy.comstage: Product
S04 Tiles without linksProducts in listings are JavaScript blocks, not links. The page code has no product addresses. s04.lab.canitbuy.comA product page can be found · stage: Product
S05 Sizes as imagesSizes are images of a number, with no text and no name in the code. s05.lab.canitbuy.comNamed variant options · Accessible purchase path (WCAG) · stage: Variant
S06 JavaScript dropdownThe size is picked from a decorative JavaScript list. The real select field is hidden and the list items are not buttons. s06.lab.canitbuy.comNamed variant options · stage: Variant
S07 Unavailable by colour onlyUnavailable sizes are only greyed out. Neither the text nor the code says so, and trying to buy one ends in an error. s07.lab.canitbuy.comAvailability in data · Accessible purchase path (WCAG) · stage: Cart
S08 Colour first, then sizeSizes appear only after a colour is chosen. The page code sent by the server does not contain them. s08.lab.canitbuy.comNamed variant options · Variants described in data · stage: Variant
S09 Terms consent in the cartThe “Proceed to checkout” button only works after ticking the terms consent in the cart. s09.lab.canitbuy.comstage: Checkout
S10 Account requiredCheckout requires logging in or creating an account. There is no guest checkout. s10.lab.canitbuy.comstage: Checkout
S11 JavaScript-only contentThe store builds its pages in the browser. The HTML sent by the server is empty. s11.lab.canitbuy.comProduct name without JavaScript · Price without JavaScript · “Add to cart” button in the code · Product data (schema.org Product) · Price with currency in data · Availability in data · Seller and contact on the page · Terms and returns behind a link · Page title and description · Canonical page address · One main heading (h1) · Answers to common questions (FAQ) · Delivery time on the product page
S12 No product data in the codeThe page looks normal but has no structured product data (JSON-LD). s12.lab.canitbuy.comProduct data (schema.org Product) · Price with currency in data · Availability in data · GTIN/EAN or SKU code · Product brand · Image in product data · Variants described in data · Shipping in data · Return policy in data

How to check it yourself

  1. Product data: open the product page source and look for <script type="application/ld+json"> with @type Product or ProductGroup. Check offers.price, priceCurrency, availability, gtin13 or sku, brand, image, shippingDetails, hasMerchantReturnPolicy and aggregateRating. Validator: validator.schema.org.
  2. Without JavaScript: disable scripts in the browser or fetch the page with curl. The name, price and “Add to cart” button must be in the downloaded HTML.
  3. Control names: open the accessibility tree in the developer tools. Every size or colour button needs a name, e.g. “Size 42”.
  4. Access: open /robots.txt and check the rules for OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot and Claude-User. Open /sitemap.xml and /llms.txt. Check that <head> has a viewport tag.
  5. Phone and accessibility: in Chrome run Lighthouse in Mobile mode (LCP and CLS). On every purchase step check the page with axe DevTools or WAVE.
  6. Search engines: in the product page code check <title>, <meta name="description">, <link rel="canonical"> and one <h1>. Check that the delivery time is shown next to the price and that the store has an FAQ.
  7. Data truth: compare the price and availability in the JSON-LD with what the shopper sees on the product page, during a sale too. With a discount the page must show the lowest price from the last 30 days.
  8. Seller and terms: the footer needs the seller’s details with a contact, and links to the terms and the returns policy.
  9. Protocols: open /.well-known/ucp. A valid profile is JSON with a version and a list of capabilities.
  10. Purchase path: walk it in an incognito window as a guest. Every place where you have to guess will stop an agent too.

The ACRS badge

Every report has an SVG badge with the level, the score and the test date. You can put it on your store’s site or in documentation; the badge links to the report, so anyone can check where it comes from. The badge shows the test date and is not a certificate: the result describes the test day.

ACRS 4 · 78/100 · 2026-10-19

The embed code is in the report, under the ACRS result.

Limits

  • A result describes the CanItBuy test agent and the model named in the report, on the test day. Other companies’ agents, such as ChatGPT, may behave differently; the Matrix shows the differences between models.
  • The free test checks the home page and one product page. A Product Truth Audit covers the catalogue.
  • The agent never orders or types data, so it does not test the payment itself.
  • We will keep developing the method. Every change gets a new version number and an entry in the history on this page.

Licence, citation and versions

The ACRS specification is available under Creative Commons Attribution 4.0 (CC BY 4.0). You may copy it, implement it in your own tools and modify it, as long as you credit the source: “ACRS, a CanItBuy method, canitbuy.com/acrs”. The name “ACRS” and the CanItBuy logo remain CanItBuy’s marks.

Citation: CanItBuy, “ACRS: Agent Commerce Readiness Standard”, version 1.2, 2026-10-20, https://canitbuy.com/acrs

Version history

1.2 · 2026-10-20
Nine new checks (40 in total). The agent measures in a real browser: the accessibility of the purchase path against selected WCAG 2.2 criteria, and speed, layout stability and fit on a simulated phone. The scan checks the page title and description, the canonical address, one h1 heading, an FAQ and the delivery time on the product page. Five of the new checks are conditional. Results from version 1.1 are not recalculated.
1.1 · 2026-10-20
Seven new checks (31 in total): price and availability in the data match the page, a phone-ready page, named buttons, seller and contact, terms and returns behind a link, the lowest 30-day price with a discount. Three of them are conditional. Corrected description of the bot check: model-training bots (GPTBot, Google-Extended) never affected the score, and the 1.0 text wrongly listed GPTBot. The Fix Pack now gives each fix a priority and its effect on sales. Results from version 1.0 are not recalculated.
1.0 · 2026-10-19
First public version: five levels, six modules, 24 checks, shopper questions, blockers with fix impact, badge and the CC BY 4.0 licence.

Run free ACRS Snapshot

© 2026 CanItBuy · hello@canitbuy.comBack to the home pageMatrixOur agent