← ClaudeAtlas

web-search-apilisted

Use when an agent needs live web results — pick a search provider (Tavily, Exa, Firecrawl, Brave, Serper, Google CSE, SearXNG), authenticate, call it correctly, and stay inside free-tier quotas.
Drvivek34/Skill-Bazaar · ★ 0 · API & Backend · score 56
Install: claude install-skill Drvivek34/Skill-Bazaar
# Web Search API Integration Pick the right provider, wire auth the way each API actually expects, and don't burn quota. ## Provider selection | Situation | Use | |---|---| | Default LLM-friendly search | Tavily | | Conceptual / semantic queries | Exa | | Need page content (not snippets) | Firecrawl | | Freshness-critical lookups | Brave Search API | | Exact Google SERP / answer boxes | Serper.dev or Google CSE | | Unlimited dev/testing | Self-hosted SearXNG | Free tiers (verified 2026-08-24): Tavily 1,000 credits/mo · Exa $20 signup + $10/mo · Firecrawl 1,000 credits/mo · Brave $5/mo credits (card required since Aug 2025) · Serper 2,500 one-time · Google CSE 100 queries/day · SearXNG unlimited self-hosted. ## Auth shapes (the part everyone gets wrong) | Provider | Auth location | Env var convention | |---|---|---| | Tavily | `api_key` **in JSON body** | `TAVILY_API_KEY` | | Exa | `x-api-key` header | `EXA_API_KEY` | | Firecrawl | `Authorization: Bearer` header | `FIRECRAWL_API_KEY` | | Brave | `X-Subscription-Token` header | `BRAVE_SEARCH_API_KEY` (never `BRAVE_API_KEY`) | | Serper | `X-API-KEY` header | `SERPER_API_KEY` | | Google CSE | `key` + `cx` query params | `GCS_API_KEY` + `GCS_CX` | | SearXNG | none (JSON format must be enabled server-side) | n/a | ## Reference implementations ```python import os, requests def tavily_search(q, n=5): r = requests.post("https://api.tavily.com/search", json={ "api_key": os.environ["TAVILY_API_KEY"], "query": q,