# What Kind of Data Does Open-SEO Collect? A Complete Breakdown of Its SEO Data Pipeline

> Discover the comprehensive SEO data Open-SEO collects, including keyword research, SERP results, site audits, and backlink profiles. Understand its data pipeline now.

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

---

**Open-SEO collects keyword research metrics, SERP results, rank tracking data, site audit crawls, Google Search Console statistics, backlink profiles, and domain authority scores—combining user inputs with third-party API data from DataForSEO, Ahrefs, and Google APIs.**

Open-SEO is a full-stack SEO platform built for developers who need programmatic access to search intelligence. Its architecture spans multiple data domains, each responsible for ingesting, validating, and persisting specific types of SEO data. Understanding what data Open-SEO collects requires examining its server functions, MCP tools, and database schema.

This article breaks down every data category processed by the platform, tracing how each flows from external APIs or user input into the internal PostgreSQL-backed system.

---

## Keyword Research Data

Open-SEO gathers comprehensive keyword intelligence through **DataForSEO's API endpoints**. The platform wraps these calls in the `KeywordResearchService` and exposes them as MCP tools.

**Key data points collected:**

- Seed keywords and related keyword suggestions
- Monthly search volume
- Cost-per-click (CPC) estimates
- Keyword difficulty scores
- Competition metrics

**Source implementation:**

- [`src/server/mcp/tools/research-keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/research-keywords.ts) — bulk keyword research tool
- [`src/server/mcp/tools/list-saved-keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/list-saved-keywords.ts) — retrieves cached keyword sets
- [`src/server/mcp/tools/save-keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/save-keywords.ts) — persists user-tagged keywords without API consumption
- [`src/server/features/keywords/services/KeywordResearchService.ts`](https://github.com/every-app/open-seo/blob/main/src/server/features/keywords/services/KeywordResearchService.ts) — core service layer

The `researchKeywords` method accepts parameters like `maxKeywordsPerSeed` to control API usage and returns normalized objects validated against [`src/types/schemas/keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/types/schemas/keywords.ts).

```typescript
// src/server/mcp/tools/research-keywords.ts
import { KeywordResearchService } from "@/server/features/keywords/services/KeywordResearchService";

const seeds = ["seo tools", "open source seo"];
const result = await KeywordResearchService.researchKeywords(seeds, {
  maxKeywordsPerSeed: 150,
});
// Returns: array of keyword objects with volume, difficulty, CPC, etc.

```

---

## SERP Results Data

Live search engine results are fetched via **DataForSEO's serp-live API** or a Google Ads API fallback. These snapshots capture the competitive landscape for any given query.

**Data collected per SERP:**

- Organic ranking positions and URLs
- Featured snippets
- Advertisements and shopping results
- Local pack entries
- Rich result types

