Readiness
Readiness is the “Search Console of agentic commerce”: a score out of 100, per market, telling how well AI assistants can read and sell the brand’s products. It averages the blocks Skoup can measure — AI crawlability (robots.txt towards each assistant’s search, browsing and training bots — OAI-SearchBot, Claude-SearchBot, PerplexityBot, GPTBot, ClaudeBot… —, Content-Signal, llms.txt, content readable without JavaScript), structured data on product pages (valid price, availability, GTIN, reviews, shipping and return policy, as in Google merchant listings), feed conformity of each product to the OpenAI product feed spec, and checkout eligibility (ACP / UCP, read from the site’s /.well-known/ucp profile when it has one). A block that cannot be measured is left out of the average, never guessed. The feed and checkout blocks exist for products sold online only: a brand selling software or running an establishment (its vertical) is scored on crawlability and structured data, each weighing half — on its key pages (pricing, features, FAQ for software; contact, services, opening hours for an establishment) and with the checks of its vertical: schema_software_present, schema_faq_present, schema_offer_price for software, schema_local_business_present, schema_local_business_address, schema_local_business_phone, schema_opening_hours for an establishment.
The score is computed again after every SEO crawl of the market (every Monday for active markets) and after every catalogue synchronization.
I want to…
| I want to… | Call |
|---|---|
| Read the score of the primary market | GET /v1/brands/{brand}/readiness |
| Read it on another market | GET /v1/brands/{brand}/readiness?market=US |
| Be told when it changes | readiness.score.updated (with previous_score) |
| Know when the crawl behind it ended | seo.crawl.completed |
| Get the fixes it calls for | GET /v1/brands/{brand}/tasks?source=readiness |
Scope: metrics:read.
Scenario: flag a regression after a deploy
Subscribe to readiness.score.updated and alert when the score drops:
if (event.type === 'readiness.score.updated') {
const { score, previous_score } = event.data.object
if (previous_score !== null && score < previous_score - 5) {
await pageOnCall(`Readiness fell from ${previous_score} to ${score}`)
}
}Pitfalls
- 404 before the first audit. A market never crawled answers
404 resource_missing: there is no score to return. - Each non-compliant check becomes a task (
source: readiness): act on the task list rather than recomputing the checks yourself. - Blocking GPTBot does not remove the site from ChatGPT. A blocked training bot (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended) gives a
warn: a possible choice, the pages remain citable. Only a blocked search bot (OAI-SearchBot, Claude-SearchBot, PerplexityBot) gives anerr, because the assistant can no longer cite the pages. AContent-Signalsayingsearch=noorai-input=noto the search bots gives awarn.