
ChatGPT Scraper API
ChatGPT Replies
as Structured JSON
ChatGPT Replies as Structured JSON
Send a single prompt and get the full assistant reply back as parsed JSON. No login, no cookies, no session state. The streaming message envelope is assembled server-side and handed to you ready to use, complete with citations, model, and finish reason.
Start scraping today with 1000 free credits. No Credit Card Required

One Prompt In, One Clean Reply Out
Send a prompt with a single `GET` request. Get back the full assistant reply, citations, and model metadata in one JSON envelope. No account to manage, no cookies to refresh, no streaming protocol to assemble.
Each call is stateless. Build prompt batches, evaluation harnesses, or research pipelines without juggling conversation IDs or session tokens. Pay only for replies that actually finish.
Citations and Metadata, Already Parsed
When the model cites sources, you get the resolved URLs in a `content_references[]` array on the message metadata. Inline citation delimiters are stripped from the visible text so `parts[0]` reads cleanly.
The envelope also includes `model_slug` (which ChatGPT model answered), `finish_details` (stop reason), `message.id`, and `conversation_id`. Everything you need to log, audit, or chain replies into a downstream pipeline.
How It Works
Select a Target

Send API Request
import requests
import json
token = "<SDO-token>"
url = f"https://api.scrape.do/plugin/chatgpt/chat?token={token}&q=Explain+how+rainbows+form"
response = requests.request("GET", url)
print(json.dumps(response.json(), indent=2))Get Structured JSON
{
"data": {
"message": {
"id": "f0a2b1c4-1234-5678-9abc-def012345678",
"status": "finished_successfully",
"content": {
"content_type": "text",
"parts": [
"Rainbows form when sunlight is refracted, reflected, and dispersed inside water droplets in the atmosphere..."
]
},
"metadata": {
"model_slug": "gpt-5",
"finish_details": { "type": "stop" },
"content_references": [
{
"type": "webpage",
"title": "How Rainbows Form, NOAA SciJinks",
"safe_urls": ["https://scijinks.gov/rainbow/"]
}
]
}
},
"conversation_id": "9b8a7c6d-0011-2233-4455-667788990011"
}
}
How many ChatGPT Scraper API calls per plan?
Every ChatGPT Scraper API call costs 10 credits. Here's what each plan buys you.
All plans include automatic anti-bot bypass, residential proxies, and a 99.98% success rate. See full plan details.
Scrape.do has been a game-changer with powerful scraping tools, but what truly sets them apart is their excellent customer support.

CTO
Average Response Time
No tickets connect with expert engineers.
Success rate
Proxies
Faster gateway than the closest competitor.
Reliable, Scalable,Unstoppable Web Scraping
Frequently Asked Questions
The OpenAI API requires an OpenAI account, a paid plan, API key management, and per-token billing. This plugin scrapes the public chatgpt.com web product, so there is no OpenAI account to maintain on your side. Every successful call is a flat 10 credits, regardless of prompt length or model output. Useful when you want the same conversational answers the web app gives, not a separate production-grade contract with OpenAI.
Whichever model chatgpt.com serves to anonymous users at request time, returned to you as data.message.metadata.model_slug (e.g., gpt-5). The plugin doesn't let you pin a specific model. If you need model-level guarantees, the OpenAI API is the better fit.
No. Each request is stateless. To continue a conversation, include the prior context inside the new q. The conversation_id in the response is informational and not reusable across calls.
When the model cites sources, they come back in data.message.metadata.content_references[]. Each entry has a type (e.g., "webpage"), a title, and safe_urls[] with the resolved URLs. The visible reply text in parts[0] is already clean: inline citation delimiters are stripped server-side before the response is returned.
Yes. Very long prompts are rejected before any model call runs, so no credits are spent on them. For long-context tasks, summarize first or use the OpenAI API directly.
finish_details.type == "stop" is a normal completion. Other values indicate the model stopped early (for example at a tool-call boundary or a content filter). Always check this field if your downstream consumer needs guaranteed full replies.
The plugin returns standard 5xx for transient upstream issues. Retry once with a short backoff. Successful calls cost 10 credits; failed calls don't consume credits.
The ChatGPT API documentation covers the full request shape, the response envelope structure, every field on the message metadata, and the citation reference object.


