{"slug":"tonal-fwct36","companyName":"Tonal","domain":"tonal.com","url":"https://tonal.com","headline":"A fitness hardware and apparel storefront with a software adoption funnel that routes all visitors through sales, blocking direct product evaluation.","compositeScore":56,"humanScore":48,"agentScore":63,"doorGap":-15,"humanMeasured":4,"agentMeasured":6,"percentile":null,"humanPercentile":null,"agentPercentile":null,"isPartial":false,"depth":"free","siteClass":"hybrid","scannerVersion":12,"scannedAt":"2026-09-08T14:37:03.247Z","unlocked":false,"mission":{"steps":[{"url":"https://tonal.com","outcome":"ok","purpose":"reach the site at all"},{"url":"https://tonal.com/robots.txt","outcome":"ok","purpose":"find out whether machines are welcome"},{"url":"https://tonal.com","outcome":"ok","purpose":"ask whether the door opens for requests carrying the AI crawlers' names"},{"url":"https://tonal.com/llms.txt","outcome":"ok","purpose":"read the site's own guide for language models"},{"url":"https://tonal.com/sitemap.xml","outcome":"ok","purpose":"find out what pages exist"},{"url":"https://tonal.com/.well-known/security.txt","outcome":"missing","purpose":"find a contact route for machines"},{"url":"https://tonal.com","outcome":"missing","purpose":"find a published agent interface"},{"url":"https://tonal.com/.well-known/ai-plugin.json","outcome":"missing","purpose":"find an agent plugin manifest"},{"url":"https://tonal.com","outcome":"missing","purpose":"find out whether verified agents are recognised"},{"url":"https://tonal.com","outcome":"ok","purpose":"read the homepage as data rather than as a page"},{"url":"https://tonal.com","outcome":"missing","purpose":"find a machine readable API spec"},{"url":"https://tonal.com","outcome":"missing","purpose":"read the developer documentation"},{"url":"https://tonal.com","outcome":"ok","purpose":"read the prices without running JavaScript"},{"url":"https://tonal.com","outcome":"ok","purpose":"read the product catalogue as data"},{"url":"https://tonal.com","outcome":"ok","purpose":"read a product page as data"},{"url":"https://tonal.com","outcome":"missing","purpose":"read the returns and shipping terms"},{"url":"https://tonal.com","outcome":"ok","purpose":"find a comparison page worth citing"},{"url":"https://tonal.com/pages/try-tonal","outcome":"missing","purpose":"walk the way a visitor would, to a signup form or a product"}],"verdict":"The agent got through 10 of 18 requests, but could not find a contact route for machines. It came up empty on 7 other checks too."},"observations":null,"dimensions":[{"key":"machine_discoverability","audience":"agent","score":100,"summary":"No AI crawler is blocked; a real browser is served normally. Sitemap lists 45 URLs including products. Three schema.org types published on the homepage. Catalogue answers as data at /products.json. llms.txt is published.","evidence":{"locked":true,"count":4}},{"key":"programmatic_onboarding","audience":"agent","score":7,"summary":"No API documentation is linked from the homepage or published at standard paths. OAuth authorization metadata is published, which signals how a remote MCP server would authenticate, but there is no API surface to onboard to.","evidence":{"locked":true,"count":3}},{"key":"pricing_legibility","audience":"agent","score":90,"summary":"23 prices appear in the homepage HTML. 66 prices across 3 product pages without JavaScript. Product structured data publishes price, currency and availability. An agent can parse cost and stock status without scraping.","evidence":{"locked":true,"count":2}},{"key":"agent_aware_instrumentation","audience":"agent","score":69,"summary":"No MCP manifest at the 3 standard paths. A Universal Commerce Protocol manifest is published at version 2026-08-25, declaring 8 capabilities and 2 payment handlers. A storefront MCP endpoint answers agent calls.","evidence":{"locked":true,"count":4}},{"key":"machine_fetchable_trust","audience":"agent","score":40,"summary":"No security.txt file is published at /.well-known/security.txt. The homepage answers automated requests normally. No Web Bot Auth signals are present. The site publishes no machine-readable trust claims.","evidence":{"locked":true,"count":3}},{"key":"commercial_rails","audience":"agent","score":72,"summary":"Product markup carries price, currency, identifier and brand on each item. Catalogue answers as data at /products.json with 12 products. Shopify platform supports standard agent checkout protocols.","evidence":{"locked":true,"count":4}},{"key":"steps_to_first_value","audience":"human","score":20,"summary":"The primary call to action is 'Book a Demo', a sales route. It takes 2 steps from the homepage to reach the form. No product purchase path is discoverable without entering the sales funnel.","evidence":{"locked":true,"count":1}},{"key":"required_fields","audience":"human","score":25,"summary":"The entry point is a sales form with 1 field, 1 required: email address. No account system is needed to browse products, but the only path to adoption or purchase is gated by this single required field.","evidence":{"locked":true,"count":1}},{"key":"verification_walls","audience":"human","score":65,"summary":"No verification requirement appears on the signup page. The email field carries validation rules but no CAPTCHA, phone verification or email confirmation step is enforced before the form submits.","evidence":{"locked":true,"count":1}},{"key":"error_recovery","audience":"human","score":80,"summary":"1 of 1 inputs on the entry form carry validation rules. 2 live regions are present to announce errors. No inline error containers are marked up, so error messages may not be associated with fields.","evidence":{"locked":true,"count":1}}],"issues":[{"rank":1,"title":"Reviews load from Trustpilot by script, so a client that reads raw HTML sees the products without a single review.","dimensionKey":"pricing_legibility","evidence":{"locked":true,"count":1},"fix":null},{"rank":2,"title":"No returns or shipping policy page reads as text at the usual paths, so an assistant has no terms to quote beside the price.","dimensionKey":"machine_fetchable_trust","evidence":{"locked":true,"count":1},"fix":null},{"rank":3,"title":"The only route to an account is a sales conversation, so nobody signs up without talking to a person.","dimensionKey":"steps_to_first_value","evidence":{"locked":true,"count":1},"fix":null}],"fixArtifacts":{"locked":true,"count":12,"summaries":[{"id":"product_jsonld:products-loops-straps-bundle","kind":"product_jsonld","title":"Product markup for Pilates Loops + Ankle Straps Bundle","path":"/products/loops-straps-bundle","effort":{"minutes":30,"role":"developer"},"outcome":{"dimension":"pricing_legibility","external":["Assistants read price, availability and identifiers from every sampled product page."]}},{"id":"product_jsonld:products-pilates-loops-colors","kind":"product_jsonld","title":"Product markup for Pilates Loops - Colors","path":"/products/pilates-loops-colors","effort":{"minutes":30,"role":"developer"},"outcome":{"dimension":"pricing_legibility","external":["Assistants read price, availability and identifiers from every sampled product page."]}},{"id":"product_jsonld:products-tonal-grip-socks","kind":"product_jsonld","title":"Product markup for Tonal Grip Socks","path":"/products/tonal-grip-socks","effort":{"minutes":30,"role":"developer"},"outcome":{"dimension":"pricing_legibility","external":["Assistants read price, availability and identifiers from every sampled product page."]}},{"id":"product_jsonld_liquid:snippets-seconddoor-product-jsonld-liquid","kind":"product_jsonld_liquid","title":"Product markup snippet for every product page","path":"snippets/seconddoor-product-jsonld.liquid","effort":{"minutes":30,"role":"developer"},"outcome":{"dimension":"pricing_legibility","external":["Every Shopify product page carries complete Product markup, not only the sampled ones."]}},{"id":"review_schema_vendor:notes","kind":"review_schema_vendor","title":"Put Trustpilot 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:policies-refund-policy","kind":"policy_pages_text","title":"Returns and refunds page","path":"/policies/refund-policy","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":"policy_pages_text:policies-shipping-policy","kind":"policy_pages_text","title":"Shipping and delivery page","path":"/policies/shipping-policy","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":"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."]}},{"id":"pricing_md:pricing-md","kind":"pricing_md","title":"pricing.md","path":"/pricing.md","effort":{"minutes":20,"role":"owner"},"outcome":{"dimension":"agent_aware_instrumentation","external":["Agents read the price list directly instead of rendering the pricing page."]}},{"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."]}}]},"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":"pricing_legibility","checkId":"product_pages","key":"issue:pricing_legibility:product_pages"},{"type":"issue","dimensionKey":"machine_fetchable_trust","checkId":"store_policies","key":"issue:machine_fetchable_trust:store_policies"},{"type":"issue","dimensionKey":"steps_to_first_value","checkId":"entry_path","key":"issue:steps_to_first_value:entry_path"}]}}