{"scan_id": 36, "url": "https://www.thorne.com", "vertical": "supplements", "scanned_at": "2026-07-15T11:39:30.435631+00:00", "score": 40, "grade": "D", "report_url": "https://www.agentready.market/r/36", "result": {"url": "https://www.thorne.com", "meta": {"notes": [], "phase": "0 (pillars 1-2-3)", "origin": "https://www.thorne.com", "investment": {"ads": [], "apps": ["Yotpo"], "score": 1, "platform": "unknown", "qualified": false}, "home_status": 200, "product_url": "https://www.thorne.com/products/by-health-need/skin,-hair-&-nails", "shopify_feed": false, "robots_present": true}, "error": "", "grade": "D", "score": 40, "capped": false, "pillars": [{"id": "access", "pct": 90, "icon": "\ud83d\udd13", "name": "Access & crawlability", "checks": [{"id": "access.ai_crawlers", "fix": "", "gap": 0.0, "label": "robots.txt allows agent crawlers", "detail": "robots.txt allows GPTBot, ClaudeBot, PerplexityBot and Google-Extended.", "earned": 16.0, "effort": "easy", "pillar": "access", "status": "pass", "weight": 16.0}, {"id": "access.cloaking", "fix": "", "gap": 0.0, "label": "No blocking / cloaking of AI bots", "detail": "AI bots get the same access and content as a normal visitor.", "earned": 8.0, "effort": "medium", "pillar": "access", "status": "pass", "weight": 8.0}, {"id": "access.latency", "fix": "", "gap": 0.0, "label": "Fast enough response for agents", "detail": "Fast response (1045 ms on the homepage) \u2014 agents won't time out.", "earned": 4.0, "effort": "medium", "pillar": "access", "status": "pass", "weight": 4.0}, {"id": "access.llms_txt", "fix": "Publish an /llms.txt listing your categories, product pages and key policies.", "gap": 4.0, "label": "llms.txt present", "detail": "No /llms.txt.", "earned": 0.0, "effort": "easy", "pillar": "access", "status": "fail", "weight": 4.0}, {"id": "access.sitemap", "fix": "", "gap": 0.0, "label": "Sitemap available", "detail": "Sitemap found via robots.txt.", "earned": 4.0, "effort": "easy", "pillar": "access", "status": "pass", "weight": 4.0}, {"id": "access.no_js", "fix": "", "gap": 0.0, "label": "Content accessible without JS rendering", "detail": "Content present in raw HTML (104618 visible characters).", "earned": 4.0, "effort": "hard", "pillar": "access", "status": "pass", "weight": 4.0}], "earned": 36.0, "weight": 40.0}, {"id": "structured_data", "pct": 0, "icon": "\ud83c\udff7\ufe0f", "name": "Structured data", "checks": [{"id": "sd.product", "fix": "Add a <script type=\"application/ld+json\"> of type Product with name, image, brand, sku/gtin13, and offers{price, priceCurrency, availability}.", "gap": 12.0, "label": "Product JSON-LD present", "detail": "Product page detected but no Product JSON-LD \u2014 invisible to an agent.", "earned": 0.0, "effort": "medium", "pillar": "structured_data", "status": "fail", "weight": 12.0}, {"id": "sd.price", "fix": "Set offers.price and offers.priceCurrency in JSON-LD.", "gap": 8.0, "label": "Structured price + currency", "detail": "No price exposed inside offers.", "earned": 0.0, "effort": "easy", "pillar": "structured_data", "status": "fail", "weight": 8.0}, {"id": "sd.availability", "fix": "Add offers.availability (e.g. https://schema.org/InStock).", "gap": 5.0, "label": "Structured availability", "detail": "No availability field \u2014 the agent can't tell if it's in stock.", "earned": 0.0, "effort": "easy", "pillar": "structured_data", "status": "fail", "weight": 5.0}, {"id": "sd.brand", "fix": "Add the brand field to the Product.", "gap": 3.0, "label": "Structured brand", "detail": "No structured brand.", "earned": 0.0, "effort": "easy", "pillar": "structured_data", "status": "fail", "weight": 3.0}, {"id": "sd.identifier", "fix": "Expose sku and, if possible, gtin13 in the Product JSON-LD.", "gap": 4.0, "label": "Product identifier (SKU / GTIN)", "detail": "No identifier (sku/gtin/mpn) \u2014 the agent can't disambiguate the product.", "earned": 0.0, "effort": "medium", "pillar": "structured_data", "status": "fail", "weight": 4.0}, {"id": "sd.rating", "fix": "Expose aggregateRating (ratingValue + reviewCount) in JSON-LD.", "gap": 3.0, "label": "Aggregated reviews (aggregateRating)", "detail": "No aggregateRating \u2014 the agent can't compare your reputation.", "earned": 0.0, "effort": "medium", "pillar": "structured_data", "status": "fail", "weight": 3.0}], "earned": 0.0, "weight": 35.0}, {"id": "catalog", "pct": 0, "icon": "\ud83d\udce6", "name": "Catalog & attributes", "checks": [{"id": "cat.variants", "fix": "Expose variants (size, color) in JSON-LD or via the product feed.", "gap": 10.0, "label": "Structured variants", "detail": "No usable variant data.", "earned": 0.0, "effort": "medium", "pillar": "catalog", "status": "fail", "weight": 10.0}, {"id": "cat.attributes", "fix": "Expose attributes (color, size, material, category) as structured JSON-LD fields (additionalProperty) or via the feed.", "gap": 8.0, "label": "Attributes as fields (not prose)", "detail": "No structured filterable attribute \u2014 the agent can't filter.", "earned": 0.0, "effort": "medium", "pillar": "catalog", "status": "fail", "weight": 8.0}, {"id": "cat.feed", "fix": "Publish a product feed (Shopify products.json, Merchant Center feed) and OpenGraph product tags.", "gap": 7.0, "label": "Product feed / catalog signals", "detail": "No machine-readable product feed nor OpenGraph product tags.", "earned": 0.0, "effort": "medium", "pillar": "catalog", "status": "fail", "weight": 7.0}], "earned": 0.0, "weight": 25.0}], "roadmap": {"gain": 39, "steps": [{"n": 1, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No price exposed inside offers.", "title": "Structured price + currency", "effort": "easy", "impact": 8.0, "pillar": "Structured data", "check_id": "sd.price", "cumulative": 44}, {"n": 2, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Product page detected but no Product JSON-LD \u2014 invisible to an agent.", "title": "Product JSON-LD present", "effort": "medium", "impact": 12.0, "pillar": "Structured data", "check_id": "sd.product", "cumulative": 56}, {"n": 3, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No usable variant data.", "title": "Structured variants", "effort": "medium", "impact": 10.0, "pillar": "Catalog & attributes", "check_id": "cat.variants", "cumulative": 66}, {"n": 4, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No availability field \u2014 the agent can't tell if it's in stock.", "title": "Structured availability", "effort": "easy", "impact": 5.0, "pillar": "Structured data", "check_id": "sd.availability", "cumulative": 71}, {"n": 5, "how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No structured filterable attribute \u2014 the agent can't filter.", "title": "Attributes as fields (not prose)", "effort": "medium", "impact": 8.0, "pillar": "Catalog & attributes", "check_id": "cat.attributes", "cumulative": 79}], "capped": false, "current": 40, "grade_up": true, "projected": 79, "cap_reason": "", "target_grade": "B", "current_grade": "D"}, "headline": "Fragile. An agent struggles to understand your catalog.", "artifacts": {"jsonld": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\",\n  \"brand\": \"\u2022\u2022\u2022\u2022\u2022\u2022\",\n  \"offers\": { \"price\": \"\u2022\u2022\u2022\u2022\", \"availability\": \"\u2022\u2022\u2022\u2022\u2022\u2022\" }\n}\n</script>", "llms_txt": "# Thorne\n\n## Policies\n- Shipping: <add your delivery times and zones>\n- Returns: <add your return policy>\n\n## Sitemap\n- https://www.thorne.com/sitemap.xml", "available": true, "attribute_map": [{"source": "\u2022\u2022\u2022\u2022", "schema_field": "\u2022\u2022\u2022\u2022", "example": "\u2022\u2022\u2022\u2022"}]}, "benchmark": {"delta": -16, "median": 56, "verdict": "Below the supplements median (-16).", "vertical": "supplements", "percentile": 26, "provisional": false, "sample_size": 19, "vertical_label": "supplements"}, "final_url": "https://www.thorne.com", "protocols": [{"id": "proto.ucp_mcp", "label": "Shopify/UCP agent endpoint (/api/ucp/mcp)", "detail": "/api/ucp/mcp responds (HTTP 401) \u2014 an agent can reach your UCP Catalog/Checkout endpoint.", "points": 4, "status": "pass"}, {"id": "proto.a2a_card", "label": "A2A Agent Card (/.well-known/agent-card.json)", "detail": "No A2A Agent Card \u2014 your store publishes no machine-readable agent for buyer-agents to discover and call. (So do ~all stores today: this is the frontier, not the baseline.)", "points": 3, "status": "fail"}, {"id": "proto.ard_catalog", "label": "ARD AI Catalog (/.well-known/ai-catalog.json)", "detail": "No AI Catalog \u2014 under the new Google/Microsoft ARD spec (June 2026), agents look here first to learn what a site offers. Adoption is ~0% today, so publishing one puts you ahead of nearly the entire web (including the spec authors).", "points": 3, "status": "fail"}, {"id": "act.checkout", "label": "Add-to-cart action detectable", "detail": "The product page exposes a machine-visible add-to-cart action in its raw HTML \u2014 an agent can locate where the purchase starts.", "points": 0, "status": "pass"}, {"id": "access.agent_class", "label": "Shopping-agent access (Agent class)", "detail": "On-demand shopping agents (ChatGPT-User, Claude-User, Perplexity-User) load the site like a normal visitor.", "points": 0, "status": "pass"}, {"id": "proto.x402", "label": "x402 / HTTP-402 payments", "detail": "No standard discovery path exists yet for x402 \u2014 we track the spec and will probe it the moment a convention settles.", "points": 0, "status": "na"}, {"id": "access.citation_rail", "label": "Citation-rail access (Bingbot, OAI-SearchBot, Google-Extended)", "detail": "Bingbot and OAI-SearchBot get in, and Google-Extended is allowed \u2014 the indexes feeding ChatGPT, Copilot and Gemini answers can all read this store.", "points": 0, "status": "pass"}, {"id": "access.content_signal", "label": "Content-Signal directives (robots.txt)", "detail": "No Content-Signal directives \u2014 the Cloudflare-era content switches aren't set on this store (that's the common case; nothing is being blocked by them).", "points": 0, "status": "na"}, {"id": "access.canonical", "label": "Canonical address coherence", "detail": "The declared canonical address matches where the site actually answers \u2014 no identity contradiction for machines to untangle.", "points": 0, "status": "pass"}, {"id": "access.machine_entry", "label": "Machine entry points advertised at first contact", "detail": "The homepage points to no machine resources \u2014 no <head> link to llms.txt, a feed or an agent endpoint, and no HTTP Link header. An agent that fetches only the root sees no signposts and can conclude there's no machine access, even when you serve those files. Link them from the page and echo them in a Link response header.", "points": 0, "status": "fail"}, {"id": "p6.returns_shipping", "label": "Returns & shipping in offers (P6 preview)", "detail": "No machine-readable product found \u2014 returns/shipping fields can't be assessed (fix the product sheet first).", "points": 0, "status": "na"}], "top_fixes": [{"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No price exposed inside offers.", "title": "Structured price + currency", "effort": "easy", "impact": 8.0, "pillar": "Structured data", "check_id": "sd.price"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "Product page detected but no Product JSON-LD \u2014 invisible to an agent.", "title": "Product JSON-LD present", "effort": "medium", "impact": 12.0, "pillar": "Structured data", "check_id": "sd.product"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No usable variant data.", "title": "Structured variants", "effort": "medium", "impact": 10.0, "pillar": "Catalog & attributes", "check_id": "cat.variants"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No availability field \u2014 the agent can't tell if it's in stock.", "title": "Structured availability", "effort": "easy", "impact": 5.0, "pillar": "Structured data", "check_id": "sd.availability"}, {"how": "\u2022\u2022\u2022\u2022\u2022\u2022 Unlock the exact fix with Pro", "why": "No structured filterable attribute \u2014 the agent can't filter.", "title": "Attributes as fields (not prose)", "effort": "medium", "impact": 8.0, "pillar": "Catalog & attributes", "check_id": "cat.attributes"}], "cap_reason": "", "proto_bonus": 4}}