searxng-search
Free meta-search via SearXNG — aggregates results from 70+ search engines. Self-hosted or use a public instance. No API key needed. Falls back automatically when the web search toolset is unavailable.
Free meta-search via SearXNG — aggregates results from 70+ search engines. Self-hosted or use a public instance. No API key needed. Falls back automatically when the web search toolset is unavailable.
Real data. Real impact.
Emerging
Developers
Per week
Excellent
Skills give you superpowers. Install in 30 seconds.
Free meta-search using SearXNG — a privacy-respecting, self-hosted search aggregator that queries 70+ search engines simultaneously.
No API key required when using a public instance. Can also be self-hosted for full control. Automatically appears as a fallback when the main web search toolset (
FIRECRAWL_API_KEY) is not configured.
SearXNG requires a
SEARXNG_URL environment variable pointing to your SearXNG instance:
# Public instances (no setup required) SEARXNG_URL=https://searxng.example.com # Self-hosted SearXNG SEARXNG_URL=http://localhost:8888
If no instance is configured, this skill is unavailable and the agent falls back to other search options.
Check what is actually available before choosing an approach:
# Check if SEARXNG_URL is set and the instance is reachable curl -s --max-time 5 "${SEARXNG_URL}/search?q=test&format=json" | head -c 200
Decision tree:
SEARXNG_URL is set and the instance responds, use SearXNGSEARXNG_URL is unset or unreachable, fall back to other available search toolsUse
curl via terminal to call the SearXNG JSON API. This avoids assuming any particular Python package is installed.
# Text search (JSON output) curl -s --max-time 10 \ "${SEARXNG_URL}/search?q=python+async+programming&format=json&engines=google,bing&limit=10" # With Safesearch off curl -s --max-time 10 \ "${SEARXNG_URL}/search?q=example&format=json&safesearch=0" # Specific categories (general, news, science, etc.) curl -s --max-time 10 \ "${SEARXNG_URL}/search?q=AI+news&format=json&categories=news"
| Flag | Description | Example |
|---|---|---|
| Query string (URL-encoded) | |
| Output format: , , | |
| Comma-separated engine names | |
| Max results per engine (default 10) | |
| Filter by category | |
| 0=none, 1=moderate, 2=strict | |
| Filter: , , , | |
# Extract titles and URLs from JSON curl -s --max-time 10 "${SEARXNG_URL}/search?q=fastapi&format=json&limit=5" \ | python3 -c " import json, sys data = json.load(sys.stdin) for r in data.get('results', []): print(r.get('title','')) print(r.get('url','')) print(r.get('content','')[:200]) print() "
Returns per result:
title, url, content (snippet), engine, parsed_url, img_src, thumbnail, author, published_date
requestsUse the SearXNG REST API directly from Python with the
requests library:
import os, requests, urllib.parse base_url = os.environ.get("SEARXNG_URL", "") if not base_url: raise RuntimeError("SEARXNG_URL is not set") query = "fastapi deployment guide" params = { "q": query, "format": "json", "limit": 5, "engines": "google,bing", } resp = requests.get(f"{base_url}/search", params=params, timeout=10) resp.raise_for_status() data = resp.json() for r in data.get("results", []): print(r["title"]) print(r["url"]) print(r.get("content", "")[:200]) print()
For more structured access, install the
searxng-data package:
pip install searxng-data
from searxng_data import engines # List available engines print(engines.list_engines())
Note: This package only provides engine metadata, not the search API itself.
To run your own SearXNG instance:
# Using Docker docker run -d -p 8888:8080 \ -v $(pwd)/searxng:/etc/searxng \ searxng/searxng:latest # Then set SEARXNG_URL=http://localhost:8888
Or install via pip:
pip install searxng # Edit /etc/searxng/settings.yml searxng-run
Public SearXNG instances are available at:
https://searxng.example.com (replace with any public instance)SearXNG returns titles, URLs, and snippets — not full page content. To get full page content, search first and then extract the most relevant URL with
web_extract, browser tools, or curl.
# Search for relevant pages curl -s "${SEARXNG_URL}/search?q=fastapi+deployment&format=json&limit=3" # Output: list of results with titles and URLs # Then extract the best URL with web_extract
SEARXNG_URL is set and the instance is reachable.web_extract, browser tools, or curl for full articles.| Problem | Likely Cause | What To Do |
|---|---|---|
not set | No instance configured | Use a public SearXNG instance or set up your own |
| Connection refused | Instance not running or wrong URL | Check the URL is correct and the instance is running |
| Empty results | Instance blocks the query | Try a different instance or self-host |
| Slow responses | Public instance under load | Self-host or use a less-loaded public instance |
format not supported | Old SearXNG version | Try or upgrade SearXNG |
SEARXNG_URL: Without it, the skill cannot function.urllib.parse.quote() in Python.format=json: The default format may not be machine-readable. Always request JSON explicitly.--max-time or timeout= to avoid hanging on unreachable instances.If
SEARXNG_URL is not set and the user asks about SearXNG, help them either:
Public instances are listed at: https://searxng.org/
MIT
mkdir -p ~/.hermes/skills/research/searxng-search && curl -o ~/.hermes/skills/research/searxng-search/SKILL.md https://raw.githubusercontent.com/NousResearch/hermes-agent/main/optional-skills/research/searxng-search/SKILL.md1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.