Exa Search costs $7 per 1,000 requests ($0.007 each), Deep Search runs $12 to $15 per 1,000, and the free tier gives you 20,000 requests a month. So when someone on r/AI_Agents posts "Exa Web Search pricings are killing our margins, what am I doing wrong?", the honest answer is usually two things: you're sending more queries than you need, and even after you fix that, there are cheaper backends for high-volume lookup.
Start with the volume, not the vendor. The sharpest comment in that thread nailed it: pipelines at this scale are doing way more queries than they need because nobody went back to audit what's actually necessary after the initial build. That's the real bill. A first-pass agent build tends to search on every turn, re-search the same entity three times in one session, and pull a top-20 result set when it reads the top 3. None of that is Exa's fault. It's accumulated waste that nobody pruned.
Audit query volume before you switch anything
Four cuts get most teams 40 to 70 percent off without changing providers:
- Cache by query string. Hash the normalized query and store the result for a few hours. Agents repeat themselves constantly across a session and across users. A cache hit costs you nothing.
- Dedupe inside a run. If three tool calls in one task all search "Acme Corp pricing," you only needed one. Collapse identical and near-identical queries before they leave your process.
- Cut top-k. If you ask for 20 results and feed 3 into the model, request 3. Many APIs bill or rank by result count.
- Stop re-searching the same entity. Once you've resolved "who is the CFO of Acme," keep it in working memory for the rest of the session. Re-querying the same fact is the single most common form of waste.
Do this first. If it fixes your margins, you don't need to migrate anything, and you keep Exa's behavior exactly as it is.
If you still need cheaper volume
Once the pipeline is lean and you still want a lower unit price for high-volume lookup, the $0.005-per-request tier is where to look. Linkup is $5 per 1,000 ($0.005). Brave Search API is $5 per 1,000 with roughly 1,000 free requests a month. Parallel is $5 per 1,000 with up to 16,000 free requests. Scavio is $0.005 per credit with no monthly commitment on pay-as-you-go and no minimum deposit, and it covers Google, Reddit, YouTube, Amazon, Walmart, and TikTok under one key. If your lookups are pure Google SERP, Serper sits around $1 per 1,000 (Google-only, so no Reddit or social).
Here's a Scavio Google SERP call as a drop-in for keyword lookup:
import os, requests
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}", "Content-Type": "application/json"}
r = requests.post("https://api.scavio.dev/api/v1/google", headers=H,
json={"query": "best serp api", "light_request": False})
data = r.json()
for row in data["organic_results"]:
print(row["position"], row["title"], row["link"])A full Google SERP on Scavio is 2 credits ($0.01); a light request is 1 credit ($0.005). So on raw price Scavio isn't the floor: Serper undercuts it for Google-only, and DataForSEO is cheaper per call after its $50 minimum deposit. Scavio's pitch is the multi-platform pool and true no-floor PAYG, not the lowest sticker.
The honest catch: don't drop Exa blindly
Exa's neural, semantic search genuinely finds things a keyword SERP API misses. "Find similar pages" and fuzzy discovery over meaning rather than exact terms are real strengths, and a keyword backend is not a 1:1 swap for them. So split the traffic. Keep Exa for the semantic discovery that's actually why you adopted it, and move the high-volume, deterministic lookups ("get the SERP for this exact phrase") to a cheaper backend. Most pipelines have far more of the second kind than the first, and that's where the margin hides.