serp402

Google search for agents. One endpoint, one price: USD 0.005 per call in USDC over x402 — no API key, no account, no subscription, no minimum.

Call it

import { wrapFetchWithPayment } from "@x402/fetch";

const pay = wrapFetchWithPayment(fetch, wallet);
const res = await pay("https://serp402.vercel.app/api/v1/search", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ query: "best espresso machine 2026", country: "us" }),
});
const { answer, results } = await res.json();

What you can search

type: search, news, images, videos, places, shopping, scholar. All of them come back in the same shape, so an agent writes one parser: position, title, url, site, snippet, publishedAt (ISO), publishedLabel, and an extra object with whatever that type carries — price and seller for shopping, address, rating and coordinates for places, publication and citations for Scholar.

Also: country, language, location, freshness, num, page. Google's direct answer and knowledge-panel facts are included when it has them. URLs are canonicalised and duplicates removed.

From Claude, Cursor or any MCP client

Add the MCP server and your agent gets a Google search it pays for itself. Fund a wallet with a few dollars of USDC on Base — no ETH needed, the facilitator pays the gas — and set a ceiling it cannot be talked past.

{
  "mcpServers": {
    "serp402": {
      "command": "npx",
      "args": ["-y", "serp402-mcp"],
      "env": {
        "SERP402_EVM_PRIVATE_KEY": "0x… a key holding USDC on Base",
        "SERP402_MAX_SPEND_USD": "1.00"
      }
    }
  }
}

You are charged only when it answers

The payment is verified, the search runs, and settlement happens last. If the upstream fails, the payment is cancelled and the error says so — and a search that finds nothing at all is answered free.

Where the data comes from

Google search results retrieved through Serper. Serper is not affiliated with or endorsed by Google. All trademarks and copyright remain the property of their respective owners. Every response carries an attribution object — keep it with the results if you pass them on.

openapi.json · llms.txt · status