← All surfaces
surfaces: ["google_search"]

A Google SERP API built for the AI-answer era.

Classic SERP APIs return blue links. This surface exists for the layer above them: we render the real Google results page in a browser on our own fleet and return it as the same Envelope as ChatGPT or an AI Overview — organic results as roled sources, any answer-bearing module as the answer, plus a screenshot and proof-of-page of what the SERP actually looked like. One contract for the whole answer stack.

Credit cost
3 credits / successful capture
Fidelity
fidelity: consumer_ui
Regions
9 countries
POST /v1/search
curl -sS -X POST "https://api.aisearchapi.dev/v1/search" \
  -H "Authorization: Bearer $AISEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "best ai search visibility tools",
    "surfaces": ["google_search"],
    "regions": [{ "country": "US", "city": "Seattle" }],
    "method": "auto"
  }'
# → 202 { "jobId": "…", "children": ["….google_search.…"] }
# then poll GET /v1/jobs/:childId — or add ?mode=sync for an inline Envelope

What a Google Search capture returns.

One canonical Envelope — the same four sections every surface returns — with the fields Google Search actually populates. Field names below are the contract, not a summary.

evidence.sources[]

The ranked organic results — url, title, role — in page order. The SERP context your AI-surface captures sit on top of.

answer.text · answer.markdown

Normalized text from the answer-bearing modules the rendered page showed; empty (with surfacePresent:false) when the SERP had no answer module — never fabricated.

provenance.region

Requested-vs-effective country plus realized proxy egress — rankings are geo-sensitive, and the Envelope proves which market you actually measured.

job.artifacts

Screenshot + proof-of-page HTML of the real rendered SERP — a dated, durable record of what Google showed, not a re-serialized guess.

evidence.fanOut

Related searches observed on the page, provenance-marked.

Envelope excerpt — google_search
{
  "job": {
    "id": "job_7a25c8e3.google_search.own-fleet.US",
    "surface": "google_search",
    "method": "own-fleet",
    "status": "completed",
    "warnings": [],
    "artifacts": {
      "screenshotKey": "shots/2026/06/30/job_7a25c8e3.png",
      "proofHtmlKey": "proof/2026/06/30/job_7a25c8e3.html",
      "rawKey": "raw/2026/06/30/job_7a25c8e3.json"
    }
  },
  "provenance": {
    "acquisition": "own-fleet",
    "fidelity": "consumer_ui",
    "surfacePresent": true,
    "region": { "requested": "US", "effective": "US" }
  },
  "answer": { "text": "…", "markdown": "…", "blocks": [ … ] },
  "evidence": {
    "sources": [
      { "id": 0, "url": "https://…", "title": "…", "role": "retrieved",
        "cited": false },
      { "id": 1, "url": "https://…", "title": "…", "role": "retrieved",
        "cited": false }
    ],
    "fanOut": { "provenance": "observed",
                "queries": ["related search …"] }
  }
}

The lanes, stated honestly.

Classic Google results captured live via own-fleet browser render — the SERP context behind the AI answers. The managed-vendor SERP lane is phase-2; there is no official API.

Phase-2 lanes are roadmap, not product — pinning one returns an honest 422 today. The full picture is on the capability matrix.

own-fleet · auto
Supported
managed-vendor
Phase 2
official-api
No path
cost: 3 credits (charged on success only)free tier: 500 credits — pricing
regions:USGBDEFRCAAUINJPBR+ optional city & language

Google Search capture, asked precisely.

How is this different from SerpApi-style SERP APIs?

Two ways. First, it is a real browser render on our own fleet — the page a user sees, with a screenshot and proof-of-page HTML kept durably — not a parsed cache. Second, it shares one Envelope contract with our AI-surface captures (ChatGPT, Perplexity, AI Overviews), so the SERP context and the AI answers above it are diffable with the same parser.

Does google_search include the AI Overview?

The rendered page is captured whole (the artifacts show everything), but if the Overview block is your target, use the dedicated google_ai_overview surface — it extracts the Overview and its citation set specifically, with absence-is-data semantics. Many teams request both surfaces in one call.

Can I target a city, not just a country?

Yes — regions accept { country, city?, language? }. Naming a city biases the capture toward that metro (best-effort, surface-dependent), and provenance records requested-vs-effective geo plus the realized proxy egress so you can audit it.

What does a capture cost?

Credit costs are published per surface on the pricing page; like every surface, google_search is charged only on a successful capture and every Envelope field is included with no per-field surcharge.

Why capture the classic SERP at all if I care about AI answers?

Because the SERP is the control group. Whether your brand ranks organically but is absent from the AI Overview — or vice versa — is the single most actionable GEO signal, and you can only compute it if both captures share a contract.

Capture Google Search in one request.

500 free credits, charged only on success — and the same Envelope for every other surface when you add them.