Install
openclaw skills install free-search-aggregatorQuota-aware multi-provider web search for OpenClaw. Supports 12 search providers with automatic failover, task-level deep search (@dual/@deep), real quota checks, and managed result storage under memory/.
openclaw skills install free-search-aggregatorReliable, provider-diverse web search for OpenClaw with high uptime + low operator overhead.
doctor and setup commands for zero-friction onboarding| Provider | Key Required | Free Quota | Index Source | Notes |
|---|---|---|---|---|
brave | BRAVE_API_KEY | 2000/day | Brave independent | High quality, privacy-friendly |
exa | EXA_API_KEY | ~33/day (1k/mo) | Neural + web | Semantic search, unique finds |
tavily | TAVILY_API_KEY | 1000/day | Web (AI-optimized) | Designed for AI agents |
duckduckgo | None | ~500/day | Bing + own | No key, privacy-focused |
bing_html | None | ~300/day | Microsoft Bing RSS | No key, stable XML feed |
mojeek | None (or MOJEEK_API_KEY) | 200/day | Mojeek independent | Non-Google/Bing index |
serper | SERPER_API_KEY | 2500/day | High quota free tier | |
searchapi | SEARCHAPI_API_KEY | 100/mo | Google / Bing | Multi-engine |
google_cse | GOOGLE_API_KEY + GOOGLE_CX | 100/day | Official Google API | |
baidu | BAIDU_API_KEY | 200/day | Baidu | Best for Chinese content |
wikipedia | None | 1000/day | Wikipedia | Factual/encyclopedic queries |
searxng | None | unlimited (self-hosted) | Meta (all engines) | Requires own instance |
Total daily quota (all keys configured): 8400+ requests/day
BRAVE_API_KEYEXA_API_KEYTAVILY_API_KEYSERPER_API_KEYSEARCHAPI_API_KEYGOOGLE_API_KEY + GOOGLE_CXBAIDU_API_KEYMOJEEK_API_KEY (optional — without it uses HTML scraping)Default provider order:
brave → exa → tavily → duckduckgo → bing_html → mojeek → serper → searchapi → google_cse → baidu → wikipedia
First successful non-empty result returns immediately.
workers=1@dual ... → workers=2@deep ... → workers=3 + deeper query coveragepython -m free_search healthpython -m free_search discovermemory/search-cache/YYYY-MM-DD/*.jsonmemory/search-index/search-index.jsonlmemory/search-reports/YYYY-MM-DD/*.md# Normal search
scripts/search "latest AI agent frameworks 2026" --max-results 5
# Task search (multi-query, parallel)
scripts/search task "@dual Compare Claude vs GPT-4 for code generation" --max-results 5
# Deep research mode
scripts/search task "@deep autonomous vehicle safety 2026" --max-results 8 --max-queries 10
# Quota status
scripts/status
# Real quota from provider APIs
scripts/remaining --real
# Cleanup cache
python3 -m free_search gc --cache-days 14
# Provider health dashboard
python3 -m free_search health
# Discover new search sources
python3 -m free_search discover
# System diagnostics
python3 -m free_search doctor
# Setup status & recommendations
python3 -m free_search setup
bing_html) — No key neededUses Bing's built-in RSS endpoint (format=rss) — bypasses bot detection. Works out of the box.
Out-of-the-box HTML scraping. For higher quotas/stability:
MOJEEK_API_KEY → automatically switches to JSON API modeMultilingual support — change lang in providers.yaml:
wikipedia:
lang: it # en | zh | it | de | fr | ja ...
EXA_API_KEYGOOGLE_API_KEY and GOOGLE_CXBAIDU_API_KEYPublic instances rate-limit server-to-server requests. Use your own:
docker run -d -p 8080:8080 searxng/searxng
Then in providers.yaml:
searxng:
endpoint: http://localhost:8080
enabled: true
# 1) Confirm provider load
scripts/status --compact
# 2) Smoke test (uses duckduckgo/bing/mojeek out of the box)
scripts/search "openclaw" --max-results 3 --compact
# 3) Verify storage paths
ls -la /home/openclaw/.openclaw/workspace/memory/search-cache/ | tail -n 5
# 4) Check real quota (optional)
scripts/remaining --real --compact
query, provider, results[], meta.attempted, meta.quotatask, queries[], grouped_results[], merged_results[], metadate, providers[], totals; with --real: real_quota.providers[]workers=1 — conservative for cost control@dual / @deep only for research tasksSearXNG and YaCy are enabled: false by default (self-hosted only)MOJEEK_API_KEY is optional — provider gracefully falls back to HTML scrapingmemory/provider-health/health.jsonlmemory/provider-discovery/discovery.jsonlpython -m free_search doctor after setup to verify everything workspython -m free_search discover periodically to find new search sources