# Open-SEO Main Features: Technical Deep-Dive into the Open-Source SEO Platform

> Explore Open-SEO's main features: keyword research, rank tracking, competitor insights, backlink analysis, site audits, and AI agents. Discover an affordable open-source SEO alternative.

- Repository: [Every App/open-seo](https://github.com/every-app/open-seo)
- Tags: deep-dive
- Published: 2026-08-06

---

**Open-SEO is a full-stack, open-source SEO platform providing keyword research, rank tracking, competitor insights, backlink analysis, site audits, and AI agent integration through a pay-as-you-go credit system designed as an alternative to expensive commercial tools like Semrush and Ahrefs.**

The `every-app/open-seo` repository delivers these capabilities via a modern TypeScript architecture built on TanStack React-Start and Cloudflare Workers. It integrates directly with Google Search Console and DataForSEO APIs while exposing functionality through both a focused React UI and a Model-Context-Protocol (MCP) server for AI agents.

## Core SEO Workflow Features

Open-SEO implements six primary SEO workflows through typed server functions and dedicated UI routes defined in [`web/src/lib/feature-pages.ts`](https://github.com/every-app/open-seo/blob/main/web/src/lib/feature-pages.ts).

### Keyword Research

The **keyword research** module generates keyword ideas, difficulty scores, and topic clusters by querying Google Search Console data. The implementation in [`src/serverFunctions/searchPerformance.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/searchPerformance.ts) builds GSC filters and returns totals, striking-distance rows, and country lists.

```typescript
import { getSearchPerformanceReport } from "@/serverFunctions/searchPerformance";

await getSearchPerformanceReport({
  method: "POST",
  data: {
    dateRange: "last-30-days",
    device: "mobile",
    country: "US",
  },
});

```

This function calls `GscService.getPerformance` and powers the UI routes under `/features/keyword-research`.

### Rank Tracking

The **rank tracking** feature monitors position changes for selected keywords across time. Implemented in [`src/serverFunctions/rank-tracking.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/rank-tracking.ts), it stores historical SERP data and exposes trend analysis through the `/features/rank-tracker` interface.

### Competitor Insights

**Competitor analysis** leverages [`src/serverFunctions/serp-locations.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/serp-locations.ts) to retrieve SERP positioning data and backlink profiles for competing domains. The UI routes under `/features/competitor-insights` visualize this comparative data.

### Backlink Analysis

The **backlink checker** retrieves and monitors backlink profiles via DataForSEO integration. Server functions in [`src/serverFunctions/backlinks.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/backlinks.ts) (referenced in the architecture) support the `/features/backlink-checker` workflow.

### Site Audits

**Site auditing** crawls websites to detect broken links, duplicate content, and missing meta tags. The crawl workflow resides in [`src/server/workflows/site-audit-workflow-helpers.ts`](https://github.com/every-app/open-seo/blob/main/src/server/workflows/site-audit-workflow-helpers.ts), while MCP exposure lives in [`src/server/mcp/tools/site-audit-tools.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/site-audit-tools.ts).

```typescript
import { mcpResponse } from "@/server/mcp/formatters";
import { withMcpProjectAuth } from "@/server/mcp/project-auth";

export const runSiteAudit = withMcpProjectAuth(
  async (projectId, url) => {
    await startCrawl({ projectId, startUrl: url });
    return mcpResponse({ status: "queued", url });
  }
);

```

### AI Visibility

The **AI visibility** layer exposes all SEO data through MCP tools (e.g., [`whoami.ts`](https://github.com/every-app/open-seo/blob/main/whoami.ts), [`search-console-tools.ts`](https://github.com/every-app/open-seo/blob/main/search-console-tools.ts)) allowing external AI agents to query statistics, trigger audits, and receive remediation instructions programmatically.

## MCP Server and AI Integration Architecture

Open-SEO's **MCP server** functions as a bridge between SEO data and AI agents like Claude Code or Hermes. The transport layer in [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts) handles authentication, versioning, and response formatting.

Individual tools reside in `src/server/mcp/tools/*`:
- [`whoami.ts`](https://github.com/every-app/open-seo/blob/main/whoami.ts) – Minimal example demonstrating project authentication
- [`search-console-tools.ts`](https://github.com/every-app/open-seo/blob/main/search-console-tools.ts) – Exposes GSC performance statistics
- [`site-audit-tools.ts`](https://github.com/every-app/open-seo/blob/main/site-audit-tools.ts) – Provides audit triggers and issue remediation

These typed tools enable **AI skills** (reusable workflows) defined in [`docs/MAINTAINERS.md`](https://github.com/every-app/open-seo/blob/main/docs/MAINTAINERS.md) that guide agents through complex SEO tasks without manual UI interaction.

## Technical Implementation Stack

### Front-End Architecture

The **React-Start application** provides a modern interface with file-based routing managed by [`web/src/routeTree.gen.ts`](https://github.com/every-app/open-seo/blob/main/web/src/routeTree.gen.ts). Feature pages are registered in [`web/src/lib/feature-pages.ts`](https://github.com/every-app/open-seo/blob/main/web/src/lib/feature-pages.ts) with associated metadata and keywords.

### Server Functions and Data Layer

**TanStack React-Start server functions** (located in `src/serverFunctions/`) call third-party services and return typed results. The **data layer** uses D1 (SQLite-compatible) for structured storage and optionally R2 for object storage, with schemas defined via Drizzle ORM in [`drizzle.config.ts`](https://github.com/every-app/open-seo/blob/main/drizzle.config.ts) and [`src/db/telemetry.schema.ts`](https://github.com/every-app/open-seo/blob/main/src/db/telemetry.schema.ts).

### Self-Hosting Options

Open-SEO supports two officially documented deployment paths:

1. **Docker** – Local deployment using `Dockerfile.selfhost` and documented in [`docs/SELF_HOSTING_DOCKER.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_DOCKER.md)
2. **Cloudflare Workers** – Edge-distributed deployment using `wrangler.jsonc` for high-throughput crawls within the Cloudflare step budget, documented in [`docs/SELF_HOSTING_CLOUDFLARE.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_CLOUDFLARE.md)

Both paths share the same core codebase, differing only in deployment scripts.

## Credit-Based Billing System

Open-SEO operates on a **credit-based pricing model** defined in [`src/shared/billing-credit-features.ts`](https://github.com/every-app/open-seo/blob/main/src/shared/billing-credit-features.ts). The hosted SaaS charges $10 per month, while self-hosted deployments only incur DataForSEO API usage costs without platform fees.

```typescript
import { getProjectCredits } from "@/shared/billing";

const credits = await getProjectCredits({ projectId: "proj_123" });
console.log(`Remaining credits: ${credits}`);

```

This implementation allows granular cost control compared to traditional subscription-based SEO tools.

## Summary

- **Open-SEO** provides six core SEO workflows: keyword research, rank tracking, competitor insights, backlink analysis, site audits, and AI visibility
- The **MCP server architecture** in [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts) enables AI agent integration through typed tools like [`search-console-tools.ts`](https://github.com/every-app/open-seo/blob/main/search-console-tools.ts) and [`site-audit-tools.ts`](https://github.com/every-app/open-seo/blob/main/site-audit-tools.ts)
- **Technical stack** includes TanStack React-Start, Cloudflare Workers/D1, and Drizzle ORM for type-safe database operations
- **Self-hosting** supports both Docker local deployment and Cloudflare Workers edge distribution
- **Billing** uses a credit system ([`src/shared/billing-credit-features.ts`](https://github.com/every-app/open-seo/blob/main/src/shared/billing-credit-features.ts)) with $10/month hosted option or pay-for-usage DataForSEO costs when self-hosted

## Frequently Asked Questions

### What makes Open-SEO different from Semrush or Ahrefs?

Open-SEO is open-source and offers a pay-as-you-go credit system rather than expensive fixed subscriptions. According to the `every-app/open-seo` source code, you can self-host the platform and only pay for DataForSEO API usage, or use the hosted version for $10/month, significantly reducing costs for agencies and individual practitioners.

### How does the MCP server integration work?

The MCP server exposes SEO data through typed tools in `src/server/mcp/tools/*` that AI agents can invoke. The transport layer in [`src/server/mcp/transport.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/transport.ts) handles authentication and formatting, allowing tools like [`search-console-tools.ts`](https://github.com/every-app/open-seo/blob/main/search-console-tools.ts) to return GSC data directly to agents like Claude Code for automated analysis and recommendations.

### Can I self-host Open-SEO without using Cloudflare?

Yes. While Cloudflare Workers provide scalable edge deployment documented in [`docs/SELF_HOSTING_CLOUDFLARE.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_CLOUDFLARE.md), the repository includes [`docs/SELF_HOSTING_DOCKER.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_DOCKER.md) and a `Dockerfile.selfhost` for local Docker-based deployments that run independently of Cloudflare's infrastructure.

### What database does Open-SEO use for storing SEO data?

Open-SEO uses **D1**, a SQLite-compatible database, for structured data storage with schemas defined in Drizzle ORM files like [`drizzle.config.ts`](https://github.com/every-app/open-seo/blob/main/drizzle.config.ts) and [`src/db/telemetry.schema.ts`](https://github.com/every-app/open-seo/blob/main/src/db/telemetry.schema.ts). It optionally uses **R2** for object storage, particularly for crawl data and large audit reports.