← All surfaces
surfaces: ["chatgpt"]

The ChatGPT scraper API that captures the real UI.

Send a prompt, get back what a real person sees in ChatGPT — the answer, the sources it cites, the fan-out queries it ran — as one structured Envelope, with a screenshot and proof-of-page HTML kept as durable evidence. Captures run browser-first on our own stealth-browser fleet (guest sessions today), not through the sanitized OpenAI API.

Credit cost
5 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 crm for startups",
    "surfaces": ["chatgpt"],
    "regions": [{ "country": "US" }, { "country": "GB" }],
    "method": "auto"
  }'
# → 202 { "jobId": "…", "children": ["….chatgpt.…"] }
# then poll GET /v1/jobs/:childId — or add ?mode=sync for an inline Envelope

What a ChatGPT capture returns.

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

answer.text · answer.markdown · answer.blocks

The answer as ChatGPT rendered it — plain text, normalized markdown (always populated), and typed blocks whose referenceIds point into the source list.

evidence.sources[]

Every source with a role (cited / retrieved / related), a cited boolean, and charRanges — the exact character spans of the answer each source backs.

evidence.fanOut

The sub-queries ChatGPT actually searched, marked observed when read off the page — the raw material of GEO analysis.

evidence.mentions

The derived brand-mentions layer: brand, ordinal position, sentiment, and the source ids supporting each mention. Separately versioned; null when not computed.

provenance

How the capture ran: acquisition lane, consumer_ui fidelity, loginState, observed-vs-inferred model label with confidence, webSearch state, requested-vs-effective region.

job.artifacts

Durable R2 keys — screenshot, proof-of-page HTML, raw payload. Not expired at 24h; your audit trail survives.

Envelope excerpt — chatgpt
{
  "job": {
    "id": "job_8f3c2a1e.chatgpt.own-fleet.US",
    "surface": "chatgpt",
    "method": "own-fleet",
    "status": "completed",
    "warnings": [],
    "artifacts": {
      "screenshotKey": "shots/2026/06/30/job_8f3c2a1e.png",
      "proofHtmlKey": "proof/2026/06/30/job_8f3c2a1e.html",
      "rawKey": "raw/2026/06/30/job_8f3c2a1e.json"
    }
  },
  "provenance": {
    "acquisition": "own-fleet",
    "fidelity": "consumer_ui",
    "loginState": "logged_out",
    "model": { "observedLabel": "GPT-5", "inferred": true, "confidence": 0.62 },
    "webSearch": { "enabled": true, "known": true },
    "surfacePresent": true,
    "region": { "requested": "US", "effective": "US" }
  },
  "answer": { "text": "…", "markdown": "…", "blocks": [ … ] },
  "evidence": {
    "sources": [
      { "id": 0, "url": "https://…", "title": "…",
        "role": "cited", "cited": true, "charRanges": [[12, 33]] }
    ],
    "fanOut": { "provenance": "observed", "queries": ["…", "…"] },
    "mentions": { "engine": "mentions@0.9.0", "confidence": 0.81, "items": [ … ] }
  }
}

The lanes, stated honestly.

Default browser-first capture of the real ChatGPT UI on our own fleet (guest sessions today). The official-api lane (OpenAI Responses) is an explicit pin for an api_surrogate baseline — auto never silently uses it. The managed-vendor lane is phase-2.

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
Supported
cost: 5 credits (charged on success only)free tier: 500 credits — pricing
regions:USGBDEFRCAAUINJPBR+ optional city & language

ChatGPT capture, asked precisely.

How does the API capture ChatGPT?

Browser-first on our own fleet: a real stealth-browser session (Bright Data Scraping Browser under our runtime) loads the actual ChatGPT UI as a guest, submits your prompt, waits for the completion signal, and normalizes the rendered answer into the Envelope. You get consumer_ui fidelity — what a person sees, including sources and fan-out — not a model API response.

Does `auto` ever fall back to the OpenAI API?

No. For ChatGPT, `auto` routes to the own-fleet browser lane. The official-api lane (OpenAI Responses) exists as an explicit pin — method: "official-api" — when you want an api_surrogate baseline to diff against, and it is never selected silently.

Are the captures logged in?

Guest (logged-out) sessions today, and the Envelope says so honestly: provenance.loginState is recorded on every capture. The authenticated account pool that unlocks logged-in surfaces is phase-2 roadmap — we label it that way everywhere rather than selling it as live.

What does a ChatGPT capture cost?

Five credits per successful capture, every Envelope field included — sources, fan-out, mentions, artifacts. Failed captures and empty surfaces cost nothing (charged-on-success), and new accounts start with 500 free credits.

Which regions can I capture ChatGPT from?

Nine countries in v1: US, GB, DE, FR, CA, AU, IN, JP, BR — passed as structured regions objects ({ country, city?, language? }). Each region fans out into its own child job, and provenance records requested-vs-effective region plus the realized proxy egress so geo fidelity is auditable.

How do I know which model answered?

provenance.model separates the observedLabel (the UI string, e.g. "GPT-5") from a verified providerId, with an inferred flag and a confidence score. We never conflate a UI label with an official model id — if the identity is a guess, the Envelope says so.

Capture ChatGPT in one request.

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