Skip to content
ContextFetch

Search API for AI agents

The $1 / 1,000 neural search & Markdown 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/mcp
Search APIs for AI agents compared by list price per 1,000 searches, as of 2026-10-16.
ProviderPrice per 1k searchesPage Markdown includedPruned contextKeyless MCP
ContextFetch$1.00 ($0.75 on the $150 pack)Yes, on request (contents), no extra chargeYes: cross-encoder prunedContext + highlightsYes: 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 typeHighlights, $1.00 per 1,000 pagesYes: hosted, rate-limited
Tavily$8.00 basic, $16.00 advanced (pay-as-you-go)Optional raw_contentRelevance-ranked content snippetsNo: API key or OAuth sign-in
Firecrawl$1.20 (Scale, billed yearly) to $7.60 (Hobby, billed monthly); 2 credits per 10 resultsExtra: +1 credit per scraped pageHighlight format, +4 credits per pageYes: hosted, daily limits
Serper$1.00 ($50 pack) down to $0.30 at volume; credits expire after 6 monthsNo: Google SERP JSON and snippetsNoNo official server (community servers need a key)
List prices only; latency and result quality are not compared here. Sources: Exa pricing, Exa MCP docs, Tavily pricing, Tavily credits, Tavily MCP docs, Firecrawl pricing, Firecrawl search docs, Firecrawl MCP docs, Serper pricing.

No signup. Payment when it matters.

Your agent can discover, call and pay for the API on its own. It needs a human only once, to pay.

  1. 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: 24
  2. 02Out 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"
      }
    }
  3. 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.

Four ways in

Change the base URL, keep your code

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"

Measured, with the method

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

measured

1,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

measured

9ms p50

The same 5 requests repeated and answered from the query cache, max 1,842 ms. Still billed as a search.

Context tokens saved

measured

69% mean

prunedContext vs the full page over 29 query/doc pairs. Synthetic docs written for this repo, not live pages.

Answer kept after pruning

measured

93%

Pairs whose prunedContext still contains the answer; a random chunk does 18%. Same synthetic docs.

All numbers, method and raw JSON

Buy credits. No subscription.

One click to checkout with card, Apple Pay or Google Pay. Your API key is copied for you on the next page.

Instant

$15

15,000 credits · $1.00 per 1k

  • Markdown, highlights and pruned context in every search credit
  • Search, Contents, Reader and MCP
Buy 15,000 credits

Builder

Most popular

$50

60,000 credits · $0.83 per 1k

  • 20% more credits than the Instant rate
  • Search, Contents, Reader and MCP
Buy 60,000 credits

Scale

$150

200,000 credits · $0.75 per 1k

  • 33% more credits than the Instant rate
  • Search, Contents, Reader and MCP
Buy 200,000 credits

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.

Not ready to pay? The API and the MCP server work without a key for 25 requests per IP per day. Pricing details

Questions

Can I use the API without a key?

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.

What does one credit buy?

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.

Do exa_py, exa-js and tavily-python work?

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.

Do credits expire?

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.

What have you measured, and what not?

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.

How is my API key stored?

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.