Skip to content
GrowthVector.io

Open Source SEO Tools: Self-Hosted Crawlers, Rank Trackers and APIs

Which open source SEO tools run without a paid data feed?

Updated

Open source SEO tools split into two groups: crawlers, audit tools and log analyzers that run on your own server, and rank and keyword tools that need a paid data feed.

The crawl, audit and log tools cost only hosting, because they read your own site or your own logs. Rank tools cost money as soon as they check Google, because the results come from a scraper or an API. The exception is OpenSERP, which has no per-search billing but needs your own proxies when engines block you.

We may earn a commission from some links on this page.

Related guides: digital marketing tools directory.

$279

a year for one Screaming Frog license, after the free 500 URLs

$50

minimum DataForSEO top-up behind OpenSEO's data

$10

a month for hosted OpenSEO, plus 28% on each DataForSEO request

Jan 1, 2027

end date for Google's Custom Search JSON API, closed to new customers

The short version

  • Crawl, audit and log tools cost only hosting. Screaming Frog is free up to 500 URLs, then $279 per license per year.
  • Rank tracking and keyword data cost money. SerpBear needs a scraper or your own proxies, and OpenSEO needs a DataForSEO key.
  • Google's Custom Search JSON API is closed to new customers. Tools that depend on it do not work for new projects.
  • SerpBear's own README marks SpaceSerp, ScrapingAnt and ScrapingRobot as no longer working.
  • Pick by job: SiteOne Crawler or LibreCrawl to crawl, Lighthouse CI for score budgets, GoAccess for logs.

Crawling: Screaming Frog alternatives

What Screaming Frog costs

Free up to 500 URLs. The paid license lifts the limit.

Screaming Frog SEO Spider is free for crawls up to 500 URLs. A paid license lets you crawl more than 500 URLs and unlocks its advanced features. Judge each open source crawler against that license, because the license is the cost you avoid.

PlanPrice (USD)
Free versionFree, up to 500 URLs
1 to 4 licenses$279 per license per year
5 to 9 licenses$265 per license per year
10 to 19 licenses$249 per license per year
20 or more licenses$235 per license per year

LibreCrawl: an MIT crawler built to replace the license

Free and open source, run in Docker or Python.

LibreCrawl is a web-based crawler for SEO analysis and site audits, built on Python Flask. Its README says it will always be free and open source. It compares itself with a $279 per year Screaming Frog license.

It renders JavaScript sites built with React, Vue or Angular, and it exports results to CSV, XLSX, JSON or XML. Its PageSpeed Insights feature for Core Web Vitals calls Google's service, so that one feature has an outside dependency.

  1. 1Install Docker, which the README recommends, or Python 3.8 or later.
  2. 2For JavaScript rendering, install the Chromium browser that Playwright uses, with the command below.
  3. 3Open the app at http://localhost:5000 in your browser in local mode.
playwright install chromium
No tagged release
LibreCrawl publishes no GitHub release and no tag. Pin a commit in your Docker build, so an update to the repo does not change your setup without notice.

SiteOne Crawler: one binary that can fail a deployment

MIT license, native binary, exit code 10 on failure.

SiteOne Crawler was rewritten in Rust. It ships as one native binary for Windows, macOS and Linux, with zero runtime dependencies, so a build server needs no language runtime installed.

Its exit code 10 on failure enables automated deployment blocking. Browser rendering and an AI assistant are optional features that you switch on when you need them.

Pick it for a crawl gate
Choose SiteOne Crawler when a crawl must pass before a release. Choose LibreCrawl when you want a web interface to browse the results.

SEOnaut: issues sorted by severity, with a database to run

Go and MySQL, with an optional hosted version.

SEOnaut is a web app built with Go and a MySQL database. It sorts issues into critical, high and low severity. The issue types include broken links, redirect problems, missing or duplicate meta tags and heading order.

You provide the database. The README compose file starts a MySQL container for you. If you do not want to run the database yourself, a hosted version is available at seonaut.org.

Read the license file, not the label

Some repos carry no standard license.

