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 with its citations inline, as one structured Envelope. 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
Regions
any ISO country
Capture method
capture: browser
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" }]
  }'
# → 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 (paragraph, heading, list, code, quote).

answer.markdown (inline citations)

The sources and links ChatGPT cited come through inline in the markdown, exactly as it showed them, ready for your own citation and brand extraction.

provenance.model

Observed-vs-inferred model label with a confidence score, so a UI string like "GPT-5" is never silently equated with a verified model id.

provenance

How the capture ran: loginState, webSearch state, surfacePresent, requested-vs-effective region.

html (opt-in proof-of-page)

Set include.html:true (or ?include=html) and the Envelope carries a top-level html URL — a proof-of-page snapshot of exactly what we rendered, fetchable at GET /v1/artifacts/{key}. Off by default.

Envelope excerpt, chatgpt
{
  "job": {
    "id": "job_8f3c2a1e.chatgpt.US",
    "surface": "chatgpt",
    "status": "completed",
    "warnings": []
  },
  "provenance": {
    "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": "For startups: HubSpot, Attio, Pipedrive…",
    "markdown": "For startups: **HubSpot**, **Attio** [attio.com], Pipedrive…",
    "blocks": [ { "type": "paragraph", "text": "…" } ]
  }
}

Cost and regions, on the record.

Default browser-first capture of the real ChatGPT UI (guest sessions today), what a person actually sees, not a sanitized model response.

Phase-2 surfaces are roadmap, not product. Requesting one returns an honest 422 today. The full picture is on the coverage page.

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: 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 what a person actually sees, with its citations inline, not a model API response.

Does the API ever fall back to a model API response for ChatGPT?

No. ChatGPT capture always renders the real UI. There is no silent substitution with a model API response.

Are the captures logged in?

Guest (logged-out) sessions today, and the Envelope says so: provenance.loginState is recorded on every capture. Logged-in, personalized capture is on the roadmap.

What does a ChatGPT capture cost?

Five credits per successful capture, the whole Envelope included — the answer, its provenance and structured evidence. 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?

Any ISO-3166-1 alpha-2 country, optionally narrowed by state, city or language, up to 10 regions per request. Each region fans out into its own child job, and provenance records the requested-vs-effective region so geo targeting is verifiable. Omit regions entirely and you get a single untargeted (global) capture.

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.