{"slug":"fahertybrand-kvzb98","companyName":"Faherty Brand","domain":"fahertybrand.com","url":"https://fahertybrand.com","headline":"A Shopify storefront with strong agent discovery and checkout capability, but no programmatic API for integrations beyond the UCP protocol.","compositeScore":78,"humanScore":85,"agentScore":70,"doorGap":15,"humanMeasured":4,"agentMeasured":6,"percentile":null,"humanPercentile":null,"agentPercentile":null,"isPartial":false,"depth":"free","siteClass":"ecommerce","scannerVersion":10,"scannedAt":"2026-09-04T15:12:59.361Z","unlocked":false,"mission":{"steps":[{"url":"https://fahertybrand.com","outcome":"ok","purpose":"reach the site at all"},{"url":"https://fahertybrand.com/robots.txt","outcome":"ok","purpose":"find out whether machines are welcome"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"ask whether the door opens for requests carrying the AI crawlers' names"},{"url":"https://fahertybrand.com/llms.txt","outcome":"ok","purpose":"read the site's own guide for language models"},{"url":"https://fahertybrand.com/sitemap.xml","outcome":"ok","purpose":"find out what pages exist"},{"url":"https://fahertybrand.com/.well-known/security.txt","outcome":"missing","purpose":"find a contact route for machines"},{"url":"https://fahertybrand.com","outcome":"missing","purpose":"find a published agent interface"},{"url":"https://fahertybrand.com/.well-known/ai-plugin.json","outcome":"missing","purpose":"find an agent plugin manifest"},{"url":"https://fahertybrand.com","outcome":"missing","purpose":"find out whether verified agents are recognised"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"read the homepage as data rather than as a page"},{"url":"https://fahertybrand.com","outcome":"missing","purpose":"find a machine readable API spec"},{"url":"https://fahertybrand.com","outcome":"missing","purpose":"read the developer documentation"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"read the prices without running JavaScript"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"read the product catalogue as data"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"read a product page as data"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"read the returns and shipping terms"},{"url":"https://fahertybrand.com","outcome":"ok","purpose":"walk the way a visitor would, to a signup form or a product"}],"verdict":"The agent got through 11 of 17 requests, but could not find a contact route for machines. It came up empty on 5 other checks too."},"observations":null,"dimensions":[{"key":"machine_discoverability","audience":"agent","score":100,"summary":"No AI crawler is blocked by robots.txt or user agent rules; all declared AI names are allowed. The site publishes llms.txt, a sitemap with 704 URLs including products, 19 schema.org types on the homepage, and a /products.json feed.","evidence":{"locked":true,"count":4}},{"key":"programmatic_onboarding","audience":"agent","score":10,"summary":"No API documentation is linked from the homepage or discoverable in the raw HTML. The site publishes a UCP manifest for checkout, but offers no OpenAPI spec, developer docs, or integration surface for building on top of the catalogue.","evidence":{"locked":true,"count":3}},{"key":"pricing_legibility","audience":"agent","score":75,"summary":"Prices appear in the raw HTML of product pages and in Product structured data with currency (USD). The visible price on the product page is $150, but structured data shows $88 for the same variant, creating ambiguity about which price.","evidence":{"locked":true,"count":2}},{"key":"agent_aware_instrumentation","audience":"agent","score":57,"summary":"A Universal Commerce Protocol manifest is published with 8 capabilities and a storefront MCP endpoint that agents can call. The catalogue answers as data at /products.json.","evidence":{"locked":true,"count":4}},{"key":"machine_fetchable_trust","audience":"agent","score":77,"summary":"The returns policy and shipping policy both read as text without JavaScript. Return policy is published in structured data. No security.txt is present at /.well-known/security.txt.","evidence":{"locked":true,"count":3}},{"key":"commercial_rails","audience":"agent","score":98,"summary":"Product markup carries price, currency, GTIN, and brand. The catalogue answers as data at /products.json, ready for feed syndication. Return policy is in structured data; returns and shipping terms read as text.","evidence":{"locked":true,"count":4}},{"key":"steps_to_first_value","audience":"human","score":95,"summary":"A product with its price ($150) and an add-to-cart control is reached in 2 steps from the homepage. The product page renders with 13 variant choosers and three express wallet options (Apple Pay, Shop Pay, PayPal) that skip the form.","evidence":{"locked":true,"count":1}},{"key":"required_fields","audience":"human","score":80,"summary":"No account is required before buying. The product page does not demand sign-in. Three express wallets (Apple Pay, Shop Pay, PayPal) allow checkout without entering any form fields.","evidence":{"locked":true,"count":1}},{"key":"verification_walls","audience":"human","score":75,"summary":"No sign-in requirement appears on the product page. Express wallets skip verification entirely. The page contains 79 inline error containers and 8 live regions, suggesting form validation is present, but no wall blocks a guest from.","evidence":{"locked":true,"count":1}},{"key":"error_recovery","audience":"human","score":90,"summary":"The product page offers 13 size or colour choosers, allowing a shopper to correct a variant selection before adding to cart. The page includes 79 inline error containers and 8 live regions for validation feedback, supporting error.","evidence":{"locked":true,"count":1}}],"issues":[{"rank":1,"title":"No security.txt file is published, leaving no standardized way for security researchers to report vulnerabilities.","dimensionKey":"machine_fetchable_trust","evidence":{"locked":true,"count":3},"fix":null},{"rank":2,"title":"The visible product price on the page does not match the price in structured data, creating confusion about the actual cost.","dimensionKey":"pricing_legibility","evidence":{"locked":true,"count":3},"fix":null},{"rank":3,"title":"No API documentation or developer integration surface exists beyond the UCP protocol, blocking third-party integrations and custom agent workflows.","dimensionKey":"programmatic_onboarding","evidence":{"locked":true,"count":3},"fix":null}],"fixArtifacts":{"locked":true,"count":6,"summaries":[{"id":"review_schema_vendor:notes","kind":"review_schema_vendor","title":"Put Yotpo reviews in the page","path":"notes","effort":{"minutes":10,"role":"owner"},"outcome":{"dimension":"machine_discoverability","external":["Review text and ratings reach crawlers that do not run the review widget's script."]}},{"id":"robots_search_bots:robots-txt","kind":"robots_search_bots","title":"robots.txt rules for AI crawlers","path":"/robots.txt","effort":{"minutes":10,"role":"owner"},"outcome":{"dimension":"machine_discoverability","external":["The assistants' search crawlers read and cite the site to buyers; training stays the owner's decision."]}},{"id":"policy_pages_text:notes","kind":"policy_pages_text","title":"Link the policy pages from the product page","path":"notes","effort":{"minutes":30,"role":"owner"},"outcome":{"dimension":"machine_fetchable_trust","external":["Returns and shipping pages read as text and are linked from every product page."]}},{"id":"catalog_identifiers:catalog-identifiers-csv","kind":"catalog_identifiers","title":"Variants missing a GTIN or a brand","path":"catalog-identifiers.csv","effort":{"minutes":5,"role":"owner"},"outcome":{"dimension":"machine_discoverability","external":["Feed listings stop being rejected for a missing brand or GTIN."]}},{"id":"security_txt:well-known-security-txt","kind":"security_txt","title":"security.txt","path":"/.well-known/security.txt","effort":{"minutes":10,"role":"owner"},"outcome":{"dimension":"machine_fetchable_trust","external":["Researchers and automated scanners find a disclosure address instead of guessing one."]}},{"id":"interfaces_note:notes","kind":"interfaces_note","title":"Machine interfaces: where you stand","path":"notes","effort":{"minutes":10,"role":"owner"},"outcome":{"dimension":"agent_aware_instrumentation","external":["The developer surface is built in an order where every published pointer answers."]}}]},"feedback":{"endpoint":"/api/feedback","mcpTool":"rate_fix","targets":[{"type":"report","key":"report"},{"type":"dimension","dimensionKey":"machine_discoverability","key":"dimension:machine_discoverability"},{"type":"dimension","dimensionKey":"programmatic_onboarding","key":"dimension:programmatic_onboarding"},{"type":"dimension","dimensionKey":"pricing_legibility","key":"dimension:pricing_legibility"},{"type":"dimension","dimensionKey":"agent_aware_instrumentation","key":"dimension:agent_aware_instrumentation"},{"type":"dimension","dimensionKey":"machine_fetchable_trust","key":"dimension:machine_fetchable_trust"},{"type":"dimension","dimensionKey":"commercial_rails","key":"dimension:commercial_rails"},{"type":"dimension","dimensionKey":"steps_to_first_value","key":"dimension:steps_to_first_value"},{"type":"dimension","dimensionKey":"required_fields","key":"dimension:required_fields"},{"type":"dimension","dimensionKey":"verification_walls","key":"dimension:verification_walls"},{"type":"dimension","dimensionKey":"error_recovery","key":"dimension:error_recovery"},{"type":"issue","dimensionKey":"machine_fetchable_trust","checkId":"security_txt","key":"issue:machine_fetchable_trust:security_txt"},{"type":"issue","dimensionKey":"pricing_legibility","checkId":null,"key":"issue:pricing_legibility:-"},{"type":"issue","dimensionKey":"programmatic_onboarding","checkId":null,"key":"issue:programmatic_onboarding:-"}]}}