openwebuisearchreliability

OpenWebUI Search Reliability Fix 2026

OpenWebUI search fails silently when SearXNG drops connections. Fix: swap to API-based search backend with structured JSON and retry logic.

8 min

OpenWebUI web search breaks in v0.95+ because SearXNG, the default backend, gets blocked by upstream search engines under sustained use. The fix is either correcting the SearXNG URL format, switching to a hosted search API like Tavily or Brave, or configuring a structured search API as a native tool for more reliable results.

Why SearXNG breaks

SearXNG works by proxying queries to Google, Bing, and other engines. For a single user doing a few searches a day, it is fine. Under any real load, Google blocks the IP. The result: searches that worked yesterday return nothing today. The OpenWebUI error message is usually "no source found" which actually means the upstream engine refused the request.

Quick fix: correct the URL format

If SearXNG stopped working after an update, check your query URL first. The correct format is the bare host with no path suffix:

Text
# Correct (works on 0.95+)
http://searxng:8080/

# Wrong (broke in recent versions)
http://searxng:8080/search?q=<query>
http://192.168.1.221:8080?search

Alternative backends compared

When SearXNG reliability becomes a blocker, these are the hosted alternatives that work with OpenWebUI as of May 2026:

  • Tavily: 1,000 free credits/month, $0.008/credit after. Returns summarized text, easy to configure. Best for general Q&A grounding.
  • Brave Search API: $5 free monthly credits (~1,000 queries). Returns raw search results. Good balance of cost and data quality.
  • Scavio: 250 free credits/month, $0.005/query on-demand. Returns structured JSON covering Google, Reddit, YouTube, Amazon. Best for multi-platform queries.
  • SerpAPI: 250 free/month, then $25/month for 1,000. Mature but expensive per query.

Configure a search API as native tool

OpenWebUI's native tool calling mode produces better results than the default web search integration. Instead of relying on the built-in search, define a custom function tool that calls a search API directly:

Python
import os, requests

def web_search(query: str) -> str:
    """Search the web and return results as structured text."""
    resp = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={
            "x-api-key": os.environ.get("SCAVIO_API_KEY", ""),
            "Content-Type": "application/json",
        },
        json={"query": query, "country_code": "us"},
    )
    results = resp.json().get("organic_results", [])[:5]
    lines = []
    for r in results:
        lines.append(f"Title: {r.get('title', '')}")
        lines.append(f"URL: {r.get('link', '')}")
        lines.append(f"Snippet: {r.get('snippet', '')}")
        lines.append("")
    return "\n".join(lines) if lines else "No results found."

Browserless as a fallback

For models that do not support native tool calling, install browserless as a separate Docker container and point Playwright to it in OpenWebUI settings. This fixes the "no source found" error caused by the default web scraper being blocked, without changing the search backend.

Cost comparison at typical usage

A single user doing 10-20 searches per day uses 300-600 queries per month. At that volume: SearXNG is free but unreliable, Tavily is free (1,000/month covers it), Brave costs roughly $1.50-3.00/month, and Scavio costs $1.50-3.00/month. The reliability improvement over self-hosted SearXNG is worth the few dollars.