python-seo-analyzer shows a license that GitHub reports as Other, not a standard open source license. Read its LICENSE file before you call it open source.

Crawler frameworks for a custom crawl

Build when a ready tool does not fit

Neither framework ships audits or reports.

Crawlee and Scrapy are libraries. They fetch and parse pages. You write the checks, the report and the schedule. Build with them when you need custom extraction or a crawl that a ready tool cannot run.

OptionRuntimeWhat it gives youBest for
CrawleeNode.js 22.13 or higherA web scraping and browser automation libraryBrowser-heavy crawls in a Node stack
ScrapyPython 3.11 or higherA cross-platform framework from Zyte and contributorsLarge custom crawls in Python
advertoolsPythonA Scrapy-based SEO crawler, plus log and sitemap convertersSEO analysis with DataFrames
linkinatorNode.jsA broken link checker that crawls websitesBroken links only, not a full audit

Crawlee: a scraping library with no audit output

Node.js only, with no browser bundled.

Crawlee is a web scraping and browser automation library for JavaScript and TypeScript. It needs Node.js 22.13 or higher. It does not bundle a browser library, so you install Playwright yourself for pages that need JavaScript.

  • You write the crawl logic and the extraction logic.
  • You write the audit checks, because Crawlee brings no issue list.
  • A Python version of Crawlee lives in a separate repo.

Scrapy and advertools for Python teams

Python 3.11 or higher, with an SEO crawler built on Scrapy.

advertools includes a customizable SEO crawler built with Scrapy. By default it extracts titles, header tags, body text, status codes and headers. It accepts CSS and XPath selectors, and it can stop and resume large crawls.

The same package turns log files, XML sitemaps and robots.txt files into DataFrames. Join those with crawl output in Python when one report needs several sources.

serp_goog no longer works for new projects
The advertools serp_goog function wraps Google's Custom Search JSON API, which Google closed to new customers. Use OpenSERP or a paid SERP API for live rankings.

Rank trackers and the SERP data problem

The scraper bill behind a free rank tracker

SerpBear does not read Google itself.

SerpBear tracks Google positions for unlimited domains and keywords. It sends email notifications, has a built-in API and connects to Search Console. It does not query Google directly. It uses third-party scrapers or your own proxy IPs to check whether your domain appears for each keyword.

Unless you run your own proxy IPs, a paid scraper is the running cost of this free tracker. The SerpBear README lists these scraper prices.

Scraper servicePrice as the SerpBear README lists it
serper.dev$1.00 per 1,000 requests, pay as you go
ValueSERP$2.50 per 1,000 requests, pay as you go
HasDataFrom $29 a month
SerpApiFrom $50 a month
SearchApi.ioFrom $40 a month

Providers SerpBear's README marks as no longer working

Three names in the same README table.

The same README table marks three services as no longer working: SpaceSerp, ScrapingAnt and ScrapingRobot. Scrapers change or block traffic, so a tracker built on one of them stops returning ranks.

The Getting Started steps still tell you to get a free key from ScrapingRobot. That step points you at a service the README marks as no longer working.

Keyword volume and visits need Google accounts

Each tool gets its volume data from a different place.

SerpBear shows keyword volume and new keyword ideas through a Google Ads test account. Actual visits per keyword need Search Console linked to the tracker.

None of the open source tools in this guide ships its own keyword volume. OpenSEO gets volume from DataForSEO, and OpenSERP returns ranks, not volume.

Google's Custom Search API for SERP data

Closed to new customers, and it ends on January 1, 2027.

Google's Custom Search JSON API is closed to new customers. The service ends on January 1, 2027. Additional requests cost $5 per 1,000 queries.

A new project cannot rely on this API, so tools that wrap it, such as advertools serp_goog, do not work for new projects. Choose a self-hosted SERP source or a paid SERP API, and test it on your own keywords first.

OpenSERP: self-hosted SERP ranks with no per-search bill

Google, Bing, Yandex, Baidu, DuckDuckGo and Ecosia.

