# OpenSEO: a self-hosted, pay-as-you-go alternative to Semrush and Ahrefs

> OpenSEO is a TypeScript SEO tool that brings its own DataForSEO key, runs on Cloudflare or Docker, and exposes an MCP server for AI agents. The trade-off is that your data costs are metered per request.

**every-app/open-seo** — Open source alternative to Semrush and Ahrefs

- Repository: https://github.com/every-app/open-seo
- Website: https://openseo.so
- Stars: 21,033 · Forks: 2,696
- Language: TypeScript
- License: MIT
- Published: 2026-08-08 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/every-app-open-seo

## What OpenSEO replaces, and for whom

Semrush and Ahrefs bundle data, UI and billing into a subscription. OpenSEO separates the data layer from the interface. The README describes it as "an SEO tool for the people" and positions it against tools that are "too expensive or bloated." The audience is narrower than that slogan suggests: people who already understand SEO workflows, are willing to obtain a DataForSEO API key, and can deploy a Cloudflare Worker or run a container. The README lists six workflows: keyword research, rank tracking, competitor insights, backlinks, site audits and AI visibility. Each is a focused screen rather than a module in a large suite. That is the design bet. If you want one dashboard that answers every question, this is not it. If you want to pay per request and keep the code, it is.

## DataForSEO does the crawling, OpenSEO does the rest

The repository is TypeScript with a Vite frontend and Cloudflare Workers as the runtime target. There is a wrangler.jsonc, a wrangler.audit.jsonc, and two Drizzle configurations, drizzle-pg.config.ts and drizzle.config.ts, which implies both a Postgres path and a Workers-oriented path. The important architectural fact is that OpenSEO is not a crawler. The README states you need a DataForSEO API key "to get SEO data," and that when self-hosting you pay DataForSEO directly. The hosted service, by contrast, charges "28% extra for every request we make to DataForSEO." That number tells you where the cost sits: every keyword lookup, backlink pull and rank check is a billable upstream call. The app is the orchestration layer, the UI, the storage and the agent surface. If DataForSEO changes its pricing or its API, OpenSEO inherits that change immediately.

## Installing OpenSEO with Docker and making a first request

The README offers two self-hosting paths. Docker is described as best for testing it out, and Cloudflare is the recommended path for internet-facing use across multiple devices or with a team, and the README notes it works on the free plan. For Docker, the quickstart in compose.yaml refers to a `cp .env.example .env` step, and the compose file errors if .env is missing. Start by copying the example environment file and filling in the one required value, the DataForSEO API key.

```bash
cp .env.example .env
# then edit .env and set DATAFORSEO_API_KEY
```

The compose file forwards every value from .env into the container via env_file, and the explicit environment list sets CLOUDFLARE_INCLUDE_PROCESS_ENV=true, which the comments say is required for local Docker self-hosting because it exposes Compose environment variables to cloudflare:workers bindings. The default port is 3001, bound to 127.0.0.1 only.

```bash
docker compose up -d
```

After that, the app should be reachable at http://localhost:3001. In Docker mode the compose file sets AUTH_MODE=local_noauth, which the .env.example describes as "local trusted mode with injected admin user (admin@localhost)." That is convenient locally and wrong for anything exposed to a network. Two optional keys matter for first impressions: OPENROUTER_API_KEY enables the SAM agent, and GOOGLE_CLIENT_ID with GOOGLE_CLIENT_SECRET enable Google Search Console. The compose comments warn that without OPENROUTER_API_KEY the setup gate in the app asks for the key. If you want the AI agent, set it before starting.

## The MCP server is the real differentiator

OpenSEO exposes an MCP server so agents such as Claude Code, OpenClaw and Hermes can query your SEO data. The README links two setup documents, one for MCP and one for Agent Skills, and describes Skills as "reusable workflows that guide your agent through SEO tasks using the MCP." There is also a contributing skill installed with a single command.

```bash
npx skills add every-app/open-seo --skill simple-issue-description
```

This is the part that competitors do not have in the same form. A traditional SEO suite is a destination you visit; OpenSEO can be a data source your agent calls. The repository carries configuration directories for several agent runtimes (.claude/, .cursor-plugin/, .opencode/, .agents/), which is consistent with that positioning. The caveat is that MCP setup is documented on the project site rather than in the README, so you are following external docs to wire it up, and the quality of the agent experience depends on the Skills you choose or write.

