API

All data comes from our own checks and is available as static JSON files. No authentication, open CORS. Generated: 2026-10-18T18:03:01Z

URLContent
https://shopsforbots.com/api/index.jsonCompact index of all shops (short keys: d=domain, n=name, s=score, p=protocols, k=capabilities, c=category)
https://shopsforbots.com/api/chunks/NNN.jsonDetail records for shops without a static page, 256 files; file = fnv1a-32(domain) mod 256 (see example)
https://shopsforbots.com/api/shops/<domain>.jsonOne shop with all fields (shops that have their own page here), e.g. /api/shops/allbirds.com.json
https://shopsforbots.com/api/stats.jsonCounts per status, category, country, platform, protocol; score distribution
https://shopsforbots.com/api/changelog.jsonChangelog (added, delisted, score changes)
https://shopsforbots.com/api/searchLive search (q, category, country, platform, min_score, status, protocol, limit, offset), docs on /bot/
https://shopsforbots.com/api/shop/<domain>Full record of one shop
https://shopsforbots.com/api/openapi.jsonOpenAPI 3.1
https://shopsforbots.com/mcpMCP server (Streamable HTTP), tools: search_shops, get_shop, list_categories, get_stats
https://shopsforbots.com/llms.txtDescription of this directory for agents
https://shopsforbots.com/.well-known/shopsforbots.jsonMachine-readable description and endpoint list

Examples

# Best-scoring shops from the compact index
curl -s https://shopsforbots.com/api/index.json | jq '[.shops[]] | sort_by(-.s) | .[:20] | .[] | {d, n, s}'

# Shops with UCP and MCP signals, best score first (live search API)
curl -s 'https://shopsforbots.com/api/search?protocol=ucp,mcp&limit=20'

# One shop (works for every listed domain)
curl -s https://shopsforbots.com/api/shop/allbirds.com | jq '{score: .agent_readiness, caps: .capabilities}'

Fields (excerpt)

FieldTypeMeaning
domainstringDomain without www.
statusverified | partial | unreachablesee methodology
agent_readiness0–85heuristic score, breakdown in score_breakdown
score_confidence0–1check coverage
protocols["ucp","webmcp","mcp"]protocols confirmed by our checks (webmcp = hint in homepage HTML, not tested)
capabilities["search","cart","checkout","order",…]from the UCP manifest
ucpobject | nullvalid, version, capabilities, mcp_endpoints, payment_handlers, manifest_url
robots_aiobject | nullstance per AI bot
country, euISO-2 | null, bool | nullcompany country only with evidence (country_source)
checksobjectstate and timestamp per check
last_checkedISO 8601UTC

Unknown values are null. The schema is versioned (schema_version) and may change.

MCP endpoints (ucp.mcp_endpoints) are taken from the manifest and not tested by a call.

Finding a chunk file

# JavaScript: file number for a domain
function fnv(s){let h=2166136261;for(const b of new TextEncoder().encode(s)){h^=b;h=Math.imul(h,16777619)>>>0}return h>>>0}
const n = String(fnv('example.com') % 256).padStart(3,'0');   // -> /api/chunks/<n>.json, object keyed by domain

Usage and license

Please cache the files and fetch them at most once an hour. All data is collected by us (our own requests to each domain, see methodology) and may be used under fair use for private purposes. For commercial use, please get in touch: [email protected]. This covers the data and scores we generate. Shop names and trademarks remain with their owners.

by @paulnlFollow on X