OpenSERP is a free, open source data extraction & web scraping project written in Go and released under MIT. It has 1,395 GitHub stars, 157 forks and 20 open issues, and was last pushed 2 months ago. On this registry it ranks #38 of 45 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available. It gained 16 stars over the last 6 tracked days.

What is OpenSERP?

What it is

OpenSERP is a self-hosted search engine results page API and command-line tool written in Go. It returns live, structured results from Google, Bing, Yandex, Baidu, DuckDuckGo, and Ecosia through one JSON schema, and it can extract clean markdown from target pages. The project lives in the open-source data extraction and web scraping ecosystem, with topics such as AI, API, CLI, LLM, and search.

The concrete problem it solves is dependence on commercial SERP APIs. OpenSERP gives developers a no-key, no-per-search-billing way to query multiple engines from localhost, including engines that the README says paid APIs do not cover. It supports AI and SEO workflows by exposing results, SERP features, filters, and page content.

Key capabilities

  • Dedicated endpoints for six search engines return structured results under one JSON schema.
  • Megasearch sends one query across several engines and merges and deduplicates results.
  • URL extraction returns search results plus clean markdown of linked pages in one call.
  • SERP feature support includes AI summaries, answer boxes, people-also-ask, and related searches.
  • Image search and filters for language, date range, file type, and site narrow result sets.
  • Output formats include JSON, Markdown, Text, and NdJSON.
  • Operational features include proxies, cache, resilient mode, and prebuilt Docker images.

Who uses it and how

  • Developers building LLM or agent tools use it as a local search backend.
  • SEO teams use it for rank tracking and monitoring organic results across multiple engines.
  • Automation scripts call the CLI or HTTP API to collect structured search data without paid API keys.
  • Self-hosters run the API server with Docker or Go to keep search traffic local.
  • Users who do not want to operate servers can use the hosted version.

Getting started

Typical installation uses the prebuilt Docker image karust/openserp, the Go install command github.com/karust/openserp@latest, or building from source and running openserp serve. The README shows a localhost API request to /mega/search with engines, text, extraction, and mode parameters.

When to use it — and when not to

OpenSERP is useful when a project needs multi-engine SERP access without API keys or per-search billing. Self-hosters must operate the server, configure proxies and cache if needed, and handle reliability through resilient mode; the hosted version is the alternative for users who do not want that responsibility. The project is early-stage, with a zero-year repository age, zero listed contributors, and twenty open issues, so teams needing mature support or a long release history should evaluate that risk carefully.

project readme (upstream, from github) — read inline

OpenSERP

OpenSERP

Go Reference release Docker Pulls CI Telegram

OpenSERP is a free, open-source SERP API and CLI for Google, Yandex, Baidu, Bing, DuckDuckGo, and Ecosia.

No API keys, no per-search billing: one command gives you live, structured search results on localhost - including engines the paid APIs don't cover. Use it as a search tool for LLMs and agents, or as a backend for SEO rank tracking. If you'd rather not run infrastructure, there is a hosted version with the same API.

OpenSERP CLI demo

Features

  • Dedicated endpoints for six engines, same JSON schema across all of them
  • Megasearch - one query across several engines at once, merged and deduped
  • URL extraction - search results plus clean markdown of the target pages in one call
  • SERP features: AI summaries, answer boxes, people-also-ask, related searches
  • Image search, filters (language, date range, file type, site), JSON/Markdown/Text/NdJSON output
  • Proxies, cache, resilient mode, prebuilt Docker images

Quick Start

Docker

Prebuilt images are published to docker hub: karust/openserp.

# Run the API server via prebuilt image
docker run --rm -p 127.0.0.1:7000:7000 karust/openserp:latest serve -a 0.0.0.0 -p 7000

# Or
docker compose up

Go install

go install github.com/karust/openserp@latest
openserp search duckduckgo "open source serp api" --format markdown

From Source

git clone https://github.com/karust/openserp.git
cd openserp
go build -o openserp .
./openserp serve

First request