## Where OpenSEO is the wrong tool

No DataForSEO key, no SEO data. The README is explicit that either self-hosting path requires one, and the .env.example marks DATAFORSEO_API_KEY as required for SEO data features. That means OpenSEO is not a free SEO tool in the sense the search results imply; it is a free interface over a paid data provider. Second, the auth story is thin for small teams. The options in .env.example are cloudflare_access (validating Cloudflare Access JWTs, the default when unset), local_noauth, and hosted (Better Auth with email and password plus organization mode). If you want self-hosted multi-user accounts without Cloudflare Access, the documented paths do not cover you. Third, the project is young. The package.json version is 0.1.8 and the release notes show v0.1.4 through v0.1.6 within a few weeks of each other. The README itself says the team plans to make hosting on Railway, Coolify or Dokploy simpler "in the next few months," which is an admission that those routes are not smooth yet. Treat this as early software and read docs/SELF_HOSTING_DOCKER.md before you plan a deployment.

## OpenSEO against a hosted SEO suite

The obvious alternative is paying for Semrush or Ahrefs. The difference is not features, it is who owns the data pipeline and how you are billed. A hosted suite charges a flat subscription and absorbs data costs; you get a polished interface, no deployment, and no API key to manage. OpenSEO inverts that: you deploy it, you supply the DataForSEO key, and you pay per request. For a solo operator running a handful of sites, the per-request model can be cheaper and more predictable than a monthly seat. For an agency running heavy rank tracking across many domains, the metered model can cost more than a subscription, and you carry the operational burden of the deployment. The README's own framing, "No subscriptions. Bring your own DataForSEO API key and pay only for what you use," is accurate but incomplete: you also pay in setup time and maintenance.

## Licence, maintenance and upgrade cost

OpenSEO is MIT licensed, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are included. That is permissive enough to fork and ship internally. Note that MIT covers the OpenSEO code, not the DataForSEO data or the hosted service; those have their own terms, and this is not legal advice. On maintenance, the last push was on 2026-08-19 and the most recent release, v0.1.6, carries the same timestamp. The repository is not archived. Upgrades are not a single command: package.json defines separate deploy scripts for self-hosted (deploy:selfhost, which runs a preflight script and Alchemy), for Postgres (deploy:postgres, which runs a Drizzle migration first) and for the hosted path. There are also two Drizzle configs and a set of runbooks and specs directories, which suggests migrations are a real step rather than an afterthought. Budget time for reading release-notes/ before each upgrade.

## Conclusion

Adopt OpenSEO if you already pay for DataForSEO or want SEO data inside an AI agent workflow, and you are comfortable running Cloudflare Workers or a Docker container. Do not adopt it if you want a zero-setup SaaS with bundled data or if you have no DataForSEO key, because the README states the key is required for SEO data. Before committing, read docs/SELF_HOSTING_DOCKER.md and docs/DATAFORSEO_API_KEY.md, and check the pricing page against your expected request volume.

## FAQ

### What is OpenSEO?

OpenSEO is an open source SEO tool described in its README as an alternative to Semrush and Ahrefs. It covers keyword research, rank tracking, competitor insights, backlinks, site audits and AI visibility, and it exposes an MCP server so AI agents can use the same data.

### Can I do SEO for free with OpenSEO?

The software is MIT licensed and free to self-host, but the README states you need a DataForSEO API key to get SEO data, and you pay DataForSEO directly when self-hosting. The cost is therefore per request rather than a subscription.

### Is SEO free on Google?

OpenSEO does not answer that question directly. What the README does say is that SEO data in this tool comes from DataForSEO, and that a DataForSEO API key is required whether you self-host with Docker or on Cloudflare.

### How do I do SEO for my website with OpenSEO?

The README lists the main workflows as keyword research, rank tracking, competitor insights, backlinks, site audits and AI visibility. To run them you self-host via Docker or Cloudflare and supply a DataForSEO API key, as described in docs/DATAFORSEO_API_KEY.md.

## Sources

- [Official documentation](https://openseo.so)
- [Official README](https://github.com/every-app/open-seo#readme)
- [Project repository](https://github.com/every-app/open-seo)
- [Release notes](https://github.com/every-app/open-seo/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/every-app-open-seo
