SearXNG: Too Fragile for Production?
SearXNG has 65% success rate, 2.8s response times, and 8 hrs/mo maintenance. Free but costs $620/mo when you count developer time.
SearXNG is an open-source meta-search engine that aggregates results from Google, Bing, DuckDuckGo, and dozens of other sources. It is free, self-hosted, and privacy-respecting. It is also too fragile for production workloads. Here is why.
What SearXNG does well
- Free and open source: no per-query costs
- Multi-engine aggregation: combines results from 70+ sources
- Privacy: no tracking, no user profiling
- Self-hosted: full control over the instance
- Customizable: choose which engines to query
Why it breaks in production
SearXNG scrapes search engine result pages. When those pages change their HTML structure, SearXNG parsers break. This happens frequently:
- Google updates its SERP layout every 2-4 weeks
- Bing changes its response format without notice
- DuckDuckGo rate limits SearXNG instances aggressively
- IP bans accumulate on busy instances (Google blocks after ~100 queries/hour)
- Engine outages cascade: if Google parser breaks, results quality drops 60%
Reliability data from production deployments
# Real reliability metrics from a SearXNG production instance
# (data from r/selfhosted, May 2026)
monthly_stats = {
"total_queries": 15000,
"successful_queries": 9750, # 65% success rate
"google_engine_uptime": 0.70, # 30% of time blocked or broken
"bing_engine_uptime": 0.85,
"ddg_engine_uptime": 0.60, # aggressive rate limiting
"avg_response_time_ms": 2800, # slow due to multi-engine fan-out
"maintenance_hours_month": 8, # fixing broken parsers, rotating IPs
}
success_rate = monthly_stats["successful_queries"] / monthly_stats["total_queries"]
print(f"Success rate: {success_rate:.0%}")
print(f"Maintenance: {monthly_stats['maintenance_hours_month']} hrs/mo")
# 65% success rate, 8 hours/month maintenanceThe hidden costs of "free"
# Total cost of operating SearXNG
server_cost = 20 # VPS with enough RAM for SearXNG
maintenance_hours = 8
dev_rate = 75 # $/hour
maintenance_cost = maintenance_hours * dev_rate
total_monthly = server_cost + maintenance_cost
queries_served = 9750 # successful only
cost_per_successful_query = total_monthly / queries_served
print(f"Monthly cost: ${total_monthly}")
print(f"Cost per successful query: ${cost_per_successful_query:.4f}")
# $620/mo total, $0.064 per successful query
# Compare: Scavio at $0.005/query, 100% success rate
api_cost_for_same = 9750 * 0.005
print(f"API cost for same volume: ${api_cost_for_same:.2f}")
# $48.75/mo, 100% successWhen SearXNG makes sense
- Personal use: searching from your own browser, low volume
- Privacy-critical environments: air-gapped or compliance-restricted
- Learning: understanding how meta-search works
- Low-volume internal tools: under 100 queries/day
When SearXNG does not make sense
- Production AI agents: 65% success rate is unacceptable
- Customer-facing products: 2.8s response time is too slow
- High-volume workloads: IP bans accumulate rapidly over 100 queries/hour
- Teams without DevOps capacity: 8 hours/month of maintenance is significant
Migration path from SearXNG to API
import requests, os
# SearXNG query (unreliable)
def searxng_search(query, instance="http://localhost:8888"):
try:
resp = requests.get(
f"{instance}/search",
params={"q": query, "format": "json"},
timeout=10,
)
return resp.json().get("results", [])
except Exception:
return [] # Silent failure
# Replacement: structured API (reliable)
def api_search(query):
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": os.environ["SCAVIO_API_KEY"]},
json={"query": query, "num_results": 10},
)
return resp.json().get("organic_results", [])
# Drop-in replacement with same output shape
def search(query):
results = api_search(query)
return [{"title": r["title"], "url": r["link"],
"content": r.get("snippet", "")} for r in results]Bottom line
SearXNG is a great project for personal privacy-focused search. It is not production infrastructure. The 65% success rate, 2.8s response times, and 8 hours/month maintenance make it more expensive than a $50/month API subscription when you factor in developer time and reliability costs.