# AI Search & SEO Audit: GEO, llms.txt & Schema Checker (`pandadad0214/ai-search-seo-audit`) Actor

Use this to audit web pages for SEO and AI search (ChatGPT, Perplexity, Claude, AI Overviews) readiness. Input: URLs. Output: SEO and AI scores, blocked AI crawlers, schema, FAQ, author/date, llms.txt and prioritized fixes, plus Excel.

- **URL**: https://apify.com/pandadad0214/ai-search-seo-audit.md
- **Developed by:** [Panda Federation](https://apify.com/pandadad0214) (community)
- **Categories:** SEO tools, AI, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AI Search & SEO Audit: GEO, llms.txt & Schema Checker

> **AI search audit (GEO / AEO) plus SEO checker** on Apify: give it URLs and get two 0-100 scores per page, **SEO** and **AI search readiness** (ChatGPT search, Perplexity, Claude, Copilot, Google AI Overviews), with the AI crawlers your robots.txt blocks, schema, FAQ, author/date signals, llms.txt, sitemap and **prioritized fixes**, plus a ready-to-edit **llms.txt draft**. Exported to Excel, CSV and JSON. Apify's free plan includes $5 of monthly platform credit, enough for roughly 1,250 pages at $0.004 each (pricing below).

**See your site the way AI crawlers see it, and get a fix list you can hand to a developer or a client.**

Most AI crawlers don't run JavaScript, many sites block them by accident in robots.txt, and answer engines prefer pages with clear entities, Q\&A blocks and fresh, attributed content. **AI Search & SEO Audit** fetches each page once, without JavaScript, and checks:

- 🤖 **AI crawler access:** robots.txt rules for AI **search/answer** bots (OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-SearchBot, Claude-User, DuckAssistBot, Applebot, Bingbot, Googlebot) and AI **training** bots (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot, Meta-ExternalAgent, Bytespider, Amazonbot), plus bot firewalls that answer crawlers with 403
- 📝 **Content AI can read:** words visible without JavaScript, heading structure, question-style headings, lists and tables
- 🧩 **Structured data:** every JSON-LD `@type`, main entity (Organization, LocalBusiness, Product, Article…), FAQPage / HowTo, invalid JSON-LD
- 🕒 **Trust signals:** author and published / updated dates (meta tags or schema)
- 🗺️ **Discovery:** llms.txt and llms-full.txt, XML sitemap, canonical, noindex
- 🔍 **SEO basics:** HTTP status, title and meta description length, one H1, viewport, lang, HTTPS, image alt text, server response time, Open Graph
- ✍️ **llms.txt draft** for every site without one (free)
- 📊 **Excel + CSV:** Pages, Fixes (one row per fix, by priority) and Sites sheets
- 💸 **$0.004 per page.** 250 pages cost $1.00. Pages that can't be reached are listed free

### Who it's for

- **SEO and GEO / AEO consultants, agencies and Fiverr / Upwork freelancers:** a client-ready AI search audit in minutes, priced for volume
- **Site owners and marketers:** find out why ChatGPT or Perplexity never cite you, starting with the blockers
- **Developers:** check a release for robots.txt mistakes, client-side-only rendering and broken JSON-LD
- **Lead-gen teams:** score prospects' websites and pitch with concrete fixes (pairs with [Local Business Leads](https://apify.com/pandadad0214/local-business-leads))

### How to use the AI search audit

1. Click **Try for free**.
2. Paste **page URLs**, one per line (`example.com/pricing` works).
3. Optional: set **Also audit internal pages** (e.g. 10) to check pages linked from each URL, for a quick whole-site pass from the homepage.
4. Set **Maximum pages**. You pay per audited page, so this also caps the cost.
5. Click **Start**. 50 pages take about a minute. Download **AUDIT_XLSX** from **Storage → Key-value store**, or use the dataset via API.

#### Input example

```json
{
  "urls": ["https://react.dev", "https://apify.com"],
  "crawlInternalLinks": 3,
  "maxPages": 20,
  "generateLlmsTxt": true
}
```

### Output example

![Example output table from a real ai-search-seo-audit run](https://api.apify.com/v2/key-value-stores/0eeXxTD8eJjgE6yTA/records/shot-ai-search-seo-audit)

One row per page. A real row from the example above (shortened):

```json
{
  "url": "https://react.dev",
  "statusCode": 200,
  "seoScore": 85,
  "aiReadinessScore": 55,
  "title": "React",
  "titleLength": 5,
  "h1Count": 2,
  "h2Count": 15,
  "questionHeadings": 0,
  "wordCount": 1236,
  "schemaTypes": [],
  "author": null,
  "aiSearchBotsBlocked": [],
  "aiTrainingBotsBlocked": [],
  "llmsTxt": true,
  "sitemapFound": false,
  "responseMs": 97,
  "fixes": [
    "[medium] [SEO] Title is 5 characters; aim for 10 to 65 so it is not cut off.",
    "[medium] [AI] No JSON-LD structured data. Add schema.org markup (Organization, LocalBusiness, Product, Article…) so AI and search engines understand the entity.",
    "[medium] [AI] No question-style headings or FAQ schema. AI answers pull from clear Q&A blocks: add an FAQ section with real customer questions (and FAQPage schema).",
    "[medium] [AI] No author or date signals. Show who wrote or owns the content and when it was updated (and mark it up in schema)."
  ],
  "agentSummary": "https://react.dev: SEO 85/100, AI readiness 55/100; 1236 words without JS; schema: none; llms.txt yes; top fix: Title is 5 characters; aim for 10 to 65 so it is not cut off."
}
```

#### Fields

| Field | What it is |
|---|---|
| `seoScore`, `aiReadinessScore` | 0-100 scores (see scoring below) |
| `aiSearchBotsBlocked`, `aiTrainingBotsBlocked`, `crawlerBlocked` | AI bots disallowed for this URL in robots.txt; whether a bot firewall answered crawlers with 403/429/503 |
| `wordCount`, `scriptCount` | Words visible in the raw HTML (no JavaScript) and number of scripts |
| `schemaTypes`, `faqSchema`, `invalidJsonLd` | JSON-LD types found, FAQ/HowTo present, broken blocks |
| `author`, `datePublished`, `dateModified` | Authorship and freshness signals |
| `title`, `metaDescription`, `h1`, `h1Count`, `h2Count`, `questionHeadings` | On-page basics |
| `canonical`, `noindex`, `lang`, `mobileViewport`, `openGraph`, `imagesMissingAlt`, `responseMs` | Technical SEO |
| `llmsTxt`, `sitemapFound`, `robotsTxtStatus` | Site-level discovery files |
| `fixes` | `[priority] [SEO or AI] what to do`, highest priority first |
| `error` | Only on pages that couldn't be audited (not charged) |
| `agentSummary` | One plain-English line per page |

**SEO score (100):** HTTP 200 (15), indexable (15), title 10-65 chars (10), meta description 50-165 (10), one H1 (10), canonical (5), viewport (5), lang (5), HTTPS (5), image alt text (5), 300+ words (10), HTML under 1.5 s (5).
**AI readiness score (100):** AI search crawlers allowed (20), 150+ words without JavaScript (15), JSON-LD (10), main entity type (5), FAQ schema or question headings (10), author + date (10), llms.txt (5), sitemap (5), meta description (5), H1 + H2 structure (5), lists/tables (5), Open Graph title + image (5). A bot firewall that blocks crawlers costs 20 points. AI training bots are reported but not scored: blocking them is a business choice and doesn't stop AI search citations.

#### Files in the key-value store

| Key | What it is |
|---|---|
| `AUDIT_XLSX` | Excel workbook: **Pages**, **Fixes** (one row per fix, colored by priority), **Sites** (robots.txt, AI bots, sitemaps, llms.txt and draft), **Run log**, **Read me** |
| `AUDIT_CSV` | Pages table as CSV |
| `LLMS_TXT_DRAFTS` | JSON: site → ready-to-edit llms.txt draft, for sites without one |
| `SUMMARY` | JSON: average scores, per-site findings, one-line `takeaway` and `nextStep` |

### For AI agents

Use this Actor to audit web pages for SEO and AI search (GEO/AEO) readiness and get prioritized fixes. Call it with Apify's MCP server (`https://mcp.apify.com`, tool `call-actor`, Actor `pandadad0214/ai-search-seo-audit`) or the API (`POST https://api.apify.com/v2/acts/pandadad0214~ai-search-seo-audit/run-sync-get-dataset-items`).

Minimal input:

```json
{"urls": ["https://example.com"], "crawlInternalLinks": 5}
```

Each dataset item includes `agentSummary` (one line with both scores, words without JS, schema, blocked AI bots, llms.txt and the top fix), `seoScore`, `aiReadinessScore`, `aiSearchBotsBlocked` and `fixes` (strings, highest priority first). The `SUMMARY` record has `averageSeoScore`, `averageAiReadinessScore`, `sites`, a one-line `takeaway` and `nextStep`. Unreachable pages come back with `error` and are not charged.

### AI search audit pricing

**Apify paid-plan discounts:** Bronze members pay 10% less, Silver 20% less and Gold 30% less per page. Free-plan prices are shown below; the discount applies automatically.

**$0.004 per page audited** (pay-per-event), plus a tiny Actor-start fee of $0.00005. Excel, CSV, llms.txt drafts and the summary are included. Pages that can't be reached, aren't HTML or block the crawler cost nothing. Your **maximum charge per run** is respected.

### FAQ

**Is there a free way to try this GEO audit?** Yes. Apify's free plan includes $5 of monthly platform credit, enough for roughly 1,250 pages.

**Does it check whether ChatGPT actually cites my site?** No. It checks whether your pages are technically ready to be crawled, understood and quoted. Citation tracking needs live AI queries; this tool fixes the foundations first.

**Why audit without JavaScript?** OpenAI, Anthropic, Perplexity and most other AI crawlers fetch raw HTML and don't run JavaScript. If your content only appears after scripts run, they see an empty page.

**Does llms.txt help?** It's a proposed standard that some AI tools read. It's cheap to add, so the audit drafts one for you, but it's weighted lightly.

**Is it safe to run on any site?** It makes one normal request per page plus robots.txt, sitemap and llms.txt per site, identifies itself in the User-Agent and never submits forms or logs in. Audit sites you own or have permission to review.

**Can I use it from code or an AI agent?** Yes, via the Apify API, the Python/JS clients, or as a tool through Apify's MCP server.

### More Panda Federation tools

- [Email Domain Security Checker](https://apify.com/pandadad0214/email-domain-security-checker)
- [Local Business Leads](https://apify.com/pandadad0214/local-business-leads)
- [Podcast Leads Finder](https://apify.com/pandadad0214/podcast-leads-finder)
- [PDF Table Extractor](https://apify.com/pandadad0214/pdf-table-extractor)
- [Academic Research MCP Server](https://apify.com/pandadad0214/panda-research-mcp)

[All Panda Federation Actors on Apify](https://apify.com/pandadad0214)

Questions or a custom check? Open an issue on this Actor's **Issues** tab.

### Changelog

- **2026-11-01:** First public release: SEO and AI readiness scores, AI search vs training crawler checks, bot-firewall detection, JSON-LD/FAQ/author/date checks, llms.txt and sitemap detection, llms.txt drafts, internal-page crawl, Excel/CSV exports, agent-friendly `agentSummary` and `takeaway`, pay-per-event pricing with Bronze/Silver/Gold discounts.

# Actor input Schema

## `urls` (type: `array`):

Pages to audit, one per line. https:// is added if missing (example.com/pricing works). Leave empty for a 2-page demo.

## `crawlInternalLinks` (type: `integer`):

0 = audit only the URLs above. 1 to 100 = also audit up to this many same-site pages linked from each URL (good for a quick whole-site check from the homepage).

## `maxPages` (type: `integer`):

You pay per audited page, so this also caps the cost. Whole number, 1 to 2,000; default 50.

## `generateLlmsTxt` (type: `boolean`):

On by default: for each site with no /llms.txt, writes a ready-to-edit draft (from the audited pages and homepage links) into the LLMS_TXT_DRAFTS record and the Sites sheet. No extra charge.

## Actor input object example

```json
{
  "urls": [
    "https://apify.com",
    "https://example.com/pricing"
  ],
  "crawlInternalLinks": 0,
  "maxPages": 50,
  "generateLlmsTxt": true
}
```

# Actor output Schema

## `table` (type: `string`):

No description

## `xlsx` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `llms` (type: `string`):

No description

## `summary` (type: `string`):

Run-level summary record. Agent-friendly keys: `takeaway`, `averageSeoScore`, `averageAiReadinessScore`, `sites`, `nextStep` and `nextSteps`.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://apify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandadad0214/ai-search-seo-audit").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://apify.com"] }

# Run the Actor and wait for it to finish
run = client.actor("pandadad0214/ai-search-seo-audit").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://apify.com"
  ]
}' |
apify call pandadad0214/ai-search-seo-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pandadad0214/ai-search-seo-audit"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/oTl1tqfunLK8Yc4DM/builds/ck7vzy3uoB40yykes/openapi.json