OpenSERP is a self-hosted REST API and CLI. It loads results in a browser for Google, Bing, Yandex, Baidu, DuckDuckGo and Ecosia, and it returns ranks as JSON. It needs no API keys and has no per-search billing.

Bing localizes results by exit IP, so some regions need a proxy in the target country. Engines can still return CAPTCHAs, rate limits or unrelated results, even in browser mode.

docker run --rm -p 127.0.0.1:7000:7000 karust/openserp serve -a 0.0.0.0 -p 7000
Plan for failed checks
The README suggests another engine or a proxy when results fail. Build that retry step into any daily rank job from the start.

serposcope is archived

A self-hosted tracker that no longer receives development.

serposcope, a self-hosted rank tracker, is archived on GitHub. Its last code push came on January 22, 2024, and its repo description reads LEGACY CODE. Do not start new work on it.

Site audits at scale and in CI

Lighthouse, Unlighthouse and Lighthouse CI

Lighthouse scores one URL. The other two run it across a site or in CI.

Lighthouse is Google's open source audit engine, licensed under Apache-2.0. Unlighthouse runs Lighthouse across a whole site, with a UI and smart sampling. Lighthouse CI runs, saves and asserts Lighthouse results, which stops regressions in accessibility, SEO and performance.

ToolWhat it checksWhere results go
LighthouseOne URL at a timeWherever you save the output
UnlighthouseLighthouse scores across many pages of one siteA local .unlighthouse output folder
Lighthouse CIScore budgets on every commitYour CI logs, or an optional LHCI server with history and a dashboard
Scores are per URL
Lighthouse CI and Unlighthouse both test scores for each URL. Neither one maps site-wide links or redirects, so use a crawler from the first part for that job. For a quick technical audit of one site, the free SEO audit tool checks metadata, crawlability, links, structured data and performance.

Unlighthouse: run it with npx

Check the Node.js requirement before you install.

Unlighthouse runs with npx, and its README requires Node.js 22.18 or higher. It saves reports to a local .unlighthouse output folder, and the README recommends that you add that folder to .gitignore.

Two Node.js requirements
The README asks for Node.js 22.18 or higher. The project's docs site names a higher Node.js version. Read the requirement for the build you install before you set up the crawl.

Lighthouse CI on every commit

The quick start is one GitHub Actions step.

The Lighthouse CI README quick start is a GitHub Actions workflow. Its key step runs the command below on every commit.

lhci autorun
  1. 1Set score budgets for performance, accessibility and SEO.
  2. 2Run lhci autorun in your CI workflow on every commit.
  3. 3Fail the build when a score drops below its budget.

The optional LHCI server stores history and shows a dashboard. It runs in any Node environment with persistent disk storage, or with network access to a Postgres or MySQL database. The newest GitHub release came out in June 2025, so pin a version.

Log file analysis

GoAccess: a log analyzer with no data feed

Your access log and a log format are the only inputs.

GoAccess is an open source, real-time web log analyzer, licensed under MIT. It runs in a terminal on *nix systems, or in your browser as a live HTML dashboard.

You point it at your access log, pick the log format and let it parse. No data feed is involved, so the only cost is the server that runs it.

GoAccess puts AI crawlers and Fediverse traffic in their own categories, apart from traditional search engine crawlers. The README also shows a quick estimate of crawler hits: count the log lines that contain bot. Use that count for a rough trend only.

advertools for logs joined to crawl data

Use advertools when the logs must join other data.

advertools converts log files into DataFrames. Use it when you want to join logs with a crawl, a sitemap or a URL list in Python.

NeedUse
A live view of traffic in a browserGoAccess
Joining log data with crawl output in Pythonadvertools
Few open source log tools
The open source options for SEO log work are thin. GoAccess covers the general case, and advertools covers the Python join. Plan on your own scripts for anything beyond that.

OpenSEO and the keyword data question

OpenSEO: all-in-one, but it runs on a paid data feed

MIT licensed, with keyword, rank, backlink and audit workflows.

OpenSEO is an MIT licensed open source alternative to Semrush and Ahrefs. It covers keyword research, rank tracking, competitor insights, backlinks, site audits and AI visibility.

