Scrape.do vs AnswerLine
Scrape.do is a general scraping API with ready endpoints for ChatGPT, Gemini, Google Search, AI Mode and Google News, billed in credits on monthly plans. This API adds Perplexity, Copilot and Grok, with async tasks on every engine.
Coverage
| Scrape.do | AnswerLine | |
|---|---|---|
| ChatGPT | Yes, ChatGPT Scraper API: answer, model and citations. | Yes, POST /v1/monitor/chatgpt. |
| Perplexity | No endpoint found. | Yes, POST /v1/monitor/perplexity. |
| Gemini | Yes, Gemini Scraper API: markdown answer, up to 30 sources, model. | Yes, POST /v1/monitor/gemini. |
| Microsoft Copilot | No endpoint found. | Yes, POST /v1/monitor/copilot. |
| Grok | No endpoint found. | Yes, POST /v1/monitor/grok. |
| Google AI Mode | Yes, Google AI Mode endpoint: text blocks, references and shopping results. | Yes, POST /v1/monitor/aimode. |
| Google AI Overview | Yes, in the Google Search response; a deferred overview needs a follow-up call within 90 seconds. | Supported by the API. +2 credits, added once per request. |
| Google Search | Yes, Google Search endpoint with parsed JSON. | Supported by the API. |
| Google News | Yes, Google News endpoint. | Supported by the API. |
Scrape.do's plans
| Plan | Monthly | Credits | Concurrency |
|---|---|---|---|
| Free | $0 | 1,000 | 5 |
| Hobby | $29 | 250,000 | 10 |
| Pro | $99 | 1,250,000 | 50 |
| Business | $249 | 3,500,000 | 100 |
| Advanced | $699 | 10,000,000 | 200 |
Price per request
| Request | AnswerLine credits | AnswerLine price | Scrape.do |
|---|---|---|---|
| ChatGPT | 5 | $0.003 | 25 credits, $0.0029 |
| Perplexity | 4 | $0.002 | No endpoint found |
| Gemini | 4 | $0.002 | 25 credits, $0.0029 |
| Microsoft Copilot | 5 | $0.003 | No endpoint found |
| Grok | 4 | $0.002 | No endpoint found |
| Google AI Mode | 4 | $0.002 | 10 credits, $0.0012 |
| Google AI Overview | 5 | $0.003 | 10 credits, +5 ($0.0006) when the overview is deferred |
| Google Search | 3 | $0.002 | 10 credits, $0.0012 |
| Google News | 3 | $0.002 | 10 credits, $0.0012 |
How requests, geo, billing and delivery work
| Scrape.do | AnswerLine | |
|---|---|---|
| Parsing depth | Google endpoints return parsed JSON: organic results, ads, top stories, People Also Ask, AI Overview, local results and knowledge graph. ChatGPT returns answer text, model and citations. The general API returns raw HTML or markdown. | One JSON schema per engine in the OpenAPI document. Assistants: answer text, markdown and sources, plus the engine-specific fields each schema defines. Google: organic results, ads, People Also Ask, local pack, knowledge graph and the AI Overview with its sources. |
| Geo targeting | Google: gl, hl, location, uule, Google domain and device. General API: country by geoCode. No geo parameter is documented on the ChatGPT and Gemini product pages. | country on every engine; US state on ChatGPT, Perplexity, Gemini, Copilot and Grok; location, uule, hl and device on Google Search and AI Mode. |
| Billing on failures | Charged for 2xx, 400, 404 and 410 responses; not for timeouts, blocks or errors. | A failed request or task is not charged, and neither is a queued task you clear before it starts. |
| Async and webhooks | Async API jobs with a webhook URL; its docs list Amazon, Google Search and Google Trends among the endpoints it supports. | Synchronous monitor calls, or async tasks and batches with idempotency keys, polled or delivered to a signed webhook with up to 10 delivery attempts. |
Where Scrape.do is stronger
- The same credits buy JavaScript rendering, sessions, screenshots and residential or mobile proxies for pages no structured endpoint covers.
- Google requests cost 10 credits, on plans of up to 10,000,000 credits a month.
- Ready endpoints also cover Amazon, Walmart, YouTube, Google Maps, Shopping, Flights, Hotels, Play Store and Trends.
Choose this API when you also need Perplexity, Copilot and Grok, US state targeting on the assistants, and async tasks with webhooks on every engine. The guide below compares the requests.
Which to pick
Pick Scrape.do when you need a general-purpose scraper with rendering and residential proxies for arbitrary sites, and its ChatGPT, Gemini and Google endpoints cover the AI and search data you need at its credit prices.
Pick this API when AI answers are the core data set and you need Perplexity, Copilot and Grok alongside ChatGPT and Gemini, a US state on every assistant request, and async tasks on every engine.
You can keep Scrape.do for long-tail scraping and move only the AI answer workload.
What each is built around
Scrape.do’s core product is a proxy-and-rendering API: pass a URL and options such as render, super (residential and mobile IPs) and geoCode, and get the page back, raw or as markdown. Its “Ready Scraper APIs” are plugins on top of that, each with its own path under /plugin/ and its own credit cost (checked 2026-09-17, scrape.do).
This API has no URL mode and no proxy options. Each engine is an endpoint with a request schema (prompt or query, market, include flags) and a response schema.
What you maintain differs:
- Response parsing. Scrape.do’s ChatGPT response nests the answer as
data.message.content.parts[0]with citations undermetadata.content_references, close to ChatGPT’s own message format. Here the answer isresult.textand citations areresult.sources[], the same field names on every assistant. - Engine gaps. Where Scrape.do has no plugin (Perplexity, Copilot, Grok), you’d use its general API and write your own extraction. Here each of them is an endpoint.
- Deferred content. Scrape.do’s deferred AI Overview needs your code to make a follow-up call within 90 seconds. Here the Google response contains the overview, or
null.
Migration: the same ChatGPT request
On Scrape.do
Scrape.do’s ChatGPT page documents a GET with the token and prompt as query parameters (checked 2026-09-17, scrape.do):
curl "https://api.scrape.do/plugin/chatgpt/chat?token=$SCRAPEDO_TOKEN&q=best+standing+desk+for+small+apartments"
The documented response carries the answer in data.message.content.parts[0], the model in metadata.model_slug, citations in metadata.content_references[], and a conversation_id.
On this API
curl -X POST https://api.answerline.dev/v1/monitor/chatgpt \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "best standing desk for small apartments",
"country": "US",
"state": "WA",
"include": { "markdown": true }
}'
Keep the API key out of URLs: it goes in the Authorization header, which proxies and access logs are less likely to record than a query string.
Mapping the response
| Scrape.do ChatGPT | This API |
|---|---|
data.message.content.parts[0] |
result.text, result.markdown |
metadata.content_references[] |
result.sources[], result.citationPills[] |
metadata.model_slug |
result.model |
{{shopping:<id>}} placeholders in the text |
result.shoppingCards[] with include.shopping |
Migration: Google Search with the AI Overview
On Scrape.do
curl "https://api.scrape.do/plugin/google/search?token=$SCRAPEDO_TOKEN&q=standing+desk&gl=us&hl=en&device=desktop"
Its docs list organic_results, related_questions, ai_overview, local_results, knowledge_graph and more in the response. If ai_overview.state is deferred, you call the AI Overview follow-up endpoint with the session_key before it expires.
On this API
import { Client } from "@answerline/sdk";
const client = new Client({ apiKey: process.env.API_KEY!, baseUrl: "https://api.answerline.dev" });
const { result } = await client.google({
query: "standing desk",
country: "US",
hl: "en",
device: "desktop",
include: { aioverview: { markdown: true } },
});
const cited = (result.aioverview?.sources ?? []).map((s: { url: string }) => s.url);
console.log(result.organicResults.length, cited);
Field names map roughly one to one: organic_results to organicResults, related_questions to peopleAlsoAsk, local_results to localResults, knowledge_graph to knowledgeGraph, ai_overview to aioverview. Check each sub-field in the Google Search engine page rather than assuming identical shapes.
Async jobs
Scrape.do’s Async API creates jobs with targets and a webhook URL, authenticated with an X-Token header; its docs list Amazon, Google Search and Google Trends among the plugins it supports, and give async concurrency as 30% of the plan’s.
This API’s async tasks work for every engine, including ChatGPT, and each task carries its own idempotency key and webhook:
import os, requests
tasks = [
{
"taskType": t,
"payload": {"prompt": "best standing desk for small apartments", "country": "US"},
"idempotencyKey": f"desk-{t}-US-2026-09-17",
"webhook": {"url": "https://your-app.com/hooks/answers"},
}
for t in ("CHATGPT", "GEMINI", "COPILOT", "GROK")
]
r = requests.post(
"https://api.answerline.dev/v1/async/task/batch",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json=tasks,
timeout=60,
)
print(r.json()["summary"])
One prompt, four assistants, one call. Results arrive as four signed deliveries; verify them as webhooks shows.
Comparing cost
Scrape.do’s plans sell credits whose price falls as plans grow, and each endpoint costs a fixed number of credits: 25 for ChatGPT and Gemini, 10 for Google Search, AI Mode and News, plus 5 for a deferred AI Overview follow-up (checked 2026-09-17). This API’s credits per request: ChatGPT, Copilot and Grok 5, Gemini 4, Google Search 3 for the first page plus 2 for the AI Overview, and 2 more for synchronous calls. The two credit units are not directly comparable; convert both to dollars per answer.
- Divide each plan’s price by its credits to get the dollar value of a credit.
- Multiply by credits per request for each engine you use.
- For Scrape.do Google requests, add the follow-up cost for the share of queries where the AI Overview is deferred; measure that share on your own queries.
- Include rework: queries whose deferred overview expired before your follow-up call have to be run again.
Running both side by side before cutting over
Start with a parallel run: the same prompts, markets and schedule on Scrape.do and on this API for one or two weeks, stored in the same table with a provider column.
- Choose prompts for ChatGPT and Gemini, which both sides cover, and Google queries where you read the AI Overview.
- Keep Scrape.do calls unchanged, including your deferred AI Overview follow-ups.
- Send the same prompts here, as tasks with webhooks, keyed by prompt, engine, market and day.
- Store both with a
providercolumn, plus on Scrape.do whether the AI Overview was deferred and whether the follow-up succeeded.
What to compare at the end of the run:
- AI Overview capture: the share of Google queries where each side returned an overview, including deferred ones on Scrape.do.
- Answer and citation overlap per prompt, against day-to-day variation on one provider.
- Credits spent on responses you couldn’t use, remembering that Scrape.do bills some 4xx responses.
- Code you could delete after the switch: follow-up calls, session key handling, response unwrapping.
Cut over one engine at a time and keep the parallel data: it is the only record of how the switch itself moved your numbers.
Handling errors after the switch
Scrape.do charges for 2xx, 400, 404 and 410 responses and returns the credit cost of each call in a response header, per its docs, so a client written for it often reads that header.
This API’s errors carry a stable code to branch on (authentication and errors):
| Situation | Status and code | What to do |
|---|---|---|
| Too many requests this second | 429 RATE_LIMIT_EXCEEDED |
Back off with jitter and retry; nothing ran or was charged. |
| Every concurrency slot busy on a synchronous call | 429 CONCURRENT_LIMIT_EXCEEDED |
Retry when a running call finishes, or send a task instead. |
| Queue would overflow | 429 QUEUE_LIMIT_EXCEEDED |
The whole submission was rejected; resubmit later. |
| API shedding load | 429 SERVICE_OVERLOADED |
Wait at least Retry-After seconds. |
| Balance can’t cover the request | 403 INSUFFICIENT_CREDITS |
Top up or wait for the next cycle; check GET /v1/credits. |
| Repeated idempotency key | 409 RESOURCE_CONFLICT |
The task already exists; fetch it instead of creating it. |
| Engine failed after automatic retries | 500 or 502 EXTERNAL_SERVICE_ERROR |
Not charged. For tasks, resubmit with a new key if you still need the answer. |
Every response carries an X-Request-Id; send your own to tie a request to your logs, and quote it to support. The TypeScript SDK applies this retry policy for you.
Decision checklist
- Assistants. Perplexity, Copilot or Grok needed? Covered here; no Scrape.do endpoint found.
- Markets. US state or city-level location per request? This API takes
stateon assistants andlocationon Google. - Fields. List the fields you store and test that each is returned for your prompts on both sides.
- Async. Do you need async jobs for ChatGPT prompts? Check Scrape.do’s current Async API plugin list; here every engine accepts tasks.
- Other sites. Keep Scrape.do for pages outside search and AI answers.
Pitfalls
- Tokens in query strings. Moving to header auth is a good moment to rotate keys that were logged in URLs.
- Assuming 4xx is free. On Scrape.do some 4xx responses are billed. Here only completed requests are charged, so validation errors cost nothing, but fix them anyway.
- Session key races. If you keep Scrape.do for some Google traffic, make the deferred-overview follow-up immediate and single-use.
- One parser for all engines. Gemini’s schema has no
searchQueries; ChatGPT’s does. Map per engine.
Start with the quickstart or the Grok engine page.
Questions
Does Scrape.do have a ChatGPT API?
Yes. As checked on 2026-09-17, Scrape.do's ChatGPT Scraper API costs 25 credits per call and its page says it scrapes the public chatgpt.com web product. It also has a Gemini Scraper API at 25 credits. No Perplexity, Copilot or Grok endpoint was found.
How does Scrape.do handle Google AI Overviews?
Its Google Search endpoint returns ai_overview in the response. When Google defers the overview, the response carries a session key, valid for 90 seconds and usable once, for a follow-up call that costs 5 credits.
Can I target a US state with Scrape.do?
Scrape.do's Google endpoints take gl, hl, location and uule, and its geo-targeting page says to contact them for city or state targeting on the general API. No geo parameter is documented on its ChatGPT and Gemini product pages. This API takes country and a US state on every assistant.
What does Scrape.do charge for?
Its documentation says requests are charged for 2xx, 400, 404 and 410 responses, and its pricing page says timeouts, blocks and errors are not charged. This API does not charge failed requests or tasks.
Should I replace Scrape.do entirely?
Only if AI answers and Google results are all you use it for. Its general scraping API, rendering and proxies cover sites a structured AI answer API does not.