AutoSEO
The open-source AI SEO & GEO platform
See how ChatGPT, Perplexity, Gemini, Claude, Google AI Overviews and other AI engines talk about your brand, then fix it, next to a complete SEO suite: keyword research, rank tracking, site audits, backlinks, Search Console, GA4 and white-label reports. Self-host it for free, or get your own managed instance.
Website · AutoSEO Cloud ($50/mo) · Self-hosting guide · Discussions
Why AutoSEO?
Search is moving into AI answers. When someone asks ChatGPT "what's the best tool for …", you either get recommended or you don't, and classic SEO tools can't tell you which. The AI-visibility tools that can are closed source, priced per seat and per prompt, and keep your data.
AutoSEO is different:
- Everything in one place. AI visibility (GEO/AEO) and classic SEO, analytics, attribution, content and reporting. No stitching five subscriptions together.
- Open source and yours. MIT licensed. Run it on your own server with one command, keep all data, extend it.
- Uses the AI subscription you already have. All AI work runs through your local Claude Code or Codex CLI via a lightweight agent, with API keys (Anthropic, OpenAI, OpenRouter, Perplexity, Gemini, …) as a fallback.
- Built for teams and agencies. Workspaces, roles and per-project permissions, invite-only magic-link login, white-label reports, client access, REST API and an MCP server with 100+ tools.
Get started
Every self-hosted option is free and includes every feature. See the self-hosting guide for requirements, updates, backups and reverse-proxy setups.
Feature tour
Everything that's included
Stack: Next.js 16 · React 19 · Tailwind v4 · shadcn/ui · PostgreSQL 17 · Drizzle. One DOMAIN variable;
everything else (email via SMTP / Amazon SES, AI providers, DataForSEO, Google OAuth, onboarding, branding, roles,
limits, security) is configured in the admin panel.
AutoSEO Cloud vs. self-hosted
AutoSEO Cloud runs exactly this repository, operated for you (how it works). Buying it funds development of the open-source project. Start at autoseo.codext.de →
Deploy with Coolify
-
Create a new resource → Docker Compose → point it at this repository (build pack: Docker Compose, file
docker-compose.yml). -
Set the domain of the
appservice (e.g.https://seo.example.com) and add the environment variableDOMAIN=seo.example.com. Coolify generates the Postgres password automatically (SERVICE_PASSWORD_POSTGRES). -
Deploy. On first boot the app runs its database migrations and prints a setup code to the logs (a new code on every restart until setup is done):
╔════════════════════════════════════════╗ ║ AutoSEO first-run setup ║ ║ Open https://seo.example.com/setup ║ ║ Setup code: 1234-5678 ║ ╚════════════════════════════════════════╝ -
Open
/setup, enter the code, name your workspace, create the owner account and (optionally) restrict sign-ins to your company domains. You're signed in immediately; configure email delivery next (Admin → Email).
Data lives in two volumes — back up both:
autoseo-pg— PostgreSQLautoseo-data— uploads, caches, the auto-generated encryption key for stored secrets (secret.key) and the agent release signing key (agent-release-key.pem). Losingsecret.keymakes stored provider credentials unreadable; losing the signing key means installed agents stop auto-updating until they are reinstalled.
Updating is a redeploy: migrations run automatically at boot and connected local agents update themselves to the new build.
Prefer to skip the setup code, e.g. for scripted installs? Set AUTOSEO_OWNER_EMAIL (and optionally
AUTOSEO_SMTP_URL / AUTOSEO_MAIL_FROM); see optional bootstrap variables.
Reverse proxy & security settings
- The app trusts
X-Real-IP/ the right-mostX-Forwarded-Forhop set by Coolify's Traefik for rate limits. If all traffic comes through Cloudflare, enable Admin → Authentication → Behind Cloudflare soCF-Connecting-IPis used (never enable it otherwise — the header could be spoofed). - Outbound requests to private/LAN addresses are blocked (SSRF protection). Allow specific intranet hosts for integrations (e.g. an internal WordPress) under Admin → Authentication → Internal hosts allowed for integrations.
- Sessions use
__Host-cookies (Secure, HttpOnly, SameSite=Lax). Stored secrets are encrypted with AES-256-GCM; API keys, OAuth and agent tokens are stored as SHA-256 hashes only.
Run locally with Docker
cp .env.example .env # DOMAIN=localhost:3000
docker compose up --build # http://localhost:3000 (setup code in `docker compose logs app`)
Want to look around first? After setup, click Explore the demo on the first onboarding step (or Explore with demo data on any project's home page) to open a demo project with 90 days of generated sample data: fictional brands, no provider credits used. All screenshots above show that demo project.
Configuration (admin panel)
Local agents (Claude Code / Codex)
Open Settings → Local Agents → Install agent, copy the one-liner for macOS/Linux (bash) or Windows (PowerShell)
and run it on a machine that has claude and/or codex installed:
curl -fsSL https://seo.example.com/install.sh | AUTOSEO_AGENT_TOKEN=… bash -s -- --host https://seo.example.com
- Outbound HTTPS only, no open ports. Starts automatically (launchd / systemd user unit / Scheduled Task).
- Tokens never expire, are stored as SHA-256 only and are shown once. Reinstalling issues a new token.
- Every job runs in a fresh CLI session in its own folder (default: temp dir), jobs run in parallel.
- Updates itself on every deploy (releases are signed; the agent verifies the signature).
- Lean mode (default for shared/team work) runs the CLI without your personal settings, MCP servers or shell.
Full mode (your own MCP servers, web fetch) only ever runs for jobs you started, and only if you allowed it
locally with
--allow-full. Other flags:--runtime claude|codex,--workdir,--max-parallel,--mcp-servers,--allow-codex-shell,--allow-remote-workdir,--no-auto-update,--no-autostart,--uninstall.
API, MCP & agent plugins
- REST:
https://seo.example.com/api/v1(OpenAPI at/api/v1/openapi.json, docs under Settings → API & MCP) - MCP (streamable HTTP):
https://seo.example.com/api/mcp— OAuth 2.1 or API key - Claude Code plugin marketplace:
/plugin marketplace add https://seo.example.com/api/plugin/marketplace.json(bundles for Codex and Cursor and a skills zip are under Settings → API & MCP → Skills)
Development
docker run -d --name autoseo-pg -e POSTGRES_USER=autoseo -e POSTGRES_PASSWORD=autoseo -e POSTGRES_DB=autoseo \
-p 54329:5432 postgres:17-alpine
pnpm install
pnpm db:push # sync schema to the dev database
pnpm dev # http://localhost:3000
pnpm typecheck && pnpm lint && pnpm test
pnpm db:generate # create a SQL migration after schema changes (applied automatically in production)
See docs/ARCHITECTURE.md for the code layout and conventions. The website, signup and
billing for AutoSEO Cloud live in cloud/ (a separate Next.js app).
Contributing
Contributions of all sizes are welcome: bug reports, new AI engines, integrations, translations, docs. Read CONTRIBUTING.md, open an issue or start a thread in Discussions. Please report security issues privately as described in SECURITY.md.
If AutoSEO is useful to you, a ⭐ on GitHub helps a lot. It's how other people find the project.
License
MIT © Codext GmbH and AutoSEO contributors. Parts of the SEO feature set and agent skills are adapted
from open-seo (MIT) — see plugins/autoseo/NOTICE.md.