SearXNG sends every search to the search engines from the server it runs on. On a rented server, that address decides what comes back. We tested it on 19 September 2026. DuckDuckGo and Brave, the two web engines a fresh install uses, refused our server in 8 tries out of 8. Google and Bing answered every time, but both are switched off by default. A proxy goes in settings.yml, for all engines or for one. We read every setting on this page in SearXNG's code at commit e831fc2a1cad of 19 September 2026, because the project publishes no releases.
What does a server get from SearXNG's engines?
We rebuilt the requests that SearXNG's own engines send and ran them from our server, which sits in a hosting network. Each engine got four requests over a few minutes.
| Engine | On in a fresh install | What our server IP got | What SearXNG does next |
|---|---|---|---|
| DuckDuckGo | yes | 2 failed connections, then 2 CAPTCHA forms | after a CAPTCHA, no results for that search and no pause |
| Brave | yes | HTTP 429 with a CAPTCHA page, 4 times | pauses Brave for 180 seconds |
| no | results, 4 times | none needed | |
| Bing | no | results, 4 times | none needed |
Brave's page said so plainly: "Your request has been flagged as being suspicious and Brave Search decided to schedule a captcha for you." SearXNG's maintainers report the same from their own servers: "From time to time ddg blocks the server IP by a CAPTCHA challenge". Another time, they wrote, "there is no response and the request runs into the timeout". That is what our failed connections looked like.
One comparison with a residential IP exists, from our OpenClaw test. DuckDuckGo's HTML search failed our server 3 times in 5 and answered a residential line 2 times in 2.
Our requests used plain curl. Since 4 September 2026, SearXNG's own client presents Chrome's TLS fingerprint. The pull request for that change says "DDG now works again". Some engines may answer that client differently, so read our result as the standing of the IP.
How long does SearXNG bench a blocked engine?
After a block, SearXNG stops asking that engine for a set time. The defaults live under search: suspended_times in settings.yml:
A Cloudflare CAPTCHA takes an engine out for 15 days. DuckDuckGo is the exception in the other direction: its code sets the pause to zero, noting that "ddg does not block the IP". It simply gives no results until it answers again. You can shorten any of these times in your own settings.yml.
Where does the proxy go?
For all engines
Under outgoing in /etc/searxng/settings.yml, the file the Docker image reads:
use_default_settings: true
outgoing:
proxies:
all://:
- http://USERNAME:PASSWORD@GATEWAY_HOST:GATEWAY_PORT
With several URLs in the list, SearXNG uses them in turn. It accepts HTTP, HTTPS, SOCKS4, SOCKS5 and SOCKS5h proxies. With socks5h://, the proxy resolves host names, so no name lookup leaves from your server.
For one engine
This is the better fit for most servers. Give only the engines that refuse your server a proxy:
use_default_settings: true
engines:
- name: duckduckgo
proxies:
all://:
- http://USERNAME:PASSWORD@GATEWAY_HOST:GATEWAY_PORT
- name: brave
proxies:
all://:
- http://USERNAME:PASSWORD@GATEWAY_HOST:GATEWAY_PORT
- name: google
disabled: false
- name: bing
disabled: false
With use_default_settings: true, SearXNG merges this list into its defaults by engine name. Every other setting of each engine stays as shipped. An engine's own proxies block replaces the one under outgoing. The last four lines switch on Google and Bing, which answered our server without a proxy, so their searches stay off the proxy line.
Give the proxy time
Each engine gets 3 seconds by default, set by request_timeout under outgoing. A proxy adds time to every request, so raise it:
outgoing:
request_timeout: 6.0
Do not count on extra_proxy_timeout. Its description speaks of "the time taken by the proxy", but the code adds it only for engines that go through Tor to an onion address.
Which proxy type fits SearXNG?
The engines judged our server by its address, and a datacenter proxy leaves from a hosting network too. A residential line suits the engines that refuse your server. Each search is one request per engine, so a rotating line can leave from a new IP every time. That spreads your searches over many addresses instead of one.
HProxy residential gateways fit this. Allow your server's IP on a Residential Premium plan, up to 150 per plan, and the proxy line needs no password in settings.yml. An allowed IP takes no country or city targeting and rotates on the rotating ports. When an engine should see a certain country, use a generated line with the targeting in its username instead. Set the line on DuckDuckGo and Brave only, and Google and Bing traffic stays off the per-gigabyte meter. The residential proxies page lists the plans, and the plan API generates lines and manages allowed IPs from code.
What breaks when the proxy is on?
- Engines time out after you add the proxy. The 3-second default is too short for a proxy line. Raise
request_timeout, notextra_proxy_timeout. - Brave shows "Too many requests". Brave answered 429 and SearXNG paused it for 180 seconds. A proxy on Brave changes the address it judges.
- DuckDuckGo shows CAPTCHA. No pause follows, and each new search tries again. Give DuckDuckGo a proxy.
- Google results are missing. Google is off by default. Add it to your engines list with
disabled: false. - An engine is gone for days. A Cloudflare CAPTCHA pauses it for 15 days by default. Shorten
cf_SearxEngineCaptchaundersearch: suspended_timesif you would rather retry sooner. - 407 Proxy Authentication Required. The proxy refused the login. On our gateways this means a wrong password or a line from another plan.
- A guide written before September 2026. SearXNG swapped its HTTP client for curl_cffi on 4 September 2026. Advice about the old client may no longer apply.
What this page does not cover
We read SearXNG's code at commit e831fc2a1cad and did not run SearXNG. The engine test rebuilt SearXNG's requests with plain curl, four per engine from one server IP, over a few minutes. SearXNG's own client presents a Chrome TLS fingerprint, which some engines may answer differently. We have no residential run of these engine requests, only the DuckDuckGo comparison from our OpenClaw test. SearXNG changes daily and has no releases, so we will read these settings again by 19 October 2026.
Where to go from here
SearXNG often runs as the search backend of an agent. Proxies for Hermes Agent, proxies for OpenClaw and proxies for self-hosted Firecrawl cover three of them. Our 429 guide explains rate limits in general, and HTTP vs SOCKS5 explains the proxy kinds SearXNG accepts.
Sources
- Settings: outgoing, engines, use_default_settings; Answer CAPTCHA from server's IP. SearXNG documentation, commit e831fc2a1cad, 19 September 2026.
- searx/settings.yml, settings_defaults.py, network/network.py, network/raise_for_httperror.py, exceptions.py, engines/init.py and the Google, DuckDuckGo, Brave and Bing engines. SearXNG source code, commit e831fc2a1cad, read on 19 September 2026.
- Pull request #6620 and issues #6596, #4824 and #4435. searxng/searxng on GitHub, 2025 to 2026.
- Plans, IP whitelist and sticky sessions; errors; the proxy API. HProxy documentation, hproxy.com/docs, 19 September 2026.
- Our own tests of 19 September 2026: the requests of SearXNG's Google, Bing, DuckDuckGo and Brave engines, rebuilt with curl, four each from our server; and DuckDuckGo's HTML search from our server and a residential line of our own house plan. Raw output is kept in the page's research folder.


