{"slug": "show-hn-citeladder-open-source-ai-search-visibility-tracker", "title": "Show HN: CiteLadder – open-source AI search visibility tracker", "summary": "An open-source project called CiteLadder has launched to track how AI answer engines including ChatGPT, Claude, Gemini and Google AI Overviews name brands and cite pages in response to buyer prompts. CiteLadder records visibility, share of voice, owned citation rate and competitor rankings across scheduled audits, and ships an MCP server with 46 tools for Claude, ChatGPT and other MCP clients; a hosted version, CiteLadder Cloud, is offered with a free trial and managed engine access.", "body_md": "**Open-source AI search visibility (GEO / AEO) you can self-host.**\n\nSee how ChatGPT, Gemini, Claude and Google AI Overviews answer your buyers' questions, which brands they name, and which pages they cite. Then find out why, fix it, and measure whether it worked.\n\n[Quick start](#quick-start) · [Features](#features) · [Screenshots](#screenshots) · [MCP](#connect-an-ai-assistant-mcp) · [Hosted version](https://citeladder.com) · [Docs](https://docs.citeladder.com) · [Contributing](https://github.com/abhij1306/CiteLadder/blob/main/CONTRIBUTING.md)\n\n**Don't want to run it yourself?** [CiteLadder Cloud](https://citeladder.com) is the hosted\nversion with a free trial, team workspaces and managed engine access. Product guides live at\n[docs.citeladder.com](https://docs.citeladder.com).\n\nFor a portfolio of real buyer questions (prompts), CiteLadder asks the answer engines on a schedule and records every answer:\n\n- **Which answer engines** : ChatGPT, Claude and Gemini through their APIs, plus ChatGPT Search,\nthe Gemini app and**Google AI Overviews** through DataForSEO.\n- **Which brands they name** : your brand and your competitors, with visibility, share of voice,\nrank and how each one changes between comparable runs.\n- **Which pages they cite** : cited and retrieved domains and URLs, your owned citation rate, source\ntypes, and which publishers show up next to your competitors.\n- **What they get wrong** : perception and fact checks against your own site's claims.\n- **Why** : your site's crawlability and structure for AI (Site Health), the demand behind each\nquestion (Search Console, GA4, Bing), and which AI crawlers and referrals actually reach you.\n\nThe measured outcome is **observed** mention and citation share, compared under the same prompts and\nengines over time. Site and demand metrics are leading indicators, never presented as proof of cause.\n`unavailable`, `not configured` and `observed zero` stay three different things.\n\n| AI Visibility | Overview | \n|---|---|\n| **Site Health** | **Issues** | \n\n| Area | What you get | \n|---|---|\n| **AI Visibility** | Scheduled audits of your prompt portfolio across engines and markets. Visibility, share of voice, owned citation rate, average position, competitor ranking, trends between comparable runs, cited sources and URLs, perception, accuracy (fact checks), AI ads and query fan-outs. CSV export. | \n| **Prompts** | Generate buyer prompts from your site, market and competitors; organise them by topic, intent and buyer stage; review candidates before they are tracked. | \n| **Site Health** | A polite, bounded crawler with page-type-aware checks: Web Fundamentals, AEO Readiness by pillar (answerability, structure, evidence, machine readability, provenance, freshness, crawlability), AI crawler access (robots.txt, llms.txt), architecture, internal links and crawl-to-crawl changes. | \n| **Issues and Actions** | Every finding with its evidence, affected pages and how to fix it, rolled into a ranked list of Actions you can work through and mark implemented. | \n| **Agent** | Ask questions about your project, or start from workflows (articles, landing, comparison and FAQ pages, page refreshes, social posts). Answers are grounded in your evidence with sources, and outputs are reviewable drafts. | \n| **Search Demand and Performance** | Google Search Console, GA4 and Bing Webmaster sync, query evidence and landing-page performance. | \n| **Search Intelligence** | Keyword suggestions, search volume and backlink research via DataForSEO, with a cost review before any paid call runs. | \n| **AI Traffic** | AI crawler logs from Cloudflare (Worker or Logpush), AWS Firehose, Google Cloud Pub/Sub or file uploads, and referral traffic from answer engines: which bots read which pages, and which answers send visitors. | \n| **Commerce Suite** | Product catalog, buyer prompts and an AI \"shelf\" view of how your products appear next to competitors. | \n| **MCP server** | 46 tools for Claude, ChatGPT and any MCP client: read visibility, sources, Site Health, actions, demand and traffic, **and make changes** : add or archive prompts, add competitors, launch and schedule audits, update actions. Every change is shown as a preview and applied only after you confirm. Includes an interactive MCP Apps view. | \n| **Public API** | Scoped API keys for `/v1` endpoints, with an OpenAPI document at`/v1/openapi.json` . | \n| **Overview reports** | An editable project overview with layout control and PDF export. | \n\nCiteLadder never publishes anything to your site for you and never trains on your data. You bring your own model and data-provider keys, and every crawl and audit runs on your machine.\n\nYou need [Docker](https://docs.docker.com/get-docker/) with Compose v2.\n\n```\ngit clone https://github.com/abhij1306/CiteLadder.git\ncd CiteLadder\ndocker compose up -d --build\n```\n\nOpen **[http://localhost:8100](http://localhost:8100)**. The first start builds the image, which takes a few minutes, then\napplies the database schema and creates your workspace. There is no sign-up and no login.\n\nThen:\n\n1. **Create a project.** Enter your website; CiteLadder researches the brand and proposes competitors and an ideal customer profile for you to confirm.\n2. **Add model keys** in*Settings → Providers* (OpenAI, Anthropic, Google, DataForSEO) to run AI Visibility audits.\n3. **Run Site Health** to crawl and analyse your site; it needs no keys.\n4. Optionally connect Search Console, GA4 or Bing in *Settings → Integrations* (see[Google and Microsoft sign-in](#google-and-microsoft-integrations) ).\n\nTo use the Agent, brand research and prompt generation, set an LLM in `.env` (see below) and run\n`docker compose up -d` again.\n\n```\ndocker compose logs -f app      # follow the logs\ndocker compose down             # stop (data is kept in Docker volumes)\ndocker compose down -v          # stop and delete all data\n```\n\nYou need Node.js 26+, pnpm 12 (`corepack enable`) and a PostgreSQL 16 database.\n\n```\ngit clone https://github.com/abhij1306/CiteLadder.git\ncd CiteLadder\npnpm bootstrap && pnpm build\nDATABASE_URL=postgresql://user:password@localhost:5432/citeladder pnpm start\n```\n\n`pnpm start` applies migrations, creates the workspace, serves the app on [http://localhost:8100](http://localhost:8100)\nand runs background jobs. Settings come from the environment or a `.env` file in the repository\nroot. Generated instance secrets are stored in `.data/`.\n\nEverything is optional. Copy the template and fill in what you need:\n\n```\ncp .env.example .env\n```\n\n| Setting | Purpose | \n|---|---|\n| `DEFAULT_AGENT_API_KEY` ,`DEFAULT_AGENT_BASE_URL` ,`DEFAULT_AGENT_MODEL` | The LLM behind the Agent, brand research and prompt generation. Anthropic and OpenAI are fully supported; any OpenAI-compatible endpoint (Gemini, Mistral, or a local server such as Ollama at `http://host.docker.internal:11434/v1` ) works for research and generation. | \n| `MCP_TOKEN` | Enables the MCP endpoint at `/mcp` ; clients send it as a bearer token. | \n| `INTEGRATION_GOOGLE_CLIENT_ID` /`_SECRET` | Search Console and GA4 sync (your own Google OAuth client). | \n| `INTEGRATION_MICROSOFT_CLIENT_ID` /`_SECRET` | Bing Webmaster sync. | \n| `TAVILY_API_KEY` ,`KEENABLE_API_KEY` | Optional web research for competitor and brand discovery. | \n| `JEV_API_KEY` | Optional quality judge for generated prompt candidates. | \n| `CITELADDER_PORT` | Host port for Docker (default `8100` ). | \n| `PUBLIC_APP_ORIGIN` | The URL you open CiteLadder at, if it is not `http://localhost:8100` . Used in OAuth redirects and MCP setup text. | \n| `SITE_HEALTH_*` | Crawler politeness and size limits. | \n\nAnswer-engine and DataForSEO keys are entered in the app (*Settings → Providers*) and stored\nencrypted in the database. The encryption key and other instance secrets are generated on first\nstart and kept in the `citeladder_data` volume (or `.data/` without Docker): **back them up\ntogether with the database.**\n\nCreate an OAuth client in your own Google Cloud (or Azure) project, add the redirect URI shown in\n*Settings → Integrations*, and put the client ID and secret in `.env`. Without them the\nintegrations show as *not configured*, and everything else keeps working.\n\nSet `MCP_TOKEN` in `.env` to a long random string and restart. Then, for example in Claude Code:\n\n```\nclaude mcp add --transport http citeladder http://localhost:8100/mcp \\\n  --header \"Authorization: Bearer <MCP_TOKEN>\"\n```\n\n*Settings → MCP* in the app shows the URL and a JSON snippet for other clients. The bundled\n[agent plugin](https://github.com/abhij1306/CiteLadder/blob/main/plugins/citeladder) adds review skills (AI visibility review, change review,\ntechnical SEO triage).\n\nCiteLadder is a single-workspace, self-hosted tool with **no login**. The Compose file binds the\napp to `127.0.0.1` only. Before you expose it to a network, put an authenticating reverse proxy in\nfront of it. The API also answers only to `localhost` and the host in `PUBLIC_APP_ORIGIN`; list\nany other host name you use in `ALLOWED_HOSTS`. See [SECURITY.md](https://github.com/abhij1306/CiteLadder/blob/main/SECURITY.md) for more, and for\nhow to report vulnerabilities.\n\n```\nbrowser app (React + Vite SPA) ─┐\nMCP clients ────────────────────┼─▶ API (Node 26, Hono) ─▶ PostgreSQL 16 (data + job queue)\npublic API (/v1) ───────────────┘          ▲\n                                           │\n                              runner (crawls, audits, syncs, schedules)\n```\n\n| Path | What lives there | \n|---|---|\n| `frontend/apps/app/` | Browser app entry, routes and Vite config | \n| `frontend/components/` ,`frontend/lib/` | App UI and client logic | \n| `frontend/services/api/` | API, MCP server, background workers, CLIs | \n| `frontend/services/api/src/config/` | Tunable product policy | \n| `frontend/services/api/migrations/` | SQL schema | \n| `frontend/packages/contracts/` | API contracts shared by app and API | \n| `frontend/packages/mcp-app/` | MCP Apps view | \n| `plugins/citeladder/` | Agent plugin with review skills | \n\nContributions are welcome. See [CONTRIBUTING.md](https://github.com/abhij1306/CiteLadder/blob/main/CONTRIBUTING.md) for local development, checks and\nthe PR process, and the [Code of Conduct](https://github.com/abhij1306/CiteLadder/blob/main/CODE_OF_CONDUCT.md).\n\n[GNU Affero General Public License v3.0](https://github.com/abhij1306/CiteLadder/blob/main/LICENSE). If you run a modified version as a network\nservice, you must offer its source to your users.", "url": "https://wpnews.pro/news/show-hn-citeladder-open-source-ai-search-visibility-tracker", "canonical_source": "https://github.com/abhij1306/CiteLadder", "published_at": "2026-10-17 08:49:44+00:00", "updated_at": "2026-10-17 09:00:23.276710+00:00", "lang": "en", "topics": ["generative-engine-optimization", "ai-search", "ai-crawlers", "agent-protocols", "ai-tools"], "entities": ["CiteLadder", "ChatGPT", "Claude", "Gemini", "Google AI Overviews", "DataForSEO", "Cloudflare", "CiteLadder Cloud"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-citeladder-open-source-ai-search-visibility-tracker", "markdown": "https://wpnews.pro/news/show-hn-citeladder-open-source-ai-search-visibility-tracker.md", "text": "https://wpnews.pro/news/show-hn-citeladder-open-source-ai-search-visibility-tracker.txt", "jsonld": "https://wpnews.pro/news/show-hn-citeladder-open-source-ai-search-visibility-tracker.jsonld"}}