Skip to content

Search

Search

Search the web with attributed results and automatic fallback across sources.

search returns ranked results with their URL, title and snippet. Every result says which source found it.

  • Free by default: your own SearXNG, then DuckDuckGo and Bing.
  • Paid sources Exa, Brave, Tavily and Parallel join when their keys are set and you allow paid tools.
  • Name a source and Frankensurf uses only that one, never a substitute.
results = await web.search("playwright python tutorial", limit=10)
for hit in results["results"]:
print(hit["title"], hit["url"])
Response (trimmed)
{
"query": "playwright python tutorial",
"source": "searxng",
"coverage": "partial",
"results": [
{
"url": "https://www.browserstack.com/guide/playwright-python-tutorial",
"title": "The ultimate Playwright Python tutorial | BrowserStack",
"snippet": "Learn end-to-end web testing with Playwright Python…",
"engines": ["duckduckgo"],
"verification": "indexed_discovery"
},
{
"url": "https://playwright.dev/python/docs/library",
"title": "Getting started - Library | Playwright Python",
"snippet": "These commands download the Playwright package and install browser binaries…",
"engines": ["duckduckgo"],
"verification": "indexed_discovery"
}
],
"upstream_failures": [["brave", "too many requests"], ["google cse", "too many requests"]]
}

coverage: "partial" and upstream_failures show that some of SearXNG’s own engines were rate-limited. Failures stay visible instead of looking like “no results”.

Option Default Description
source automatic One source only: searxng, duckduckgo_html, bing_rss, exa, brave, tavily, parallel.
limit 10 Number of results.
search_source_prefer none Try these sources first.
search_source_allow all Only these sources may run.
search_source_timeout_seconds 8 Time per source.
allow_paid_fallbacks false Let the paid sources join.