# mode=any returns the first engine that responds
curl "http://127.0.0.1:7000/mega/search?engines=bing,google&text=golang+vs+rust&extract=1&mode=any"
Example JSON response
{
  "query": {
    "text": "golang vs rust",
    "engines_requested": ["bing", "google"]
  },
  "meta": {
    "request_id": "019ecdc0-a66d-79a4-9d2b-9e9b480d495e",
    "requested_at": "2026-06-16T00:06:55Z",
    "took_ms": 720,
    "engines_responded": ["bing"],
    "engines_failed": [],
    "version": "2.1"
  },
  "results": [
    {
      "id": "s_5a8273f16b19ab64",
      "rank": 1,
      "type": "organic",
      "title": "The Go Programming Language",
      "url": "https://go.dev/",
      "display_url": "go.dev",
      "snippet": "Get Started Playground Tour Stack Overflow Help Packages Standard Library …",
      "domain": "go.dev",
      "favicon": "https://go.dev/favicon.ico",
      "position": {
        "absolute": 1
      },
      "engine": "bing",
      "domain_info": {
        "tld": "dev",
        "sld": "go",
        "category": ""
      },
      "extracted": {
        "title": "Build simple, secure, scalable systems with Go",
        "format": "markdown",
        "content": "## Build simple, secure, scalable systems with Go\n\n![Go Gopher climbing a ladder.](https://go.dev/images/gophers/ladder.svg)\n\n- “At the time, no single team member knew Go, but **within a month, everyone was writing in Go** and we were building out the endpoints. ........",
        "mode_used": "fast",
        "fetched_at": "2026-06-16T00:06:56Z"
      }
    },
    {
      "id": "s_1a364ebcb3035539",
      "rank": 2,
      "type": "organic",
      "title": "Go (programming language) - Wikipedia",
      "url": "https://en.wikipedia.org/wiki/Go_(programming_language)",
      "display_url": "en.wikipedia.org › wiki › Go_(programming_language)",
      "snippet": "In Go's package system, each package has a path (e.g., \"compress/bzip2\" or \"golang.org/x/net/html\") and a name (e.g., bzip2 or html). …",
      "domain": "en.wikipedia.org",
      "favicon": "https://en.wikipedia.org/favicon.ico",
      "position": {
        "absolute": 2
      },
      "engine": "bing",
      "domain_info": {
        "tld": "org",
        "sld": "wikipedia",
        "category": ""
      },
      "classification": {
        "content_type": "article",
        "source_hint": "encyclopedia"
      }
    },
    ...
  ],
  "serp_features": [],
  "pagination": {
    "page": 1,
    "has_more": false,
    "next_start": 10
  },
  "clusters": [
    {
      "id": "c_f20b23a020101dce",
      "canonical_url": "https://go.dev/",
      "domain": "go.dev",
      "title": "The Go Programming Language",
      "occurrences": [
        {
          "engine": "bing",
          "rank": 1,
          "result_id": "s_5a8273f16b19ab64"
        }
      ],
      "engines_count": 1,
      "best_rank": 1,
      "score": 0.5
    },
    ...
  ]
}

SDKs & Examples

Official client packages. Each works against your self-hosted server (set baseUrl) or the hosted API (set apiKey):

Type Package Source Install
JavaScript / TypeScript SDK @openserp/sdk openserpapi/sdk-js npm install @openserp/sdk
Python SDK openserp openserpapi/sdk-python pip install openserp
MCP server (AI agents) @openserp/mcp openserpapi/mcp npx @openserp/mcp
n8n community node @openserp/n8n-nodes-openserp openserpapi/n8n Install via n8n community nodes

See examples for small JavaScript and Python use cases covering search, AI grounding, SEO, content extraction, and image search.

import { OpenSERP } from "@openserp/sdk";

// Use your self-hosted server
const client = new OpenSERP({ baseUrl: "http://localhost:7000" });
const { results } = await client.search({ engine: "google", text: "openserp", limit: 5 });

Search Endpoints

Available engine names: google, yandex, baidu, bing, duckduckgo, ecosia.

Dedicated engine endpoints:

curl "http://127.0.0.1:7000/google/search?text=golang&limit=10"

Image search:

curl "http://127.0.0.1:7000/bing/image?text=golang+logo&limit=10"

Megasearch:

curl "http://127.0.0.1:7000/mega/search?text=golang&limit=10"

/mega/search returns the same envelope as engine endpoints plus clusters: results are deduplicated by normalized URL, and clusters keep the per-engine occurrences and ranks.

Mode Best for Behavior
balanced Most multi-engine SERP workflows Queries engines in parallel and merges results
fast Lowest latency Uses the fastest available engine
any Fallback-style availability checking Tries engines sequentially until one responds
More megasearch examples
# Fast mode
curl "http://127.0.0.1:7000/mega/search?text=golang&mode=fast&engines=google,bing,yandex"

# Any mode
curl "http://127.0.0.1:7000/mega/search?text=golang&mode=any&engines=google,yandex,bing"

# Balanced mode with aggregation controls
curl "http://127.0.0.1:7000/mega/search?text=golang&mode=balanced&dedupe=true&merge=true"

# Advanced filtering
curl "http://127.0.0.1:7000/mega/search?text=golang&engines=google,bing&limit=20&date=20250101..20251231&lang=EN&region=US"

# Image megasearch
curl "http://127.0.0.1:7000/mega/image?text=golang+logo&limit=20"

List engines:

curl "http://127.0.0.1:7000/mega/engines"

URL extraction:

## E

readme truncated — read the full docs on github

Frequently asked questions

Is OpenSERP free to use?

OpenSERP is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does OpenSERP do?

Self-hosted SERP API for Google, Bing, Yandex, and more

What is OpenSERP written in?

OpenSERP is primarily written in Go. Its source is publicly available at https://github.com/karust/openserp, and it has 1,395 GitHub stars.