selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
searcharvester logo

Self-host searcharvester

2.1.0

Self-hosted search and markdown harvester for AI agents

ReleaseOpen SourceAGPL-3.0
Updated6 months ago
LanguagePython
Setup difficultyModerate
Stars
282
Ports
8000 (adapter: /search, /extract, /research, /media), 9762 (web UI), 8011 (search-admin, used by the settings page)
Requires
SearXNG, Valkey (Redis)
Docker
ghcr.io/vakovalskii/searcharvester
Install with Docker Compose
Branches of a deep research job showing sub-agents and their findingsModels per role panel in the web UIAgent graph visualization showing lead, sub-agents, and cited pagesResearch report with clickable citations and picturesMedia gallery showing pictures and videos from a research jobSearch settings page with SearXNG engines, proxies, and adapter configuration

What is searcharvester?

Searcharvester is a self-hosted stack that gives AI agents a Tavily-compatible search API backed by SearXNG with over 100 engines, a URL-to-markdown extractor using multiple extraction engines with size presets and pagination, and a deep research agent that plans, searches, reads, and synthesizes cited markdown reports. It includes a React web UI on port 9762 to start jobs, pick models per agent role, watch agents live, and browse sources and media. The stack runs with one docker compose up, pulling the adapter image from GHCR and building the UI and search-admin locally. No API keys or quotas for search; LLM credentials (any OpenAI-compatible endpoint) are only needed for the research feature. The adapter listens on 127.0.0.1:8000, SearXNG on 8999, search-admin on 8011, and the UI on 9762. Licensed AGPL-3.0 with MIT on project code.

Should you self-host searcharvester?

searcharvester scores 47/100 on selfhost.directory (how scoring works) and ranks #123 of 209 in AI Agents. It has 282 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is crw (58/100, 1 192 stars). It scores higher overall, so compare the two before you pick. See searcharvester vs crw side by side.

Features

  • Citation tracking
  • Deep Research Agent
  • Image and video search
  • Loop guard and budgets
  • Model per agent role
  • Multiple content extractors
  • Optional Cloudflare WARP proxyOptional profile, may not work on all networks
  • Search settings UI
  • Size presets and pagination
  • SSRF protection
  • Tavily-compatible search API
  • URL to markdown extraction
  • Web UI

searcharvester README

How to install searcharvester

Install searcharvester with Docker Compose

Docker and docker compose
Environment variables
OPENAI_API_KEY, OPENAI_BASE_URL, SEARCH_ADMIN_TOKEN, ADAPTER_PORT, SEARCH_ADMIN_PORT, VITE_API_URL, VITE_ADMIN_URL, RESEARCH_TIMEOUT_SEC, HERMES_API_CALL_STALE_TIMEOUT, GUARD_STALL_S, GUARD_WRAPUP_S, MAX_CONCURRENT_JOBS, HERMES_UID, HERMES_GID, OPENROUTER_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, NEURALDEEP_API_KEY, NEURALDEEP_BASE_URL, JUDGE_LLM_MODEL, PROXY_URL, PLAYWRIGHT_URL

git clone https://github.com/vakovalskii/searcharvester.git cd searcharvester cp config.example.yaml config.yaml

Change server.secret_key (32+ chars)

cat > .env <<EOF OPENAI_API_KEY=sk-... OPENAI_BASE_URL=https://api.openai.com/v1 SEARCH_ADMIN_TOKEN=$(openssl rand -hex 24) EOF docker compose up -d open http://localhost:9762

Pulls adapter image from GHCR, builds UI and search-admin locally

How to configure searcharvester

  • ADAPTER_PORT8000Host port for the adapter (default 8000)

    Host port for the adapter (default 8000)

  • adapter.scraper.user_agentMozilla/5.0 (compatible; TavilyBot/1.0)User agent for scraper

    User agent for scraper

  • adapter.searxng_urlhttp://searxng:8080SearXNG internal URL (default http://searxng:8080)

    SearXNG internal URL (default http://searxng:8080)

  • ANTHROPIC_API_KEYAnthropic API key for LLM

    Anthropic API key for LLM

  • GEMINI_API_KEYGoogle Gemini API key for LLM

    Google Gemini API key for LLM

  • GUARD_STALL_S900Guard stall timeout in seconds (default 900)

    Guard stall timeout in seconds (default 900)

  • GUARD_WRAPUP_S600Guard wrap-up timeout in seconds (default 600)

    Guard wrap-up timeout in seconds (default 600)

  • HERMES_API_CALL_STALE_TIMEOUT600Hermes call stale timeout in seconds (default 600)

    Hermes call stale timeout in seconds (default 600)

  • HERMES_GID20GID for Hermes process (default 20)

    GID for Hermes process (default 20)

  • HERMES_UID501UID for Hermes process (default 501)

    UID for Hermes process (default 501)

  • JUDGE_LLM_MODELqwen3.6-35b-a3b-noreasonLLM model for quality gate judge (default qwen3.6-35b-a3b-noreason)

    LLM model for quality gate judge (default qwen3.6-35b-a3b-noreason)

  • MAX_CONCURRENT_JOBS16Max concurrent research jobs (default 16)

    Max concurrent research jobs (default 16)

  • NEURALDEEP_API_KEYNeuralDeep API key for paid reader

    NeuralDeep API key for paid reader

  • NEURALDEEP_BASE_URLhttps://api.neuraldeep.ruNeuralDeep base URL (default https://api.neuraldeep.ru)

    NeuralDeep base URL (default https://api.neuraldeep.ru)

  • OPENAI_API_KEYLLM API key for /research (any OpenAI-compatible endpoint)

    LLM API key for /research (any OpenAI-compatible endpoint)

  • OPENAI_BASE_URLBase URL for OpenAI-compatible LLM endpoint

    Base URL for OpenAI-compatible LLM endpoint

  • OPENROUTER_API_KEYOpenRouter API key for LLM

    OpenRouter API key for LLM

  • PLAYWRIGHT_URLPlaywright URL for browser-based extraction

    Playwright URL for browser-based extraction

  • PROXY_URLProxy URL for page reads

    Proxy URL for page reads

  • RESEARCH_TIMEOUT_SEC3600Max job runtime in seconds (default 3600)

    Max job runtime in seconds (default 3600)

  • scraper.user_agentMozilla/5.0 (compatible; TavilyBot/1.0)User agent for scraper

    User agent for scraper

  • SEARCH_ADMIN_PORT8011Host port for search-admin (default 8011)

    Host port for search-admin (default 8011)

  • SEARCH_ADMIN_TOKENToken for the search settings page (random if unset)

    Token for the search settings page (random if unset)

  • server.secret_keySearXNG secret key (32+ chars, required)

    SearXNG secret key (32+ chars, required)

  • VITE_ADMIN_URLhttp://localhost:8011Frontend admin URL (default http://localhost:8011)

    Frontend admin URL (default http://localhost:8011)

  • VITE_API_URLhttp://localhost:8000Frontend API URL (default http://localhost:8000)

    Frontend API URL (default http://localhost:8000)

More in AI Agents

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…