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.
a year for one Screaming Frog license, after the free 500 URLs
minimum DataForSEO top-up behind OpenSEO's data
a month for hosted OpenSEO, plus 28% on each DataForSEO request
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.
| Plan | Price (USD) |
|---|---|
| Free version | Free, 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.
- 1Install Docker, which the README recommends, or Python 3.8 or later.
- 2For JavaScript rendering, install the Chromium browser that Playwright uses, with the command below.
- 3Open the app at http://localhost:5000 in your browser in local mode.
playwright install chromiumSiteOne 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.
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.
| Option | Runtime | What it gives you | Best for |
|---|---|---|---|
| Crawlee | Node.js 22.13 or higher | A web scraping and browser automation library | Browser-heavy crawls in a Node stack |
| Scrapy | Python 3.11 or higher | A cross-platform framework from Zyte and contributors | Large custom crawls in Python |
| advertools | Python | A Scrapy-based SEO crawler, plus log and sitemap converters | SEO analysis with DataFrames |
| linkinator | Node.js | A broken link checker that crawls websites | Broken 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.
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 service | Price 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 |
| HasData | From $29 a month |
| SerpApi | From $50 a month |
| SearchApi.io | From $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 7000serposcope 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.
| Tool | What it checks | Where results go |
|---|---|---|
| Lighthouse | One URL at a time | Wherever you save the output |
| Unlighthouse | Lighthouse scores across many pages of one site | A local .unlighthouse output folder |
| Lighthouse CI | Score budgets on every commit | Your CI logs, or an optional LHCI server with history and a dashboard |
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.
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- 1Set score budgets for performance, accessibility and SEO.
- 2Run lhci autorun in your CI workflow on every commit.
- 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.
| Need | Use |
|---|---|
| A live view of traffic in a browser | GoAccess |
| Joining log data with crawl output in Python | advertools |
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.
What OpenSEO costs you
DataForSEO is the bill. Hosting can run on a free plan.
| Cost | Price 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 requests | 28% added to every request the hosted service makes |
| Self-hosted OpenSEO | No 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.
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) | Job | Stars | Newest release | Data source and cost | Hosting |
|---|---|---|---|---|---|
| LibreCrawl (MIT) | Crawl | 1,086 | No GitHub release | None to run; optional PageSpeed Insights calls Google | Docker or Python 3.8 or higher |
| SiteOne Crawler (MIT) | Crawl, audit, CI gate | 989 | v2.5.1, Jun 27, 2026 | None; fetches your site | One native binary |
| SEOnaut (MIT) | Audit | 847 | No GitHub release | None; fetches your site | Docker, plus a MySQL database |
| Crawlee (Apache-2.0) | Crawl framework | 26,305 | v3.18.2, Sep 29, 2026 | None; you write the crawl | Node.js 22.13 or higher |
| Scrapy (BSD-3-Clause) | Crawl framework | 65,141 | 2.19.0, Sep 10, 2026 | None; you write the crawl | Python 3.11 or higher |
| advertools (MIT) | Crawl, logs, SERP helpers | 1,493 | No GitHub release; newest tag 0.18.0, Jun 17, 2026 | None for crawling; serp_goog uses Google's API, closed to new customers | Python |
| linkinator (MIT) | Broken links | 1,282 | linkinator-v8.1.0, Aug 29, 2026 | None; fetches your site | Node.js |
| SerpBear (MIT) | Rank tracking | 2,153 | v3.1.2, Oct 30, 2026 | Scraper service or your own proxies; Google Ads test account for volume | Docker; Next.js and SQLite |
| OpenSERP (MIT) | SERP and rank API | 1,530 | v0.8.17, Oct 28, 2026 | None; proxies may be needed | Docker or Go binary |
| Lighthouse (Apache-2.0) | Page audit | 30,992 | v13.6.0, Oct 27, 2026 | None; runs against your site | Your machine or a CI runner |
| Unlighthouse (MIT) | Site-wide Lighthouse | 4,929 | v0.19.1, Oct 3, 2026 | None; runs against your site | Node.js; check the version |
| Lighthouse CI (Apache-2.0) | CI budgets | 7,122 | v0.15.1, Jun 26, 2025 | None; runs against your site | CI runner; optional server with Postgres or MySQL |
| GoAccess (MIT) | Log analysis | 21,104 | No GitHub release; newest tag v1.12 | Your access logs only | Terminal or browser HTML report |
| OpenSEO (MIT) | All-in-one | 25,925 | v0.1.22, Oct 31, 2026 | DataForSEO key, $50 minimum top-up | Docker, 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
- [1] Screaming Frog SEO Spider pricing
- [2] LibreCrawl on GitHub
- [3] SiteOne Crawler on GitHub
- [4] SEOnaut on GitHub
- [5] SEOnaut hosted version
- [6] python-seo-analyzer on GitHub
- [7] Crawlee on GitHub
- [8] Scrapy on GitHub
- [9] advertools on GitHub
- [10] advertools serp documentation
- [11] linkinator on GitHub
- [12] SerpBear on GitHub
- [13] OpenSERP on GitHub
- [14] serposcope on GitHub
- [15] Lighthouse on GitHub
- [16] Unlighthouse on GitHub
- [17] Unlighthouse docs
- [18] Lighthouse CI on GitHub
- [19] Lighthouse CI server documentation
- [20] GoAccess on GitHub
- [21] OpenSEO on GitHub
- [22] OpenSEO DataForSEO API key guide
- [23] OpenSEO Docker self-hosting guide
- [24] OpenSEO Cloudflare self-hosting guide
- [25] Google Custom Search JSON API overview