The Problem
Agents that depend on a single search provider go down when that provider has an outage or rate limit event. There is no built-in failover in LangChain, CrewAI, or most agent frameworks. A 15-minute outage during a scheduled agent run means the entire run fails.
The Scavio Solution
A failover wrapper tries the primary search provider, falls back to a secondary, and returns cached results if both fail. The agent continues running through provider outages.
Before
Nightly agent run at 2am uses SerpAPI as the only search provider. SerpAPI has a 12-minute outage at 2:07am. Agent fails after 5 retries. Morning report is missing. On-call engineer wakes up to fix it.
After
Agent uses the failover wrapper. At 2:07am, Scavio times out. The wrapper automatically retries with Brave. Brave succeeds. Agent run completes normally. No alert, no manual intervention needed.
Who It Is For
Developers running scheduled or production agents that cannot tolerate downtime from search provider outages or rate limits.
Key Benefits
- Zero downtime through single-provider outages
- Cached results as last-resort fallback
- Exponential backoff before switching providers
- Works with any combination of search providers
Python Example
import requests
import time
PROVIDERS = [
{"name": "scavio", "call": lambda q, n: requests.post(
"https://api.scavio.dev/api/v1/search",
json={"query": q, "num_results": n},
headers={"x-api-key": "your-scavio-key"}, timeout=8
).json().get("organic_results", [])},
{"name": "brave", "call": lambda q, n: requests.get(
"https://api.search.brave.com/res/v1/web/search",
params={"q": q, "count": n},
headers={"X-Subscription-Token": "your-brave-key"}, timeout=8
).json().get("web", {}).get("results", [])}
]
_CACHE = {}
def search(query: str, n: int = 5) -> list:
for provider in PROVIDERS:
for attempt in range(2):
try:
results = provider["call"](query, n)
if results:
_CACHE[query] = results
return results
except Exception:
time.sleep(2 ** attempt)
return _CACHE.get(query, [])
results = search("best AI tools 2026")
print(f"{len(results)} results")JavaScript Example
const CACHE = new Map();
const PROVIDERS = [
{ name: 'scavio', call: async (q, n) => (await (await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', signal: AbortSignal.timeout(8000),
headers: { 'Content-Type': 'application/json', 'x-api-key': 'your-scavio-key' },
body: JSON.stringify({ query: q, num_results: n })
})).json()).organic_results ?? [] }
];
async function search(query, n = 5) {
for (const p of PROVIDERS) {
try { const r = await p.call(query, n); if (r.length) { CACHE.set(query, r); return r; } }
catch (e) { console.log(`${p.name} failed: ${e.message}`); }
}
return CACHE.get(query) ?? [];
}Platforms Used
Web search with knowledge graph, PAA, and AI overviews