# AI Search Readiness Checker - AI Bots, llms.txt & Schema

> Check if ChatGPT, Perplexity, Claude and Google's AI can read and cite your site: robots.txt rules for 17 AI bots, server-level blocking, llms.txt, sitemap, structured data and a 0-100 score with fixes. From $0.005 per site.

- Category: AI search visibility
- Price: $5 per 1,000 × site checked, billed per result by Apify (no subscription); any other billed events are listed on the Store page. Cap any run with `maxTotalChargeUsd`.
- Store page: https://apify.com/wrenfield-data/ai-search-readiness-checker
- Human page: https://wrenfielddata.com/tools/ai-search-readiness-checker/
- OpenAPI 3 spec: https://api.apify.com/v2/acts/wrenfield-data~ai-search-readiness-checker/builds/default/openapi.json
- MCP tool: https://mcp.apify.com?tools=wrenfield-data/ai-search-readiness-checker (appears as `wrenfield-data--ai-search-readiness-checker`)

## Call it

Synchronous run that returns the dataset rows as JSON (use `/runs` for long jobs and poll; see the OpenAPI spec):

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/wrenfield-data~ai-search-readiness-checker/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sites": ["apify.com", "bbc.com", "example.com"], "testServerBlocking": true}'
```

## Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `sites` | array |  |  | One website or page per line (up to 1,000). https:// is added when missing. A domain checks the homepage; a full URL checks that page. Site-wide files (robots.txt, llms.txt, sitemap) are always read from the site root. |
| `testServerBlocking` | boolean |  | `true` | Also requests the page with the published user-agent strings of OAI-SearchBot, PerplexityBot and ClaudeBot and reports whether the server answers 403 or 429 while a browser gets the page. Many CDN bot rules do this even when robots.txt allows the bots. Real crawlers may be verified by IP, so a pass is not proof. |

## Example input

```json
{
  "sites": [
    "apify.com",
    "bbc.com",
    "example.com"
  ],
  "testServerBlocking": true
}
```

## Output fields

One flat row per result:

| Field | Type | Description |
|---|---|---|
| `site` | string | Hostname checked |
| `url` | string | URL submitted |
| `final_url` | string | URL after redirects |
| `status` | string | ok or error |
| `error` | string | Why the site could not be checked |
| `http_status` | number | HTTP status of the page |
| `readiness_score` | number | 0-100 AI search readiness score |
| `grade` | string | A-F grade |
| `issues_critical` | number | Critical issues |
| `issues_high` | number | High-priority issues |
| `issues_medium` | number | Medium issues |
| `issues_low` | number | Low issues |
| `issues` | array | Issues sorted by severity, each with a fix |
| `search_bots_allowed` | array | AI search bots robots.txt allows |
| `search_bots_blocked` | array | AI search bots robots.txt blocks |
| `training_bots_blocked` | array | AI training bots robots.txt blocks (a choice, not scored) |
| `bots` | object | Allowed (true), blocked (false) or unknown (null) per bot |
| `robots_status` | number | HTTP status of /robots.txt |
| `robots_blocks_all` | boolean | robots.txt blocks all crawlers from the whole site |
| `firewall` | object | HTTP status the server returned to each tested AI user agent |
| `llms_txt` | boolean | A valid /llms.txt exists |
| `llms_full_txt` | boolean | A valid /llms-full.txt exists |
| `sitemap` | boolean | A sitemap was found |
| `sitemap_url` | string | Sitemap URL found |
| `sitemap_urls_in_first_file` | number | URLs listed in the first sitemap file |
| `title` | string | Page title |
| `meta_description` | string | Meta description |
| `canonical` | string | Canonical URL |
| `lang` | string | html lang attribute |
| `h1_count` | number | H1 headings in the HTML |
| `words_in_html` | number | Words of visible text in the raw HTML |
| `js_shell_suspected` | boolean | Little text in raw HTML plus script-heavy markup |
| `schema_types` | array | JSON-LD @type values |
| `same_as_links` | number | sameAs links in structured data |
| `open_graph` | boolean | Open Graph tags present |
| `noindex_meta` | boolean | noindex in the robots meta tag |
| `noindex_header` | boolean | noindex in the X-Robots-Tag header |
| `noai_meta` | boolean | noai/noimageai in the robots meta tag |
| `checked_at` | string | UTC timestamp |

## Notes

- Auth: an Apify API token as `Authorization: Bearer <token>`; the MCP server also supports OAuth sign-in.
- Failed or empty results are not charged on most tools; check the pricing on the Store page.
- Questions: hello@wrenfielddata.com
