Instant
$15
15,000 credits · $1.00 per 1k
- Markdown, highlights and pruned context in every search credit
- Search, Contents, Reader and MCP
Search API for AI agents
ContextFetch is a web search API for AI agents at $1.00 per 1,000 searches, page Markdown included ($15 buys 15,000 credits that never expire): 86% less than Exa Auto/Fast ($7.00/1k) and 75% less than Exa Instant ($4.00/1k) at list prices. Results can carry highlights and a cross-encoder-pruned context: on average 69% fewer tokens than the full page (median 79%) in a benchmark on 29 synthetic docs; not yet measured on live pages. exa_py and tavily-python work after a base-URL change; agents get 25 free searches per day with no key.
claude mcp add contextfetch -- npx -y @contextfetch/mcpcurl https://api.contextfetch.dev/r/https://example.com| Provider | Price per 1k searches | Page Markdown included | Pruned context | Keyless MCP |
|---|---|---|---|---|
| ContextFetch | $1.00 ($0.75 on the $150 pack) | Yes, on request (contents), no extra charge | Yes: cross-encoder prunedContext + highlights | Yes: 25 searches/day per IP via npx |
| Exa | $7.00 auto/fast, $4.00 instant (up to 10 results) | Extra: $1.00 per 1,000 pages per content type | Highlights, $1.00 per 1,000 pages | Yes: hosted, rate-limited |
| Tavily | $8.00 basic, $16.00 advanced (pay-as-you-go) | Optional raw_content | Relevance-ranked content snippets | No: API key or OAuth sign-in |
| Firecrawl | $1.20 (Scale, billed yearly) to $7.60 (Hobby, billed monthly); 2 credits per 10 results | Extra: +1 credit per scraped page | Highlight format, +4 credits per page | Yes: hosted, daily limits |
| Serper | $1.00 ($50 pack) down to $0.30 at volume; credits expire after 6 months | No: Google SERP JSON and snippets | No | No official server (community servers need a key) |
Your agent can discover, call and pay for the API on its own. It needs a human only once, to pay.
01Call it with no key. 25 requests per IP per day.
curl -si https://api.contextfetch.dev/v1/search \
-H 'content-type: application/json' \
-d '{"query":"python asyncio timeout",
"contents":{"text":true,"highlights":true}}'
HTTP/2 200
x-credits-remaining: 2402Out of free calls? 402 with a payment link your agent can show.
402 Payment Required
{
"error": "keyless_limit",
"message": "Daily free tier limit (25 requests) reached. Reload 15,000 searches for $15.",
"checkout_url": "https://contextfetch.dev/#buy",
"pricing": {
"pack_size": 15000,
"price_usd": 15,
"unit_cost_usd": 0.001
},
"packs": [
{
"id": "instant",
"name": "Instant",
"credits": 15000,
"price_usd": 15,
"cost_per_1k": 1,
"recommended": false,
"checkout_url": "https://api.contextfetch.dev/buy/instant"
},
{
"id": "builder",
"name": "Builder",
"credits": 60000,
"price_usd": 50,
"cost_per_1k": 0.83,
"recommended": true,
"checkout_url": "https://api.contextfetch.dev/buy/builder"
},
{
"id": "scale",
"name": "Scale",
"credits": 200000,
"price_usd": 150,
"cost_per_1k": 0.75,
"recommended": false,
"checkout_url": "https://api.contextfetch.dev/buy/scale"
}
],
"action": {
"type": "payment_link",
"url": "https://api.contextfetch.dev/buy/instant",
"prompt_to_user": "ContextFetch credits ran out. Reload 15,000 searches for $15: https://api.contextfetch.dev/buy/instant"
}
}03Your human pays once. Retry with the key.
# action.url -> https://api.contextfetch.dev/buy/instant
# one click to Stripe; the key is copied for you
curl -s https://api.contextfetch.dev/v1/search \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'content-type: application/json' \
-d '{"query":"python asyncio timeout",
"contents":{"text":true,"highlights":true}}'Discovery files for agents: llms.txt, llms-full.txt, mcp.json and robots.txt.
Exa-shaped search. Ask for contents and each result carries page Markdown, highlights and a query-pruned context, all in the 1 credit.
POST/v1/search
Credits: 1Docs for Search
Any public URLs as Markdown, up to 10 per call, with highlights for a query. Failed URLs are not billed.
POST/v1/contents
Credits: 1 per URL that loads (max 10)Docs for Contents
One URL in, Markdown out. Add ?q= to prune it; token counts come back in response headers.
GET/r/{url}?q=
Credits: 1Docs for Reader
Keyless stdio server for Claude Code, Cursor and other clients: contextfetch_search, contextfetch_extract_url, contextfetch_find_similar, contextfetch_deep_research, contextfetch_balance, contextfetch_auto_reload.
npx@contextfetch/mcp
Credits: 1 per searchDocs for MCP server
The official Exa and Tavily SDKs work against ContextFetch. The highlighted line is the only change; use keyless as the key to try it free.
# Exa-shaped search with Markdown and pruned contextcurl -s https://api.contextfetch.dev/v1/search \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"query":"vector database benchmarks 2026","numResults":5,"contents":{"text":true,"pruned_context":true}}' # Any URL as Markdown, pruned to a questioncurl -si "https://api.contextfetch.dev/r/https://docs.python.org/3/library/asyncio-task.html?q=task+groups"# pip install exa-pyfrom exa_py import Exa exa = Exa(api_key="YOUR_API_KEY", base_url="https://api.contextfetch.dev") res = exa.search( "vector database benchmarks 2026", num_results=5, contents={"text": True, "highlights": True},)for r in res.results: print(r.url, r.highlights)// npm i exa-jsimport Exa from "exa-js"; const exa = new Exa("YOUR_API_KEY", "https://api.contextfetch.dev"); const res = await exa.search("vector database benchmarks 2026", { numResults: 5, contents: { text: true, highlights: true },});for (const r of res.results) console.log(r.url, r.highlights);# pip install tavily-pythonfrom tavily import TavilyClient tavily = TavilyClient( api_key="YOUR_API_KEY", # or "keyless" for the free tier api_base_url="https://api.contextfetch.dev/tavily",) res = tavily.search("vector database benchmarks 2026", max_results=5, include_raw_content=True)for r in res["results"]: print(r["url"], r["score"])# Claude Code: keyless, zero signupclaude mcp add contextfetch -- npx -y @contextfetch/mcp # Optional paid keyclaude mcp add contextfetch -e CONTEXTFETCH_API_KEY=YOUR_API_KEY -- npx -y @contextfetch/mcp # Claude Desktop / Cursor (mcpServers JSON){ "contextfetch": { "command": "npx", "args": ["-y", "@contextfetch/mcp"] } }Numbers from the benchmark files in this repo, measured on one machine. Competitor latency and quality: not measured. We publish only what we ran.
Search, cold
measured1,644ms p50
POST /search end to end with page text and highlights, query-cache miss (cache = miss); URL-cache state not recorded: 5 queries, max 2,300 ms.
Same query, cached
measured9ms p50
The same 5 requests repeated and answered from the query cache, max 1,842 ms. Still billed as a search.
Context tokens saved
measured69% mean
prunedContext vs the full page over 29 query/doc pairs. Synthetic docs written for this repo, not live pages.
Answer kept after pruning
measured93%
Pairs whose prunedContext still contains the answer; a random chunk does 18%. Same synthetic docs.
One click to checkout with card, Apple Pay or Google Pay. Your API key is copied for you on the next page.
$15
15,000 credits · $1.00 per 1k
$50
60,000 credits · $0.83 per 1k
$150
200,000 credits · $0.75 per 1k
One-time payment. Credits never expire. Full Markdown and pruning included.
Enable auto-reload (recommended for production agents)
Off: you pay once and top up by hand.
Yes. Send no Authorization or x-api-key header, or send Authorization: Bearer guest (or Bearer keyless). You get 25 requests per IP per UTC day (IPv6: per /64). Failed keyless requests still count. Every billable response carries X-Credits-Remaining. When the allowance runs out the API answers HTTP 402 with X-Payment-URL and action.prompt_to_user, a one-click payment link your agent can show to its user.
One search (up to 25 results, with Markdown, highlights and pruned context when you ask for them in contents), one findSimilar, one Tavily-style search or one Reader page. /contents costs one credit per URL that loads. A paid request that ends in an error is refunded.
Yes, after a base-URL change to https://api.contextfetch.dev (Tavily: https://api.contextfetch.dev/tavily). Search, contents and findSimilar keep Exa's request and response shapes. Exa's answer, research, Websets and summary features are not available.
No. Instant is $15 for 15,000 credits, Builder $50 for 60,000 and Scale $150 for 200,000. Each is a one-time payment, with no subscription; auto-reload is optional and capped per month.
On our own machine: cold POST /search with page text has a p50 of 1,644 ms over 5 queries (max 2,300 ms); a repeated query served from cache has a p50 of 9 ms; pruned context saves 69% of tokens on average on synthetic docs written for this repo, not live pages. Competitor latency and result quality are not measured, so this site compares only list prices and features. Method and raw numbers are on the benchmarks page.
Only its SHA-256 hash is stored. The plaintext key is shown, and copied to your clipboard, on the checkout success page for 24 hours. The balance checker sends the key only in the Authorization header, never in a URL.