It needs a DataForSEO API key to get SEO data. When you self-host, you pay DataForSEO directly. For the full setup and the costs from a five-site run, read OpenSEO on the DataForSEO API.

Still early
OpenSEO is still early in its release cycle, and releases come often. Pin a release before you deploy, and read the release notes before each update.

What OpenSEO costs you

DataForSEO is the bill. Hosting can run on a free plan.

CostPrice and billing basis
DataForSEO top-up$50 minimum; new accounts also get $1 of free credit
OpenSEO hosted version$10 a month subscription
Hosted fee on DataForSEO requests28% added to every request the hosted service makes
Self-hosted OpenSEONo OpenSEO subscription; you pay DataForSEO directly

The 28% is how the hosted service earns its margin. Self-hosting skips that fee, so your DataForSEO bill becomes the only data cost.

Self-hosting paths: Docker or Cloudflare

Docker for a quick try, Cloudflare for a hosted install.

Docker is the quickest way to try OpenSEO on your own machine. You need Docker Engine or Docker Desktop with Compose. A prebuilt image, ghcr.io/every-app/open-seo-standalone, also runs under Coolify, Portainer and Dokploy.

The Cloudflare path deploys with one command and works on Cloudflare's free plan. It needs Node.js 22.6 or newer, pnpm, and a Cloudflare account with R2 enabled. R2 requires a payment method on file, even within its free tier.

Create the admin account first
The first visitor creates the admin account, and registration closes after that. Anyone who finds the URL before you could claim the installation, so create the account right after you deploy.

Optional keys and the MCP server

Four optional keys, and an MCP server for AI agents.

Four optional keys extend OpenSEO. OPENROUTER_API_KEY enables AI conversations, research and summaries. A Google OAuth app links Search Console and Analytics. CONTEXT_API_KEY turns on JavaScript rendering for site audits, and GOOGLE_MAPS_API_KEY powers the local SEO map.

OpenSEO exposes an MCP server, so AI agents such as Claude Code can use your SEO data directly.

Hosting and data cost at a glance

Every tool in one table

Stars and newest releases as of October 31, 2026.

Stars and releases as of October 31, 2026. Both change, so open the repo before you decide. Crawl, audit and log tools need no paid data. Rank, keyword and backlink tools do need one.

Tool (license)JobStarsNewest releaseData source and costHosting
LibreCrawl (MIT)Crawl1,086No GitHub releaseNone to run; optional PageSpeed Insights calls GoogleDocker or Python 3.8 or higher
SiteOne Crawler (MIT)Crawl, audit, CI gate989v2.5.1, Jun 27, 2026None; fetches your siteOne native binary
SEOnaut (MIT)Audit847No GitHub releaseNone; fetches your siteDocker, plus a MySQL database
Crawlee (Apache-2.0)Crawl framework26,305v3.18.2, Sep 29, 2026None; you write the crawlNode.js 22.13 or higher
Scrapy (BSD-3-Clause)Crawl framework65,1412.19.0, Sep 10, 2026None; you write the crawlPython 3.11 or higher
advertools (MIT)Crawl, logs, SERP helpers1,493No GitHub release; newest tag 0.18.0, Jun 17, 2026None for crawling; serp_goog uses Google's API, closed to new customersPython
linkinator (MIT)Broken links1,282linkinator-v8.1.0, Aug 29, 2026None; fetches your siteNode.js
SerpBear (MIT)Rank tracking2,153v3.1.2, Oct 30, 2026Scraper service or your own proxies; Google Ads test account for volumeDocker; Next.js and SQLite
OpenSERP (MIT)SERP and rank API1,530v0.8.17, Oct 28, 2026None; proxies may be neededDocker or Go binary
Lighthouse (Apache-2.0)Page audit30,992v13.6.0, Oct 27, 2026None; runs against your siteYour machine or a CI runner
Unlighthouse (MIT)Site-wide Lighthouse4,929v0.19.1, Oct 3, 2026None; runs against your siteNode.js; check the version
Lighthouse CI (Apache-2.0)CI budgets7,122v0.15.1, Jun 26, 2025None; runs against your siteCI runner; optional server with Postgres or MySQL
GoAccess (MIT)Log analysis21,104No GitHub release; newest tag v1.12Your access logs onlyTerminal or browser HTML report
OpenSEO (MIT)All-in-one25,925v0.1.22, Oct 31, 2026DataForSEO key, $50 minimum top-upDocker, or Cloudflare free plan with R2

