{"slug": "i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-ai", "title": "I built a free AEO checker — is your website visible to ChatGPT, Perplexity and Google AI?", "summary": "A developer built and open-sourced a free AEO (Answer Engine Optimization) checker as an Apify Actor that audits websites against seven technical criteria — including JSON-LD structured data, schema types, meta descriptions, H1 tags, Open Graph, an /llms.txt file, and AI crawler directives in robots.txt — to estimate whether AI answer engines like ChatGPT, Perplexity and Google AI will cite them. The tool returns a score with specific fixes and can generate a ready-to-publish llms.txt draft, and is API-first so an LLM agent can run audits via the Apify MCP server. The developer noted a first-deploy bug where an uncalled async main() produced 'SUCCEEDED' runs with empty datasets, concluding that a successful run status proves nothing without checking the dataset.", "body_md": "A restaurant owner in my town asked me a question I hear more and more: *\"When someone asks ChatGPT where to eat tonight, does it say my name?\"*\n\nHonest answer: nobody knows without checking. So I built a free tool that checks — and I open-sourced the logic as an Apify Actor anyone (human or AI agent) can call.\n\nAfter auditing dozens of local business sites, the signal for \"will an AI cite you\" collapses to 7 technical criteria:\n\n`LocalBusiness`, `Organization`, `ProfessionalService`…`/llms.txt` file\nThe killer is #7. I've seen sites with perfect schema markup that explicitly tell every AI crawler to go away.\n\nOne call, one score, exact fixes:\n\n```\n{\n  \"url\": \"https://www.codeur.com\",\n  \"scoreLabel\": \"4/7\",\n  \"checks\": {\n    \"json_ld\": false, \"schema_type\": false, \"meta_description\": true,\n    \"h1\": true, \"open_graph\": true, \"llms_txt\": false, \"robots_ai\": true\n  },\n  \"topFixes\": [\n    {\"criterion\": \"Structured data (JSON-LD)\", \"fix\": \"Add a <script type=\\\"application/ld+json\\\"> block...\"},\n    {\"criterion\": \"llms.txt file\", \"fix\": \"Publish /llms.txt summarizing who you are for AI engines.\"}\n  ]\n}\n```\n\n(That's a real result — a major marketplace scores 4/7. Most local businesses score 1–2.)\n\nIt can also generate a **ready-to-publish `llms.txt` draft** for the audited site, delivered as plain text in the key-value store.\n\n```\ncurl -X POST \"https://api.apify.com/v2/acts/travelmonitorlab~aeo-ai-visibility-checker/run-sync-get-dataset-items?token=$APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\": \"https://your-site.com\", \"generateLlmsTxt\": true}'\n```\n\nIt's API-first and works through the Apify MCP server, so an LLM agent can audit a website mid-conversation. No browser, no proxy — a plain HTTP audit that runs in seconds and costs nothing. It's **free**, deliberately: it's my 12th Actor and the first one I give away, because an AEO checker is exactly the kind of tool that should be a utility, not a product.\n\nFirst deploy: every run returned `SUCCEEDED`… with an empty dataset and a silent log. The cause wasn't the platform — it was me: I defined `async def main()` and never called it. The module loaded, defined functions, and exited 0. One missing line:\n\n``` python\nif __name__ == \"__main__\":\n    import asyncio\n    asyncio.run(main())\n```\n\nA \"successful\" run proves nothing. Check the dataset, always.\n\nIf you run it on your site, drop your score in the comments — I'm curious what the distribution looks like.", "url": "https://wpnews.pro/news/i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-ai", "canonical_source": "https://dev.to/jeffreyturov/i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-google-ai-10gl", "published_at": "2026-10-10 01:51:48+00:00", "updated_at": "2026-10-10 01:59:19.905792+00:00", "lang": "en", "topics": ["generative-engine-optimization", "ai-crawlers", "ai-search", "agent-protocols", "structured-data"], "entities": ["Apify", "ChatGPT", "Perplexity", "Google AI", "MCP"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-ai", "markdown": "https://wpnews.pro/news/i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-ai.md", "text": "https://wpnews.pro/news/i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-ai.txt", "jsonld": "https://wpnews.pro/news/i-built-a-free-aeo-checker-is-your-website-visible-to-chatgpt-perplexity-and-ai.jsonld"}}