What Kind of Data Does Open-SEO Collect? A Complete Breakdown of Its SEO Data Pipeline
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— bulk keyword research toolsrc/server/mcp/tools/list-saved-keywords.ts— retrieves cached keyword setssrc/server/mcp/tools/save-keywords.ts— persists user-tagged keywords without API consumptionsrc/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.
// 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 handles the API coordination, storing raw JSON responses for downstream analysis.
// 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) orchestrates:
- Scheduled SERP snapshots for each keyword/device combination (desktop and mobile)
- Position normalization against the
rank_trackingtable - Historical trend calculation
Source files:
src/server/workflows/RankCheckWorkflow.ts— batch job orchestrationsrc/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. 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
// 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, with 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.
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):
- Referring domains and URLs
- Anchor text distribution
- Link type classification (dofollow/nofollow)
- First seen / last seen timestamps
Ahrefs API (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.
Data Validation and Schema Architecture
All inbound data passes through Zod validation layers before persistence:
src/types/schemas/keywords.ts— keyword research payloadssrc/types/schemas/ai-search.ts— AI-assisted search operationssrc/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:
KeywordResearchServicefor keyword intelligenceRankCheckWorkflowfor position monitoringsiteAuditWorkflowCrawl.tsfor technical auditsGscServiceandAhrefsintegrations 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 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 and src/types/schemas/ai-search.ts define strict validation rules. The Drizzle ORM schema in 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.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →