Skip to content

Web Search Tools

The web search tools provide functionality to perform web searches through various search engines. This module supports multiple search engines, including Brave, Serper, SearXNG, Tavily, and Google (via BrightData/Scrapeless).

Bing Search Removed

Bing Search has been removed due to frequent bot detection issues. Please use alternative search providers.

Free Tier Summary

Here's a quick overview of free tier offerings for each search provider:

Provider Free Tier Monthly Limit Notes
Brave Search Changed ~1,000 queries $5 free credits/month (Feb 2026), credit card required
Serper Yes 2,500 queries Google search results
Bright Data Yes 5,000 queries No verification required
Tavily Yes 1,000 queries AI-optimized search
Scrapeless No - Paid plans only
SearXNG Free Unlimited Self-hosted, open source

tip "Maximizing Free Usage"

  • Multi-API Key Rotation: All providers support multiple API keys for load balancing
  • SearXNG for High Volume: Consider self-hosting SearXNG for unlimited free searches

Free Tier Policy

All free tier information may be subject to provider policy changes. Information is accurate at the time of writing.

Module Overview

The web search tools mainly include the following:

  1. Unified Web Search (WebSearch) - Single entry point for all search providers with auto-selection, fallback, and dynamic engine discovery. See Unified Web Search
  2. Individual Search Providers (websearch) - Direct access to specific search engines (Brave, Tavily, SearXNG, etc.)

Search Engine Support

Currently supported search engines include:

Basic Usage

Unified Entry Point (Recommended)

from toolregistry_hub.websearch import WebSearch

# Auto-select the best available engine
ws = WebSearch()
results = ws.search("Python programming", max_results=5)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Content: {result.content}")
    print("-" * 50)

# Specify a particular engine
results = ws.search("machine learning", engine="brave", max_results=5)

# List available engines
engines = ws.list_engines()

Direct Engine Usage

from toolregistry_hub.websearch import BraveSearch, SearXNGSearch, TavilySearch, BrightDataSearch, ScrapelessSearch, SerperSearch

# Using Brave search (Recommended)
brave_search = BraveSearch()
results = brave_search.search("Python programming", max_results=5)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Content: {result.content}")
    print(f"Score: {result.score}")
    print("-" * 50)

# Using SearXNG search
searxng_search = SearXNGSearch()
results = searxng_search.search("machine learning tutorial", number_results=3)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Excerpt: {result.excerpt}")
    print("-" * 50)

# Using Brave search
brave_search = BraveSearch()
results = brave_search.search("artificial intelligence", number_results=5)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Content: {result.content}")
    print(f"Score: {result.score}")
    print("-" * 50)

# Using Tavily search
tavily_search = TavilySearch()
results = tavily_search.search("quantum computing", number_results=5)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Content: {result.content}")
    print(f"Score: {result.score}")
    print("-" * 50)

# Using Bright Data Google search
brightdata_search = BrightDataSearch()
results = brightdata_search.search("web scraping", max_results=5)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Content: {result.content}")
    print(f"Score: {result.score}")
    print("-" * 50)

# Using Scrapeless Google search
scrapeless_search = ScrapelessSearch()
results = scrapeless_search.search("web scraping", max_results=5)
for result in results:
    print(f"Title: {result.title}")
    print(f"URL: {result.url}")
    print(f"Content: {result.content}")
    print(f"Score: {result.score}")
    print("-" * 50)

Detailed Documentation