Skip to main content

Web tools

OpenClaw ships two lightweight web tools:
  • web_search — Search the web using Brave Search API, Gemini with Google Search grounding, Grok, Kimi, or Perplexity Search API.
  • web_fetch — HTTP fetch + readable extraction (HTML → markdown/text).
These are not browser automation. For JS-heavy sites or logins, use the Browser tool.

How it works

  • web_search calls your configured provider and returns results.
  • Results are cached by query for 15 minutes (configurable).
  • web_fetch does a plain HTTP GET and extracts readable content (HTML → markdown/text). It does not execute JavaScript.
  • web_fetch is enabled by default (unless explicitly disabled).
See Brave Search setup and Perplexity Search setup for provider-specific details.

Choosing a search provider

Auto-detection

The table above is alphabetical. If no provider is explicitly set, runtime auto-detection checks providers in this order:
  1. BraveBRAVE_API_KEY env var or tools.web.search.apiKey config
  2. GeminiGEMINI_API_KEY env var or tools.web.search.gemini.apiKey config
  3. GrokXAI_API_KEY env var or tools.web.search.grok.apiKey config
  4. KimiKIMI_API_KEY / MOONSHOT_API_KEY env var or tools.web.search.kimi.apiKey config
  5. PerplexityPERPLEXITY_API_KEY, OPENROUTER_API_KEY, or tools.web.search.perplexity.apiKey config
If no keys are found, it falls back to Brave (you’ll get a missing-key error prompting you to configure one). Use openclaw configure --section web to set up your API key and choose a provider.
  1. Create a Brave Search API account at brave.com/search/api
  2. In the dashboard, choose the Search plan and generate an API key.
  3. Run openclaw configure --section web to store the key in config, or set BRAVE_API_KEY in your environment.
Each Brave plan includes **5/monthinfreecredit(renewing).TheSearchplancosts5/month in free credit** (renewing). The Search plan costs 5 per 1,000 requests, so the credit covers 1,000 queries/month. Set your usage limit in the Brave dashboard to avoid unexpected charges. See the Brave API portal for current plans and pricing.
  1. Create a Perplexity account at perplexity.ai/settings/api
  2. Generate an API key in the dashboard
  3. Run openclaw configure --section web to store the key in config, or set PERPLEXITY_API_KEY in your environment.
For legacy Sonar/OpenRouter compatibility, set OPENROUTER_API_KEY instead, or configure tools.web.search.perplexity.apiKey with an sk-or-... key. Setting tools.web.search.perplexity.baseUrl or model also opts Perplexity back into the chat-completions compatibility path. See Perplexity Search API Docs for more details.

Where to store the key

Via config: run openclaw configure --section web. It stores the key under tools.web.search.apiKey or tools.web.search.perplexity.apiKey, depending on provider. Via environment: set PERPLEXITY_API_KEY, OPENROUTER_API_KEY, or BRAVE_API_KEY in the Gateway process environment. For a gateway install, put it in ~/.openclaw/.env (or your service environment). See Env vars.

Config examples

Brave Search:
Brave LLM Context mode:
llm-context returns extracted page chunks for grounding instead of standard Brave snippets. In this mode, country and language / search_lang still work, but ui_lang, freshness, date_after, and date_before are rejected. Perplexity Search:
Perplexity via OpenRouter / Sonar compatibility:

Using Gemini (Google Search grounding)

Gemini models support built-in Google Search grounding, which returns AI-synthesized answers backed by live Google Search results with citations.

Getting a Gemini API key

  1. Go to Google AI Studio
  2. Create an API key
  3. Set GEMINI_API_KEY in the Gateway environment, or configure tools.web.search.gemini.apiKey
Environment alternative: set GEMINI_API_KEY in the Gateway environment. For a gateway install, put it in ~/.openclaw/.env.

Notes

  • Citation URLs from Gemini grounding are automatically resolved from Google’s redirect URLs to direct URLs.
  • Redirect resolution uses the SSRF guard path (HEAD + redirect checks + http/https validation) before returning the final citation URL.
  • Redirect resolution uses strict SSRF defaults, so redirects to private/internal targets are blocked.
  • The default model (gemini-2.5-flash) is fast and cost-effective. Any Gemini model that supports grounding can be used.
Search the web using your configured provider.

Requirements

  • tools.web.search.enabled must not be false (default: enabled)
  • API key for your chosen provider:
    • Brave: BRAVE_API_KEY or tools.web.search.apiKey
    • Gemini: GEMINI_API_KEY or tools.web.search.gemini.apiKey
    • Grok: XAI_API_KEY or tools.web.search.grok.apiKey
    • Kimi: KIMI_API_KEY, MOONSHOT_API_KEY, or tools.web.search.kimi.apiKey
    • Perplexity: PERPLEXITY_API_KEY, OPENROUTER_API_KEY, or tools.web.search.perplexity.apiKey

Config

Tool parameters

All parameters work for Brave and for native Perplexity Search API unless noted. Perplexity’s OpenRouter / Sonar compatibility path supports only query and freshness. If you set tools.web.search.perplexity.baseUrl / model, use OPENROUTER_API_KEY, or configure an sk-or-... key, Search API-only filters return explicit errors. Examples:
When Brave llm-context mode is enabled, ui_lang, freshness, date_after, and date_before are not supported. Use Brave web mode for those filters.

web_fetch

Fetch a URL and extract readable content.

web_fetch requirements

  • tools.web.fetch.enabled must not be false (default: enabled)
  • Optional Firecrawl fallback: set tools.web.fetch.firecrawl.apiKey or FIRECRAWL_API_KEY.

web_fetch config

web_fetch tool parameters

  • url (required, http/https only)
  • extractMode (markdown | text)
  • maxChars (truncate long pages)
Notes:
  • web_fetch uses Readability (main-content extraction) first, then Firecrawl (if configured). If both fail, the tool returns an error.
  • Firecrawl requests use bot-circumvention mode and cache results by default.
  • web_fetch sends a Chrome-like User-Agent and Accept-Language by default; override userAgent if needed.
  • web_fetch blocks private/internal hostnames and re-checks redirects (limit with maxRedirects).
  • maxChars is clamped to tools.web.fetch.maxCharsCap.
  • web_fetch caps the downloaded response body size to tools.web.fetch.maxResponseBytes before parsing; oversized responses are truncated and include a warning.
  • web_fetch is best-effort extraction; some sites will need the browser tool.
  • See Firecrawl for key setup and service details.
  • Responses are cached (default 15 minutes) to reduce repeated fetches.
  • If you use tool profiles/allowlists, add web_search/web_fetch or group:web.
  • If the API key is missing, web_search returns a short setup hint with a docs link.