Pick by job

Match the tool to the job, then budget for the feed.

  • Crawl a site you own: LibreCrawl or SiteOne Crawler. Neither needs a license, and both fetch your site directly.
  • Gate a release on a crawl: SiteOne Crawler, which exits with code 10 on failure.
  • Score pages in CI: Lighthouse CI for budgets, Unlighthouse for site-wide Lighthouse runs.
  • Read server logs: GoAccess for a live view, advertools for joins with crawl data in Python.
  • Track ranks: budget for a scraper, proxies or a SERP API, because the rank trackers here all depend on search results from one of them.
  • Keyword volume and backlinks: OpenSEO on a DataForSEO key, the only all-in-one in this guide.

Crawl, audit and log jobs cost only hosting. Rank, keyword and backlink data come from a paid or fragile feed, so price that feed before you commit to a tool.

Common Questions

Which SEO jobs can you run for free on your own server, and which always need a paid data feed?

Crawling, site audits and log analysis need only hosting. LibreCrawl, SiteOne Crawler, SEOnaut, Unlighthouse and GoAccess read your own site or your own logs, so none needs a paid data feed to run. The one exception is LibreCrawl's optional PageSpeed Insights feature, which calls a Google service. Rank tracking and keyword data work differently. SerpBear needs third-party scrapers or your own proxies, and OpenSEO needs a DataForSEO key with a $50 minimum top-up.

Why does a self-hosted rank tracker stop working after a few months?

The tracker depends on scrapers, and scrapers change or block traffic. SerpBear's own README marks SpaceSerp, ScrapingAnt and ScrapingRobot as no longer working, and its setup steps still point to a ScrapingRobot key. OpenSERP warns that engines can return CAPTCHAs, rate limits or unrelated results, even in browser mode. Test each provider on a small keyword set, and keep a second provider ready before a client report depends on the tracker.

Can advertools replace a paid SERP API on a new project?

Not through serp_goog. That function wraps Google's Custom Search JSON API. Google closed the API to new customers, and the service ends on January 1, 2027, so a new project cannot rely on it. For live SERP data, test OpenSERP, which needs no API keys, or a paid SERP API. Measure the failure rate on your own keywords before you commit to either one.

What do you give up by swapping a Screaming Frog license for an open source crawler?

Screaming Frog is free up to 500 URLs. Beyond that, each license costs $279 per year when you buy 1 to 4 licenses. LibreCrawl and SiteOne Crawler cost nothing to license, but LibreCrawl publishes no GitHub release or tag, so you must pin a commit yourself. You also run Docker or a binary, and you support the setup yourself. In our view, the gap is release discipline and support, not the price.

When should you build a crawler on Scrapy or Crawlee instead of installing one?

Build when you need custom extraction, or a crawl that no ready tool fits. Neither framework ships audits or reports, so you write every check and every output yourself. Crawlee needs Node.js 22.13 or higher, plus Playwright for pages that need JavaScript. Scrapy needs Python 3.11 or higher. If you want Python without starting from zero, advertools includes a Scrapy-based SEO crawler that can stop and resume large crawls.

What does Lighthouse CI catch that a crawl does not, and the reverse?

Lighthouse CI asserts score budgets for accessibility, SEO and performance on every commit, and it blocks a build when a budget breaks. A crawler checks site-wide structure, such as broken links and redirects, which per-URL Lighthouse scores do not show. SiteOne Crawler's exit code 10 can block a deployment too, so a crawl can gate a release. Run both: budgets on every commit, and a full crawl before each release.

Sources