Datasets API endpoint
Returns distribution counts over the AI-readiness census (dataset id enum value `llms`), honoring the same filters as search — adoption by producer, generator, TLD or category, and which AI crawlers robots.txt blocks. Facet enum: `state`, `source_kind`, `generator`, `bot`, `policy`, `tld`, `category`, `robots_state`, `robots_default`, `blocked_crawler`, `partial_crawler`, `content_signal_train`, `full_state`, `home_status`. The filter enums are the same as search. Counts include `blocked` and `error` probes, which are unknown rather than absent; filter `state=present` or `state=absent` to count only sites that were established either way.
/datasets/llms/facetsReturns distribution counts over the AI-readiness census, honoring the same filters
as search — adoption by producer, generator, TLD or category, and which AI crawlers
robots.txt blocks. Site owners can ask for their domain to be removed at privacy@crawlora.net; a removed domain is deleted from the dataset and not scanned again.
Dataset id enum:
llmsQuery parameters:
facet: required facet to aggregate. Allowed values: state, source_kind, generator, bot, policy, tld, category, robots_state, robots_default, blocked_crawler, partial_crawler, content_signal_train, full_state, home_status.q: optional substring match on the site domain, max 256 characters.text: optional full-text match on the /llms.txt title and summary, max 256 characters.state: optional /llms.txt state. Allowed values: present, absent, blocked, error, skipped. blocked and error mean unknown, not absent; skipped means the site's homepage control did not answer, so the file was not requested.valid: optional filter; true keeps only sites serving a valid /llms.txt (state present), false keeps the rest.source_kind: optional producer of a valid /llms.txt. Allowed values: shopify_agent_template, seo_plugin, platform_default, parked, custom.generator: optional generator detected in a valid /llms.txt. Allowed values: yoast, aioseo, rankmath, wix, shopify, parked.bot: optional AI crawler named inside a valid /llms.txt, e.g. GPTBot. Use facet=bot for the values.min_links: optional minimum number of links in a valid /llms.txt, 0 or greater.mentions_mcp: optional filter; true keeps only valid files that mention the Model Context Protocol.mentions_openapi: optional filter; true keeps only valid files that mention OpenAPI or Swagger.placeholder: optional filter; true keeps only valid files that still hold template placeholder text.injection: optional filter; true keeps only valid files containing instruction-override text aimed at AI readers.full_valid: optional filter; true keeps only sites serving a valid /llms-full.txt.robots_state: optional /robots.txt state. Allowed values: present, absent, blocked, error, skipped.robots_default: optional default stance of robots.txt toward AI crawlers. Allowed values: allowed, partial, blocked.blocks_all: repeatable AI crawler that robots.txt must block (AND). Allowed values: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot.blocks_any: repeatable AI crawler; robots.txt must block at least one (OR). Same allowed values as blocks_all.not_blocked: repeatable AI crawler that robots.txt must not block. Same allowed values as blocks_all.all_ai_blocked: optional filter; true keeps only sites whose robots.txt blocks all 17 tracked AI crawlers.min_train_blocked: optional minimum number of AI training crawlers (of 11 tracked) that robots.txt blocks, 0 or greater.content_signal_train: optional Content-Signal ai-train value declared in robots.txt. Allowed values: yes, no. A robots.txt that writes anything else there is treated as declaring neither.tld: optional exact top-level-domain filter, e.g. com, org, io.category: optional exact category label carried by the source list. The top-1M run has none, so the filter matches nothing and facet=category is empty for it.reachable: optional filter; true keeps only sites whose homepage control request answered, false only sites that did not.home_blocked: optional filter; true keeps only sites whose homepage was walled off from the scan (a block or challenge).is_infrastructure: optional filter; false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but serve no public homepage; true keeps only those.run_id: optional scan run id; defaults to the latest run.How to read the states:
present: a valid file was served. Validity is judged from the body, not from the status code or content type.absent: the site answered 404/410, or answered 200 with something that is not a file (a soft-404 page, HTML, an empty body).blocked: the site refused the request (401, 403, 429, a bot challenge). This is unknown, not absent.error: a transport failure or a 5xx. This is unknown, not absent.skipped: the homepage control request did not answer, so the path was not requested.present over present plus absent.Response behavior:
50 buckets, each with the facet value and its count, ordered by count.blocked and error probes, which are unknown rather than absent. Filter state=present or state=absent to count only sites that were established either way.policy values are rate_limit, copyright, no_training, citation: terms detected in a valid /llms.txt.facet values and invalid filter values return the standard invalid params envelope.items array (not an error) when nothing matches or the dataset has no data yet.| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| value | 5 | |
| count | 5 | 796 to 44,801, median 15,526 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| facet | string | Yes | Facet enum: state, source_kind, generator, bot, policy, tld, category, robots_state, robots_default, blocked_crawler, partial_crawler, content_signal_train, full_state, home_status Allowed values: state, source_kind, generator, bot, policy, tld, category, robots_state, robots_default, blocked_crawler, partial_crawler, content_signal_train, full_state, home_status. | source_kind | |
| q | string | No | Substring match on the site domain, max 256 characters | ||
| text | string | No | Full-text match on the /llms.txt title and summary, max 256 characters | ||
| state | string | No | /llms.txt state. Enum: present, absent, blocked, error, skipped. blocked and error mean unknown, not absent Allowed values: present, absent, blocked, error, skipped. | ||
| valid | boolean | No | true keeps only sites serving a valid /llms.txt, false keeps the rest | ||
| source_kind | string | No | Producer of a valid /llms.txt. Enum: shopify_agent_template, seo_plugin, platform_default, parked, custom Allowed values: shopify_agent_template, seo_plugin, platform_default, parked, custom. | ||
| generator | string | No | Generator detected in a valid /llms.txt. Enum: yoast, aioseo, rankmath, wix, shopify, parked Allowed values: yoast, aioseo, rankmath, wix, shopify, parked. | ||
| bot | string | No | AI crawler named inside a valid /llms.txt, e.g. GPTBot (see facet=bot for the values) | ||
| min_links | integer | No | Minimum number of links in a valid /llms.txt, 0 or greater | ||
| mentions_mcp | boolean | No | true keeps only valid /llms.txt files that mention the Model Context Protocol | ||
| mentions_openapi | boolean | No | true keeps only valid /llms.txt files that mention OpenAPI or Swagger | ||
| placeholder | boolean | No | true keeps only valid /llms.txt files that still hold template placeholder text | ||
| injection | boolean | No | true keeps only valid /llms.txt files containing instruction-override text aimed at AI readers | ||
| full_valid | boolean | No | true keeps only sites serving a valid /llms-full.txt | ||
| robots_state | string | No | /robots.txt state. Enum: present, absent, blocked, error, skipped Allowed values: present, absent, blocked, error, skipped. | ||
| robots_default | string | No | Default stance of robots.txt toward AI crawlers. Enum: allowed, partial, blocked Allowed values: allowed, partial, blocked. | ||
| blocks_all | array<string> | No | Repeatable AI crawler that robots.txt must block (AND). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot Allowed values: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot. | ||
| blocks_any | array<string> | No | Repeatable AI crawler; robots.txt must block at least one (OR). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot Allowed values: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot. | ||
| not_blocked | array<string> | No | Repeatable AI crawler that robots.txt must NOT block. Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot Allowed values: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot. | ||
| all_ai_blocked | boolean | No | true keeps only sites whose robots.txt blocks all 17 tracked AI crawlers | ||
| min_train_blocked | integer | No | Minimum number of AI training crawlers (of 11 tracked) that robots.txt blocks, 0 or greater | ||
| content_signal_train | string | No | Content-Signal ai-train value declared in robots.txt. Enum: yes, no Allowed values: yes, no. | ||
| tld | string | No | Exact top-level-domain filter, e.g. com, org, io | ||
| category | string | No | Exact category label carried by the source list; the top-1M run has none, so this is empty for it | ||
| reachable | boolean | No | true keeps only sites whose homepage control request answered, false only sites that did not | ||
| home_blocked | boolean | No | true keeps only sites whose homepage was walled off from the scan (a block or challenge) | ||
| is_infrastructure | boolean | No | false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but serve no public homepage; true keeps only those | ||
| run_id | string | No | the latest run | Scan run id; defaults to the latest run | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/datasets/llms/facets?facet=source_kind&q=coffee&state=present&valid=true&source_kind=shopify_agent_template&generator=yoast&mentions_mcp=true&mentions_openapi=true&placeholder=true&injection=true&full_valid=true&robots_state=present&robots_default=allowed&blocks_all=GPTBot&blocks_any=GPTBot¬_blocked=GPTBot&all_ai_blocked=true&content_signal_train=yes&reachable=true&home_blocked=true&is_infrastructure=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "llms",
"facet": "source_kind",
"items": [
{
"value": "custom",
"count": 41820
},
{
"value": "shopify_agent_template",
"count": 29470
},
{
"value": "seo_plugin",
"count": 18160
}
]
}
}Request schema
No body schema
Response schema
#/definitions/datasets.llmsFacetResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | datasets.LlmsFacetResponse | No | ||||
| data.dataset | string | No | ||||
| data.facet | string | No | ||||
| data.items | array | No | ||||
| data.items[].count | integer | No | ||||
| data.items[].value | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/datasets/llms/facets?facet=source_kind&q=coffee&state=present&valid=true&source_kind=shopify_agent_template&generator=yoast&mentions_mcp=true&mentions_openapi=true&placeholder=true&injection=true&full_valid=true&robots_state=present&robots_default=allowed&blocks_all=GPTBot&blocks_any=GPTBot¬_blocked=GPTBot&all_ai_blocked=true&content_signal_train=yes&reachable=true&home_blocked=true&is_infrastructure=true" \
-H "x-api-key: $CRAWLORA_API_KEY"