The `fetchSerpResults` helper in [`src/server/mcp/tools/get-serp-results.ts`](https://github.com/every-app/open-seo/blob/main/src/server/mcp/tools/get-serp-results.ts) handles the API coordination, storing raw JSON responses for downstream analysis.

```typescript
// src/server/mcp/tools/get-serp-results.ts
import { fetchSerpResults } from "@/server/mcp/tools/get-serp-results";

const serpData = await fetchSerpResults({
  keyword: "best seo software",
  locationCode: 2840, // United States
  device: "desktop"
});

```

---

## Rank Tracking Data

Open-SEO operates a **periodic rank monitoring system** that records position changes over time for tracked keywords.

**The `RankCheckWorkflow` ([`src/server/workflows/RankCheckWorkflow.ts`](https://github.com/every-app/open-seo/blob/main/src/server/workflows/RankCheckWorkflow.ts)) orchestrates:**

- Scheduled SERP snapshots for each keyword/device combination (desktop and mobile)
- Position normalization against the `rank_tracking` table
- Historical trend calculation

**Source files:**

- [`src/server/workflows/RankCheckWorkflow.ts`](https://github.com/every-app/open-seo/blob/main/src/server/workflows/RankCheckWorkflow.ts) — batch job orchestration
- [`src/serverFunctions/rank-tracking.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/rank-tracking.ts) — CRUD and query operations

This data layer enables position history graphs, volatility alerts, and competitive displacement tracking.

---

## Site Audit Data

The platform performs **automated technical SEO crawls** through [`siteAuditWorkflowCrawl.ts`](https://github.com/every-app/open-seo/blob/main/siteAuditWorkflowCrawl.ts). These audits classify page health and performance characteristics.

**Collected per URL:**

- HTTP response status codes
- Fetch classification (ok / blocked / error)
- Page title and meta description extraction
- Lighthouse performance scores (optional)
- Crawl depth and internal link graph

```typescript
// src/server/workflows/siteAuditWorkflowCrawl.ts
import { crawlSite } from "@/server/workflows/siteAuditWorkflowCrawl";

await crawlSite({
  projectId: "proj_abc123",
  url: "https://example.com",
  userId: "user_xyz789",
  maxPages: 1000,
  enableLighthouse: true
});

```

Results persist in the `audit` schema defined in [`src/db/schema.ts`](https://github.com/every-app/open-seo/blob/main/src/db/schema.ts), with [`src/serverFunctions/audit.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/audit.ts) handling result ingestion and retrieval.

---

## Google Search Console Data

Open-SEO integrates directly with **Google's Search Console API** through `GscService` in [`src/serverFunctions/gsc.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/gsc.ts).

**Synchronized metrics:**

- Impressions per query and page
- Click counts and click-through rate (CTR)
- Average position per query
- Date-range aggregated performance

This data feeds reporting dashboards and correlates with rank tracking to identify keyword opportunity gaps.

---

## Backlink and Domain Authority Data

Two external providers supply off-page SEO intelligence:

**DataForSEO backlinks endpoint** ([`src/serverFunctions/backlinks.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/backlinks.ts)):

- Referring domains and URLs
- Anchor text distribution
- Link type classification (dofollow/nofollow)
- First seen / last seen timestamps

**Ahrefs API** ([`src/serverFunctions/ahrefs.ts`](https://github.com/every-app/open-seo/blob/main/src/serverFunctions/ahrefs.ts)):

- Domain Rating (DR)
- URL Rating (UR)
- Backlink counts and referring domain counts
- Organic traffic estimates

The `fetchDomainRating` function normalizes these metrics for consistent UI presentation across the platform.

---

## User-Generated and Project Metadata

Beyond external API data, Open-SEO manages **first-party data** created by platform users:

| Data Type | Collection Method | Storage Location |
|-----------|-------------------|------------------|
| Saved keyword tags and notes | `save_keywords` MCP tool | `saved_keywords` table |
| Project configuration | `ProjectService` | `projects` table |
| Usage limits and credit balances | `BillingService` | `billing` table |
| User permissions and access controls | Authentication layer | `users` / `project_members` tables |

These operations consume no external API credits—they interact solely with the internal database validated through Zod schemas like [`src/types/schemas/keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/types/schemas/keywords.ts).

---

## Data Validation and Schema Architecture

All inbound data passes through **Zod validation layers** before persistence:

- [`src/types/schemas/keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/types/schemas/keywords.ts) — keyword research payloads
- [`src/types/schemas/ai-search.ts`](https://github.com/every-app/open-seo/blob/main/src/types/schemas/ai-search.ts) — AI-assisted search operations
- [`src/db/schema.ts`](https://github.com/every-app/open-seo/blob/main/src/db/schema.ts) — Drizzle ORM table definitions covering keywords, audits, rank tracking, GSC data, and backlinks

This guarantees type safety across the TypeScript codebase and prevents malformed API responses from corrupting the database.

---

## Summary

Open-SEO collects and processes **three distinct data layers**:

- **User inputs** — seed keywords, project settings, tags, and annotations
- **External API data** — DataForSEO, Ahrefs, Google Search Console, and Google Ads API responses
- **Derived platform data** — crawl results, Lighthouse scores, rank snapshots, and usage telemetry

Key architectural components include:

- `KeywordResearchService` for keyword intelligence
- `RankCheckWorkflow` for position monitoring
- [`siteAuditWorkflowCrawl.ts`](https://github.com/every-app/open-seo/blob/main/siteAuditWorkflowCrawl.ts) for technical audits
- `GscService` and `Ahrefs` integrations for authority metrics
- Zod schemas and Drizzle ORM for data integrity

---

## Frequently Asked Questions

### What external APIs does Open-SEO rely on for data collection?

Open-SEO primarily uses **DataForSEO** for keyword research, SERP results, rank tracking, and backlink data. It integrates **Ahrefs** for domain authority metrics and **Google Search Console API** for performance data. A **Google Ads API** fallback exists for SERP retrieval when needed.

### Does Open-SEO store historical rank tracking data?

Yes. The `RankCheckWorkflow` in [`src/server/workflows/RankCheckWorkflow.ts`](https://github.com/every-app/open-seo/blob/main/src/server/workflows/RankCheckWorkflow.ts) periodically snapshots SERP positions and persists them to the `rank_tracking` table. This enables historical trend analysis, position volatility alerts, and competitive benchmarking over time.

### How does Open-SEO validate the data it collects?

All data passes through **Zod schemas** before database insertion. Files like [`src/types/schemas/keywords.ts`](https://github.com/every-app/open-seo/blob/main/src/types/schemas/keywords.ts) and [`src/types/schemas/ai-search.ts`](https://github.com/every-app/open-seo/blob/main/src/types/schemas/ai-search.ts) define strict validation rules. The Drizzle ORM schema in [`src/db/schema.ts`](https://github.com/every-app/open-seo/blob/main/src/db/schema.ts) provides additional type safety at the persistence layer.

### Can users add their own data without consuming API credits?

Yes. The `save_keywords` and `list_saved_keywords` MCP tools allow users to persist keywords with custom tags and notes directly to the `saved_keywords` table. These operations involve no external API calls and rely entirely on internal database storage.