# GEO Site Audit - AI Readiness Checker (`dltik/geo-site-audit`) Actor

Audit your website for AI crawler accessibility: robots.txt (GPTBot, ClaudeBot, Perplexity), llms.txt, sitemap, Schema.org, meta tags, content extractability, TTFB. Get an AI-readiness score 0-100 with prioritized recommendations.

- **URL**: https://apify.com/dltik/geo-site-audit.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** SEO tools, Developer tools, AI
- **Stats:** 45 total users, 3 monthly users, 100.0% runs succeeded, 6 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $10.00 / 1,000 page auditeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## GEO Site Audit — AI Readiness Checker

**GEO Site Audit** scans your website and tells you exactly why AI assistants like ChatGPT, Perplexity, and Claude may be ignoring it. In under 30 seconds, get an **AI readiness score (0–100)** across 8 technical checks — from robots.txt to Schema.org — with a prioritized action plan to fix every issue.

No API key required. Paste your URL and click Start.

> ⭐ **Found this useful?** Click the **Bookmark** button at the top of [this page](https://apify.com/dltik/geo-site-audit) — it helps the scraper stay visible to others who need it. Takes 1 click. No signup beyond your existing Apify account.

***

### What can GEO Site Audit check on your website?

- 🤖 **AI bot access** — Are GPTBot, ClaudeBot, PerplexityBot, and Google-Extended allowed in your robots.txt?
- 📄 **llms.txt** — Does your `/llms.txt` exist? It's the new robots.txt for LLMs.
- 🗺️ **Sitemap** — Is there a valid `sitemap.xml` for AI crawlers to discover your pages?
- 🏷️ **Schema.org / JSON-LD** — Do you have structured data types like Organization, FAQ, HowTo?
- 🚫 **Meta AI tags** — Are `noai` or `noimageai` directives silently blocking AI systems?
- 📝 **Content extractability** — Is your content server-rendered (SSR), or is it locked behind JavaScript that AI crawlers can't execute?
- 🔒 **HTTPS + HSTS** — Is your site trusted and secure?
- ⚡ **TTFB** — Does your server respond fast enough? AI crawlers time out slow servers.

***

### What data does GEO Site Audit extract?

| Field | Description |
|-------|-------------|
| `overall_score` | AI readiness score 0–100 |
| `grade` | Letter grade A–F |
| `robots_txt.blocked_bots` | List of blocked AI bots |
| `llms_txt.status` | `ok` / `missing` |
| `schema_org.types_found` | Schema types detected (Organization, FAQ...) |
| `content_extractability.text_length` | Extractable characters |
| `ttfb_ms` | Time to first byte in milliseconds |
| `recommendations` | Prioritized action list with fix instructions |

***

### How to check if your site is ready for AI crawlers

1. **[Create a free Apify account](https://apify.com/sign-up)** — no credit card required
2. **Open [GEO Site Audit](https://apify.com/dltik/geo-site-audit)** in Apify Store
3. **Enter your website URL** (e.g. `https://example.com`)
4. **Click Start** — the audit runs in under 30 seconds
5. **Review your score and recommendations** — each issue comes with a specific fix
6. **Download your audit report** in JSON or CSV

***

### How much does GEO Site Audit cost?

**$0.01 per page audited.**

| Pages audited | Cost |
|---------------|------|
| 1 page | $0.01 |
| 10 pages | $0.10 |
| 100 pages | $1.00 |

The cheapest actor in the GEO Suite. Run it first — technical blockers prevent all other GEO efforts from working.

> Costs are charged via [Apify Pay-Per-Event](https://docs.apify.com/platform/actors/monetization). You only pay for what you use. No monthly subscription.

***

### Input

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `url` | string | ✅ | — | Full URL to audit (e.g. `https://example.com`) |
| `maxPages` | integer | ❌ | `1` | Number of pages to audit |

***

### Output example

```json
{
  "_type": "geo_site_audit",
  "url": "https://example.com/",
  "overall_score": 76,
  "grade": "B",
  "checks": {
    "robots_txt": {
      "score": 100,
      "status": "ok",
      "details": "All major AI bots are allowed",
      "allowed_bots": ["GPTBot", "ClaudeBot", "PerplexityBot", "Google-Extended"]
    },
    "llms_txt": {
      "score": 0,
      "status": "missing",
      "recommendation": "Create /llms.txt with a Markdown summary of your site. See llmstxt.org for the format."
    },
    "schema_org": {
      "score": 60,
      "types_found": ["Organization", "WebSite"],
      "types_missing": ["FAQ", "HowTo", "Article"],
      "recommendation": "Add FAQ schema markup to your key landing pages."
    },
    "content_extractability": {
      "score": 80,
      "text_length": 3240,
      "text_html_ratio": 0.18,
      "h1_count": 1,
      "h2_count": 6
    },
    "ttfb_ms": 420
  },
  "recommendations": [
    { "priority": 1, "check": "llms_txt", "action": "Create /llms.txt summarizing your site for AI." },
    { "priority": 2, "check": "schema_org", "action": "Add FAQ and HowTo JSON-LD to your top pages." }
  ]
}
```

***

### Use GEO Site Audit via API

With Apify's API, you can trigger audits programmatically, integrate into your CI/CD pipeline, or schedule weekly checks.

**Python:**

```python
import requests

run = requests.post(
    "https://api.apify.com/v2/acts/dltik~geo-site-audit/runs",
    headers={"Authorization": "Bearer YOUR_APIFY_TOKEN"},
    json={"url": "https://example.com/"}
).json()

print(run["data"]["id"])  # run ID to fetch results
```

**curl:**

```bash
curl -X POST "https://api.apify.com/v2/acts/dltik~geo-site-audit/runs" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/"}'
```

***

### Schedule weekly AI readiness checks

Use **Apify Schedules** to automatically audit your site every week and get notified if your score drops. Connect to **Slack, Zapier, or Make** via webhooks to trigger alerts when issues are detected.

***

### FAQ

**Is this legal?**
Yes. GEO Site Audit only reads publicly accessible files (robots.txt, sitemap.xml, homepage HTML). No login, no credentials, no rate limiting issues.

**My score is 76 but I still don't appear in ChatGPT. Why?**
Technical readiness is a prerequisite, not a guarantee. A score of 76 means AI crawlers *can* access your site — but content quality, authority, and brand mentions also determine if AI models reference you. Use [GEO Visibility Score](https://apify.com/dltik/geo-visibility-score) to measure actual AI mention rates.

**What is llms.txt and why does it matter?**
`/llms.txt` is an emerging standard (similar to robots.txt) that gives AI systems a structured Markdown summary of your site. Perplexity and other AI crawlers are starting to prioritize sites that have it.

**I got an error for my URL. What should I check?**
Make sure the URL starts with `https://` and your site is publicly accessible. If behind a login or firewall, the audit cannot run.

**Can I audit competitor sites?**
Yes — the audit only uses public data. Auditing competitors gives you a benchmark to compare your AI readiness score against theirs.

**I need help or a custom solution.**
Open an issue on the [Issues tab](https://apify.com/dltik/geo-site-audit/issues) or contact us through Apify. We offer custom GEO auditing solutions for agencies.

***

⭐ **Found GEO Site Audit useful? Bookmark it** — Apify ranks actors by bookmarks, so it's the strongest signal for Store visibility. One click = directly helps this actor stay surfaced for new users.

***

### Complete your GEO analysis with the full suite

| Actor | What it does | Start with this if... |
|-------|-------------|----------------------|
| ✅ [GEO Site Audit](https://apify.com/dltik/geo-site-audit) | Technical AI readiness score | **Always start here** |
| 📊 [GEO Visibility Score](https://apify.com/dltik/geo-visibility-score) | GEO Score, mention rate, citation rate | You want your baseline AI visibility |
| ⚔️ [GEO Competitor Research](https://apify.com/dltik/geo-competitor-research) | Share of Voice vs competitors | You know which competitors to track |
| 🔍 [GEO Prompt Research](https://apify.com/dltik/geo-prompt-research) | AI keyword research & prompt scoring | You want to find new AI ranking opportunities |
| 💬 [GEO Brand Sentiment](https://apify.com/dltik/geo-brand-sentiment) | How AI models describe your brand | You want to understand AI brand perception |

# Actor input Schema

## `url` (type: `string`):

URL of one page to audit (e.g. https://stripe.com). For multi-page audit, use the 'urls' field below.

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

Array of pages to audit in one run. Each page = 1 page-audited event = $0.01. Use this for full-site audits (homepage + key pages like /pricing, /docs, /about).

## Actor input object example

```json
{
  "url": "https://stripe.com/",
  "urls": []
}
```

# Actor output Schema

## `results` (type: `string`):

AI readiness score and detailed check results for each audited website.

# 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 = {
    "url": "https://stripe.com/",
    "urls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/geo-site-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 = {
    "url": "https://stripe.com/",
    "urls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("dltik/geo-site-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 '{
  "url": "https://stripe.com/",
  "urls": []
}' |
apify call dltik/geo-site-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dltik/geo-site-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/fYulyoBoRWZ5AlSvn/builds/QmDI9s87yXTr0edHp/openapi.json
