# AEO & AI Visibility Checker (`travelmonitorlab/aeo-ai-visibility-checker`) Actor

Is your business cited when customers ask ChatGPT, Perplexity or Google AI? Free 7-criteria AEO audit for any URL: JSON-LD, business schema, meta description, H1, Open Graph, llms.txt, AI bots in robots.txt — plus an optional ready-to-publish llms.txt draft. AI-agent ready, API + MCP ready.

- **URL**: https://apify.com/travelmonitorlab/aeo-ai-visibility-checker.md
- **Developed by:** [Travel Monitor Lab](https://apify.com/travelmonitorlab) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## AEO & AI Visibility Checker — free AI-readiness audit for any website

Is your business **cited when customers ask ChatGPT, Perplexity or Google AI**? This free Actor audits any URL against the **7 AEO (Answer Engine Optimization) criteria** and returns a score, the exact fixes, and — optionally — a ready-to-publish `llms.txt` draft.

### Use this tool when...

- You want to know if a website can be **read, understood and cited by AI engines** (ChatGPT, Claude, Perplexity, Gemini, Google AI Overviews)
- You need an **AEO/GEO score (0–7)** with the exact technical fixes, in one API call
- You want a **generated `llms.txt` starter file** for any website
- You build AI agents that vet local businesses, vendors, or leads for AI visibility
- You run SEO/AEO audits at scale for clients or prospects

### What it checks (7 criteria)

| # | Criterion | Why it matters for AI citations |
|---|---|---|
| 1 | Structured data (JSON-LD) | AI engines extract facts from schema.org blocks |
| 2 | Business schema type | LocalBusiness/Organization declares who you are |
| 3 | Meta description | First text AI reads to understand the business |
| 4 | H1 heading | Confirms the page's main subject |
| 5 | Open Graph tags | Used for sharing and entity understanding |
| 6 | `/llms.txt` file | The identity card AI engines look for |
| 7 | AI bots allowed in robots.txt | Most sites block GPTBot/ClaudeBot without knowing |

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `url` | string | yes | Full URL of the site to audit (homepage is scanned, plus `/llms.txt` and `/robots.txt`) |
| `generateLlmsTxt` | boolean | no | Also generate a ready-to-publish `llms.txt` draft (default: `true`) |

### Output

One dataset record per run:

```json
{
  "url": "https://example.lu",
  "score": 5,
  "scoreLabel": "5/7",
  "title": "Example — Services Luxembourg",
  "jsonLdTypes": ["ProfessionalService", "FAQPage"],
  "checks": {
    "json_ld": true,
    "schema_type": true,
    "meta_description": true,
    "h1": true,
    "open_graph": true,
    "llms_txt": false,
    "robots_ai": false
  },
  "robotsBlockedBots": ["gptbot"],
  "topFixes": [
    {"criterion": "llms.txt file", "fix": "Publish /llms.txt summarizing who you are for AI engines."},
    {"criterion": "AI bots allowed", "fix": "Remove Disallow rules on GPTBot/ClaudeBot/PerplexityBot/Google-Extended/CCBot."}
  ],
  "generatedLlmsTxt": "# Example — Services Luxembourg\n..."
}
```

The `llms.txt` draft is also stored in the key-value store as the record `llms.txt` (plain text).

### Cost

**100% free.** No proxy, no browser — a fast HTTP audit (a few seconds per site). Run it on hundreds of URLs.

### Integration

API-first and AI-agent ready: call it from Python, JavaScript, curl, or via the [Apify MCP server](https://mcp.apify.com) so any LLM agent can audit websites mid-conversation.

***

**Built and maintained by [Adaga solutions](https://adagasolutions.lu)** — full-stack & AI agents in production, Luxembourg. [Site web](https://adagasolutions.lu) · [AEO guides](https://adagasolutions.lu/ressources/) · [More data APIs](https://apify.com/travelmonitorlab)

# Actor input Schema

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

Full URL of the site to audit (e.g. https://example.lu). The checker fetches the homepage, /llms.txt and /robots.txt.

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

Also generate a ready-to-publish llms.txt draft for the audited site (delivered in the dataset and in the key-value store as llms.txt).

## Actor input object example

```json
{
  "url": "https://adagasolutions.lu",
  "generateLlmsTxt": true
}
```

# Actor output Schema

## `auditRecord` (type: `string`):

No description

## `llmsTxtDraft` (type: `string`):

No description

# 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://adagasolutions.lu"
};

// Run the Actor and wait for it to finish
const run = await client.actor("travelmonitorlab/aeo-ai-visibility-checker").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://adagasolutions.lu" }

# Run the Actor and wait for it to finish
run = client.actor("travelmonitorlab/aeo-ai-visibility-checker").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://adagasolutions.lu"
}' |
apify call travelmonitorlab/aeo-ai-visibility-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,travelmonitorlab/aeo-ai-visibility-checker"
        }
    }
}
```

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/he2yLbfic1USJft8x/builds/cB110PfvFABw8eG18/openapi.json
