{
  "title": "Agentic readiness of 1,580 online stores: a scan of UCP and ACP support",
  "captureDate": "2026-10-10",
  "source": {
    "endpoint": "https://asvaai-aeo-backend-prod-production.up.railway.app/api/v5/leaderboard",
    "method": "GET ?per_page=100&page=N&sort=score_desc, paged until rows is empty (16 pages). No API key. per_page caps at 100 and page at 200.",
    "apiStats": {
      "stores_tracked": 1580,
      "avg_score": 29,
      "manifest_pct": 21
    },
    "apiTotal": 1580,
    "rowsFetched": 1580,
    "humanInterface": "https://trucommerce.ai/free-tools/agentic-readiness",
    "leaderboard": "https://trucommerce.ai/free-tools/agentic-readiness/leaderboard"
  },
  "unit": "One row per scanned domain, latest scan only. Stores are self-selected: someone chose to scan them through the free tool. Every share is count / n among the stores we scanned.",
  "scoring": "Score is the scanner's 0 to 100 readiness score and grade is its label for that score, both as stored by the backend at scan time. Mean and median exclude rows with a null score; nWithScore states how many rows had one.",
  "n": 1580,
  "distinctDomains": 1580,
  "duplicateDomainRows": 0,
  "score": {
    "n": 1580,
    "nWithScore": 1580,
    "mean": 28.5,
    "median": 16.1,
    "meanRaw": 28.53751152828392,
    "medianRaw": 16.079742440657935
  },
  "grades": [
    {
      "grade": "Very Poor",
      "count": 1246,
      "sharePct": 78.9
    },
    {
      "grade": "Excellent",
      "count": 311,
      "sharePct": 19.7
    },
    {
      "grade": "Poor",
      "count": 11,
      "sharePct": 0.7
    },
    {
      "grade": "Very Good",
      "count": 11,
      "sharePct": 0.7
    },
    {
      "grade": "Good",
      "count": 1,
      "sharePct": 0.1
    }
  ],
  "protocols": {
    "n": 1580,
    "ucpManifest": {
      "count": 326,
      "sharePct": 20.6
    },
    "acp": {
      "count": 323,
      "sharePct": 20.4
    },
    "both": {
      "count": 323,
      "sharePct": 20.4
    },
    "neither": {
      "count": 1254,
      "sharePct": 79.4,
      "label": "zero protocol support (neither UCP nor ACP)"
    }
  },
  "platforms": [
    {
      "platform": "Custom / Headless",
      "n": 1188,
      "nWithScore": 1188,
      "mean": 11.6,
      "median": 13.3,
      "meanRaw": 11.562559109166525,
      "medianRaw": 13.300853196099675,
      "ucpManifestSharePct": 0.3,
      "acpSharePct": 0.3,
      "neitherSharePct": 99.7,
      "defensible": true
    },
    {
      "platform": "Shopify",
      "n": 363,
      "nWithScore": 363,
      "mean": 84.1,
      "median": 94.4,
      "meanRaw": 84.06839676138551,
      "medianRaw": 94.36515718981049,
      "ucpManifestSharePct": 87.3,
      "acpSharePct": 86.5,
      "neitherSharePct": 12.7,
      "defensible": true
    },
    {
      "platform": "WooCommerce",
      "n": 17,
      "nWithScore": 17,
      "mean": 19,
      "median": 18.4,
      "meanRaw": 19.044305942607515,
      "medianRaw": 18.414729636560622,
      "ucpManifestSharePct": 0,
      "acpSharePct": 0,
      "neitherSharePct": 100,
      "defensible": false
    },
    {
      "platform": "BigCommerce",
      "n": 7,
      "nWithScore": 7,
      "mean": 57.8,
      "median": 71.1,
      "meanRaw": 57.762029046238645,
      "medianRaw": 71.14802820130689,
      "ucpManifestSharePct": 71.4,
      "acpSharePct": 71.4,
      "neitherSharePct": 28.6,
      "defensible": false
    },
    {
      "platform": "Magento",
      "n": 5,
      "nWithScore": 5,
      "mean": 21.6,
      "median": 22.6,
      "meanRaw": 21.606512853343837,
      "medianRaw": 22.60878558061657,
      "ucpManifestSharePct": 0,
      "acpSharePct": 0,
      "neitherSharePct": 100,
      "defensible": false
    }
  ],
  "shopifySplit": {
    "withUcpManifest": {
      "n": 317,
      "nWithScore": 317,
      "mean": 93.4,
      "median": 95,
      "meanRaw": 93.39228624802666,
      "medianRaw": 94.95245540561338
    },
    "withoutUcpManifest": {
      "n": 46,
      "nWithScore": 46,
      "mean": 19.8,
      "median": 21.4,
      "meanRaw": 19.814636603445543,
      "medianRaw": 21.438331035162022
    }
  },
  "customHeadlessDistribution": {
    "n": 1188,
    "min": 0.8,
    "p25": 1.4,
    "median": 13.3,
    "p75": 18.8,
    "max": 76.3,
    "withUcpManifest": 4
  },
  "scanDates": {
    "earliest": "2026-05-14",
    "latest": "2026-10-09",
    "nullCount": 0,
    "may2026Count": 1547,
    "may2026SharePct": 97.9,
    "sinceJune2026Count": 33,
    "byMonth": [
      {
        "month": "2026-05",
        "count": 1547,
        "sharePct": 97.9
      },
      {
        "month": "2026-06",
        "count": 3,
        "sharePct": 0.2
      },
      {
        "month": "2026-07",
        "count": 12,
        "sharePct": 0.8
      },
      {
        "month": "2026-08",
        "count": 3,
        "sharePct": 0.2
      },
      {
        "month": "2026-09",
        "count": 10,
        "sharePct": 0.6
      },
      {
        "month": "2026-10",
        "count": 5,
        "sharePct": 0.3
      }
    ]
  },
  "checkBattery": {
    "note": "Dimension labels and per-dimension check counts as returned by GET /api/v5/scan-public/by-domain for the top and bottom ranked store on the capture date. The scanner's full battery is 147 checks across nine dimensions; a store that exposes no UCP manifest receives fewer UCP checks, so the count run per store varies. Totals here are the sum of check_count across dimensions.",
    "topRanked": {
      "domain": "isabelmarant.com",
      "platform": "Shopify",
      "manifestVerified": true,
      "totalChecks": 147,
      "counters": {
        "passed": 133,
        "warn": 5,
        "failed": 1,
        "info": 6
      },
      "rollups": [
        {
          "id": "ucp",
          "label": "UCP Compliance"
        },
        {
          "id": "acp",
          "label": "ACP Readiness"
        },
        {
          "id": "infra",
          "label": "Infrastructure"
        }
      ],
      "dimensions": [
        {
          "id": "ucp_manifest",
          "label": "UCP Manifest Compliance",
          "checkCount": 16,
          "assessed": true
        },
        {
          "id": "ucp_transport",
          "label": "UCP Transport Readiness",
          "checkCount": 11,
          "assessed": true
        },
        {
          "id": "ucp_capability",
          "label": "UCP Capability Coverage",
          "checkCount": 44,
          "assessed": true
        },
        {
          "id": "acp_checkout",
          "label": "ACP Checkout Readiness",
          "checkCount": 14,
          "assessed": true
        },
        {
          "id": "acp_payment",
          "label": "ACP Payment Readiness",
          "checkCount": 13,
          "assessed": true
        },
        {
          "id": "ai_agent_access",
          "label": "AI Agent Accessibility",
          "checkCount": 34,
          "assessed": true
        },
        {
          "id": "cross_protocol",
          "label": "Cross-Protocol Coherence",
          "checkCount": 1,
          "assessed": true
        },
        {
          "id": "security",
          "label": "Security & Trust",
          "checkCount": 7,
          "assessed": true
        },
        {
          "id": "product_data",
          "label": "Product Data Quality",
          "checkCount": 7,
          "assessed": true
        }
      ]
    },
    "bottomRanked": {
      "domain": "endymattress.com",
      "platform": "Custom / Headless",
      "manifestVerified": false,
      "totalChecks": 100,
      "counters": {
        "passed": 2,
        "warn": 10,
        "failed": 40,
        "info": 12
      },
      "rollups": [
        {
          "id": "ucp",
          "label": "UCP Compliance"
        },
        {
          "id": "acp",
          "label": "ACP Readiness"
        },
        {
          "id": "infra",
          "label": "Infrastructure"
        }
      ],
      "dimensions": [
        {
          "id": "ucp_manifest",
          "label": "UCP Manifest Compliance",
          "checkCount": 13,
          "assessed": true
        },
        {
          "id": "ucp_transport",
          "label": "UCP Transport Readiness",
          "checkCount": 6,
          "assessed": true
        },
        {
          "id": "ucp_capability",
          "label": "UCP Capability Coverage",
          "checkCount": 12,
          "assessed": true
        },
        {
          "id": "acp_checkout",
          "label": "ACP Checkout Readiness",
          "checkCount": 14,
          "assessed": true
        },
        {
          "id": "acp_payment",
          "label": "ACP Payment Readiness",
          "checkCount": 6,
          "assessed": true
        },
        {
          "id": "ai_agent_access",
          "label": "AI Agent Accessibility",
          "checkCount": 34,
          "assessed": true
        },
        {
          "id": "cross_protocol",
          "label": "Cross-Protocol Coherence",
          "checkCount": 1,
          "assessed": true
        },
        {
          "id": "security",
          "label": "Security & Trust",
          "checkCount": 7,
          "assessed": true
        },
        {
          "id": "product_data",
          "label": "Product Data Quality",
          "checkCount": 7,
          "assessed": true
        }
      ]
    }
  },
  "checksPerStoreInApi": false,
  "perCheckAggregation": "Not possible from this endpoint. See docs/AGENTIC-READINESS-RESEARCH-NOTE.md for the SQL over the backend audit table.",
  "notExposedByApi": [
    "Per-check pass/warn/fail status: the leaderboard row carries score, grade, platform, ucp, acp and fetched_at only. The `checks` array is released per store through the work-email unlock, not in aggregate. Aggregating it needs the backend SQL in docs/AGENTIC-READINESS-RESEARCH-NOTE.md.",
    "Which specific checks fail most often, so no 'X% fail structured data' style claim can be made from this capture.",
    "is_ecommerce, fetch_latency_ms and manifest_verified per store (present on /scan-public/by-domain, absent from leaderboard rows), so fetch failures cannot be separated from low scores without one extra request per store.",
    "Vertical, category, country or revenue band: the API has no such labels, so no category cut is possible.",
    "Scan history: one row per domain, the latest scan only. Re-scans overwrite, so adoption over time cannot be read from this endpoint.",
    "Conversion, traffic or revenue: the scanner measures what a storefront exposes to agents, nothing downstream of it."
  ],
  "caveatsSource": "docs/AGENT-READINESS-SERIES-SCOPE.md (2026-09-19), section 4 and Appendix. Quoted as written; the only edit is that em dashes are rendered as ' - ' and the counts inside the quotes (1,572 rows, 358 Shopify, 5 Magento) are the 19 September figures, not this capture.",
  "caveats": [
    {
      "id": "stale-dates",
      "text": "(a) The data is four months stale. 1,548 of 1,572 scans are from May 2026; only 24 since June. Protocol adoption moves fast and a May UCP percentage is not a September one. A fresh run is required before any number is published."
    },
    {
      "id": "small-platform-n",
      "text": "(b) Per-platform claims beyond Shopify vs Custom are not supported. WooCommerce n=16, BigCommerce n=7, Magento n=5, and zero for Wix, Squarespace, PrestaShop, OpenCart, Shopware. To say anything about those we need ~50 scans each, which needs a domain list per platform. Until then, posts 1-4 compare Shopify against custom/headless only, and say so."
    },
    {
      "id": "custom-headless-confound",
      "text": "(c) The Custom/Headless confound is not resolved. \"Custom / Headless\" is what the scanner assigns when it cannot identify a platform - the same bucket-shape problem as Store Leads' Custom Cart. A site the scanner cannot fingerprint may also be one it cannot fetch cleanly, which would depress the score for reasons unrelated to real readiness. The distribution argues against pure artifact (min 0.8, p25 1.4, median 13.2, max 76.3 - a real spread, and 4 do carry UCP). But before the headline claim ships, hand-check ~20 of them. If a meaningful share are fetch failures, finding (c) weakens and the post changes."
    },
    {
      "id": "selection-bias",
      "text": "Selection bias, stated plainly: these are stores someone chose to scan - prospects, demo targets, competitors. Not a random sample of the web. Shopify is over-represented (358 scanned) relative to its share of the stores that exist, and Magento wildly under-represented (5 scanned against ~102,000 live). Every published number must carry that caveat. It supports \"among stores we scanned\", never \"of all stores\"."
    },
    {
      "id": "defensibility-threshold",
      "text": "Defensibility threshold n>=30 is mine, not a standard. Below it, report the number with the n attached or not at all."
    }
  ],
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "page": "https://trucommerce.ai/research/agentic-readiness-2026"
}
