Choosing web search for an AI chat? The AI platform with Open WebUI includes web search in the chat, from €149.90 excl. VAT per month. On request we integrate SearXNG (and Docling) into the platform. View the AI platform · SearXNG hosting & operations
Open WebUI separates two jobs: the search engine finds pages, the web loader reads them. Which search engine is entered decides cost, quality and what leaves the own network. This article compares the common providers based on the source code of Open WebUI v0.12.4 (released 25 Oct 2026) and the providers' pricing and privacy pages from 29 Oct 2026. Setting up your own SearXNG instance is covered in the guide Self-hosting SearXNG and not repeated here. As of October 2026.
Table of contents
- What Open WebUI v0.12.4 supports
- Data flow: what leaves the network
- Data protection by provider
- Costs and limits with a worked calculation
- Licence and self-hosting
- Quality and configuration parameters
- Decision rule
- Status and method
What Open WebUI v0.12.4 supports
The function search_web in the router retrieval.py knows 32 values for the search engine in v0.12.4, and the documentation lists 28 provider pages (Web Search). Six routes matter for the selection, plus two entries that are still present but can no longer be obtained:
Entry (WEB_SEARCH_ENGINE) |
Type | Status on 29 Oct 2026 |
|---|---|---|
searxng |
own metasearch, URL of the service | freely available, operated by the customer |
brave, brave_llm_context |
hosted API, one key for both | available |
tavily |
hosted API | available |
serper |
hosted API with Google results | available |
kagi |
hosted API | available, billed by usage |
duckduckgo (shown as "DDGS" in the interface) |
library inside Open WebUI, no key | not available in the slim variant |
google_pse |
Google Custom Search JSON API | closed to new customers, existing customers until 1 Jan 2027 (Google) |
bing |
Bing Search API v7 | retired on 11 Aug 2025 (Microsoft) |
Further entries include exa, linkup, serpapi, searchapi, perplexity_search, jina, mojeek, yacy, firecrawl and external for an endpoint of your own. The Open WebUI documentation recommends hosted search APIs for the strongest results and considers SearXNG useful where a self-hosted, privacy-preserving metasearch is wanted, with quality depending heavily on the upstream engines, rate limits and configuration. The provider pages for Brave, Tavily, Serper and Kagi are community contributions and not supported by the Open WebUI team.
Data flow: what leaves the network
A web search has three steps, and only two of them leave the network.
- Formulate the query (local). In classic mode (legacy) the model creates search queries from the chat. The default template
DEFAULT_QUERY_GENERATION_PROMPT_TEMPLATEpasses the last six messages ({{MESSAGES:END:6}}) and prefers 1 to 3 search queries, an empty list is allowed (config.py). If the call to the generator fails or returns an empty query,chat_web_search_handleruses the last user message unchanged as the search term; if the model's answer is not valid JSON, its text is sent out as the search term (middleware.py). In native mode (default since v0.10.0) the model calls the toolsearch_webwith a search term it wrote itself (Agentic Search). - Search term to the provider (external). The Open WebUI server sends the request with its IP address and the operator's key.
- Load result pages (external). In classic mode the web loader fetches the hit pages itself when
BYPASS_WEB_SEARCH_WEB_LOADERis off; in native modesearch_webreturns only hits with an excerpt, and the model loads pages on demand with the toolfetch_url. The target site sees the IP address of the Open WebUI server, not that of the user.
What the request in step 2 contains is defined in the modules under backend/open_webui/retrieval/web/ (directory v0.12.4):
| Provider | Fields sent (source v0.12.4) | Chat history or user identity? |
|---|---|---|
| Brave | q, count; header X-Subscription-Token |
no |
| Tavily | query, max_results, search_depth; bearer key |
no |
| Serper | q; header X-API-KEY (the result count is only applied after the response) |
no |
| Kagi | query, limit; bearer key |
no |
| SearXNG | q, format, pageno, safesearch, language, time_range, categories, theme, image_proxy; user agent "Open WebUI … RAG Bot" |
no |
| Google PSE | cx, q, key, num, start; optionally a Referer |
no |
| DDGS | search term via the ddgs library, proxy from the environment |
no |
| external | query, count; headers with the user's name, ID, email address and role (or a JWT), without checking ENABLE_FORWARD_USER_INFO_HEADERS; a header X-OpenWebUI-Chat-Id is intended |
user data yes; chat ID intended, see below |
On the header X-OpenWebUI-Chat-Id: external.py reads the chat ID from request.state.chat_id. Nothing in the v0.12.4 backend sets this value, so the header is probably not sent in this version (read from the source code, not confirmed by traffic capture); the documentation lists it "when a chat id is present". The provider yandex contains the same logic and the user headers; perplexity_search and microsoft_web_iq send only the user headers.
It follows that the chat history does not leave the network as such. What leaves is the search term, and it can contain names, file numbers or product data from the chat if the model carries them into the query. To limit this, enable ENABLE_WEB_SEARCH_CONFIRMATION so users confirm every search, and release web search only to groups that need it. The model that formulates the query sees the latest messages. If it runs at an external provider, that is a separate data path unrelated to web search.
Data protection by provider
All statements come from the provider pages, retrieved on 29 Oct 2026. They replace neither the review of the data processing agreement nor legal advice.
| Provider | Processing of search terms according to the provider page |
|---|---|
| SearXNG (own instance) | With the operator; the engines see the instance's IP and the search term, see the SearXNG guide |
| Brave Search API | Provider is Brave Software Inc. in the USA. Search queries of an API account are retained for 90 days at most for billing and troubleshooting; "Zero Data Retention" is mentioned for the enterprise offer (Privacy Notice, pricing) |
| Tavily | Account, support and billing data sit in shared US systems. An EU endpoint with processing in the EU and optional "zero query retention" is in evaluation for selected customers only and not generally available (Tavily EU). The privacy policy covers website and platform. It names no fixed retention period for queries (retention "for the period necessary to provide and improve the Services"), but allows parts of the query data to be used to improve future responses unless the contract says otherwise, and queries to be shared with third-party search index providers in limited cases |
| Serper | The privacy policy describes account and website data and mentions possible transfers outside the EEA, but no retention of search queries. It states that the services should normally not lead to the processing of personal data; in exceptional cases the customer is controller and Serper processor |
| Kagi | API queries are not stored against the account; queries may be logged briefly without account link for debugging and abuse prevention and are purged automatically (load balancer and VM logs 7 days, error samples 90 days). The data processing addendum for the API is described there as being finalised (Privacy Policy) |
| DDGS | No account; the search engines receive the query with the server's IP, and by default (auto) the library picks a provider at random (DDGS page) |
For context: with hosted interfaces, the operator of the Open WebUI instance is responsible for notices to users and the legal basis. Brave states this in its Privacy Notice for API customers, referring to its terms of service. The review criteria are in the article GDPR-compliant AI: checklist and criteria.
Costs and limits with a worked calculation
Provider prices, net, in US dollars, retrieved on 29 Oct 2026:
| Provider | Price | Free allowance | Limit according to the provider |
|---|---|---|---|
| Brave Search API | $5.00 per 1,000 requests (web search and LLM context) | $5 credit per month, i.e. 1,000 requests | 50 requests per second |
| Tavily | $0.008 per credit; basic search 1 credit, advanced 2 credits; Project plan $30 for 4,000 credits | 1,000 credits per month on the free plan | "higher rate limits" on the Project plan |
| Serper | $1.00 per 1,000 queries in the pack of 50,000 credits ($50, valid 6 months) | 2,500 queries for testing | 50 queries per second in the 50,000 pack |
| Kagi | $12 per 1,000 requests, billed every 30 days or at $100 | pricing page names none | not checked |
| Google PSE | $5 per 1,000 queries, up to 10,000 per day | 100 queries per day | existing customers only |
| SearXNG, DDGS | no charge for the interface | not applicable | limiter and engine suspensions of the instance |
Sources: Brave, Tavily and API credits, Serper, Kagi, Google.
Calculation. Assumption: a web search in the chat creates on average 2 queries in classic mode (template: 1 to 3), and each query equals one API request. The monthly volumes are 5 users with 5 web searches per working day (1,000 queries), 25 users with 5 (5,000) and 25 users with 20 (20,000), each over 20 working days. Price per query times volume, without free allowance:
| Queries per month | Brave | Tavily (basic, pay as you go) | Serper (50,000 pack) | Kagi |
|---|---|---|---|---|
| 1,000 | $5 | $8 | $1 | $12 |
| 5,000 | $25 | $40 | $5 | $60 |
| 20,000 | $100 | $160 | $20 | $240 |
The Brave credit lowers each row by $5 per month. Serper's pack is bought in advance ($50 for 50,000 credits, valid 6 months); the table value applies if the pack is used up. Tavily advanced doubles the values. Running a SearXNG instance replaces the rows with server and maintenance costs, which depend on the environment and are not quantified here. For comparison with licence and model costs, see the calculation in Internal AI chatbot: costs with a worked calculation.
On Brave's limit: the Open WebUI documentation describes 1 request per second for the free tier and recommends WEB_SEARCH_CONCURRENT_REQUESTS=1, while the pricing page lists 50 requests per second for the prepaid model. On HTTP 429 Open WebUI repeats the request once after one second.
Licence and self-hosting
| Component | Licence or model | Self-hosting |
|---|---|---|
| Open WebUI | Open WebUI License: clauses 1 to 3 match the BSD-3-Clause text, clause 4 restricts changes to the branding (LICENSE v0.12.4, details in Open WebUI licence 2026) | yes |
| SearXNG | GNU AGPL version 3 (LICENSE) | yes, details in the SearXNG guide |
DDGS (library ddgs) |
MIT (LICENSE); the project describes itself as a library "for educational purposes only" | runs inside Open WebUI |
| Brave, Tavily, Serper, Kagi | hosted services under the provider's terms | no |
DDGS adds this: the library queries the search engines through their public pages, not through a paid interface, and the Open WebUI documentation points to an interface with its own key for reliability and quota.
Quality and configuration parameters
Result quality cannot be read from the source code. Only what the providers and Open WebUI describe is documented: Brave offers brave_llm_context, a second endpoint that returns pre-extracted passages and can save the page fetch. Tavily describes itself as a search API for AI applications. With SearXNG the results depend on the enabled engines. Own measurement before deciding: put 20 real questions from the department to two candidates and check the sources.
| Parameter (default in v0.12.4) | Effect |
|---|---|
WEB_SEARCH_RESULT_COUNT (3) |
number of results per query |
WEB_SEARCH_CONCURRENT_REQUESTS (0, unlimited) |
parallel queries per search; set to 1 with rate limits |
BYPASS_WEB_SEARCH_WEB_LOADER (off) |
use snippets only, do not load result pages |
TAVILY_SEARCH_DEPTH (basic) |
ultra-fast, fast, basic, advanced; advanced costs 2 credits |
BRAVE_SEARCH_CONTEXT_TOKENS (8192) |
size of the passages with brave_llm_context, 1,024 to 32,768 |
DDGS_BACKEND (auto) |
search engine behind DDGS |
ENABLE_WEB_SEARCH_CONFIRMATION (off) |
users confirm every search |
WEB_SEARCH_DOMAIN_FILTER_LIST (empty) |
allowed or blocked domains, applied after retrieval |
The domain filter acts after the provider's response. The search term has gone out regardless. Web content is untrusted and can contain instructions for the model, see Protecting against prompt injection.
Decision rule
Check from top to bottom, the first matching row decides:
| Condition | Recommendation |
|---|---|
| Search terms must not reach any additional API provider, and operation with a fallback is feasible | SearXNG as a separate service, with a second engine group or an API as fallback |
| A contractual relationship with processing in the EU is mandatory | choose a hosted provider by data processing agreement and location; Tavily EU is not generally available on 29 Oct 2026 |
| Reliable results for few users, cost by usage | Brave (the credit covers about 1,000 requests per month) or Tavily |
| Google results wanted | Serper; Google PSE is closed to new customers |
| Only a test without an account | DDGS; for reliability the Open WebUI documentation recommends an interface with its own key |
New projects with bing or google_pse |
do not plan, both routes are ended or closed |
Status and method
- Status: 29 Oct 2026. Source code and documentation of Open WebUI v0.12.4 (released 25 Oct 2026) and the linked pricing and privacy pages were retrieved on 29 Oct 2026.
- Data flow: read from the modules
brave.py,tavily.py,serper.py,kagi.py,searxng.py,google_pse.py,duckduckgo.py,external.pyandretrieval.py,middleware.py,config.py, not confirmed by capturing network traffic. - Prices: in US dollars as published, without taxes or exchange rate. The calculations assume one request per query and contain no free allowance.
- Limits: result quality was not measured. Provider prices and terms change; open the linked pages again before deciding. Not legal advice.
Tables and figures may be reused with attribution and a link to this article.
Our approach at WZ-IT
The AI platform is a dedicated Open WebUI instance and includes web search in the chat. The price starts at €149.90 excl. VAT per month (as of October 2026). On request we integrate SearXNG as the search service and Docling for document processing into the platform. Anyone who wants SearXNG operated independently of that will find the offer at SearXNG hosting & operations.
Further guides
- Self-hosting SearXNG: Docker, limiter, Open WebUI - setup, hardening and limits of your own metasearch
- Set up Open WebUI SSO: OIDC with Entra ID, Keycloak and Authentik - sign-in, roles and groups for permissions
- Internal AI chatbot: costs with a worked calculation - licence, tokens, platform and hardware compared
- Open WebUI licence 2026: branding clause for businesses - what the licence requires
- GDPR-compliant AI: checklist and criteria - data paths and legal bases
- Protecting against prompt injection - web content as an attack path
Planning web search for your own AI? We work out with you which search service fits data flow, budget and operations. AI platform · SearXNG hosting & operations











