ScraperAPI vs AnswerLine
ScraperAPI added structured endpoints for ChatGPT, Perplexity, Gemini and Google AI Mode next to its Google Search and News endpoints, billed in credits on monthly plans. This API also covers Copilot, Grok and the Google AI Overview.
Coverage
| ScraperAPI | AnswerLine | |
|---|---|---|
| ChatGPT | Yes, structured ChatGPT endpoint: answer as markdown, sources, related queries, model. | Yes, POST /v1/monitor/chatgpt. |
| Perplexity | Yes, structured Perplexity endpoint: the same fields. | Yes, POST /v1/monitor/perplexity. |
| Gemini | Yes, structured Gemini endpoint: the same fields. | Yes, POST /v1/monitor/gemini. |
| Microsoft Copilot | No endpoint found in their docs. | Yes, POST /v1/monitor/copilot. |
| Grok | No endpoint found in their docs. | Yes, POST /v1/monitor/grok. |
| Google AI Mode | Yes, structured Google AI Mode endpoint. | Yes, POST /v1/monitor/aimode. |
| Google AI Overview | No; the Google SERP endpoint documents no AI Overview field. | Supported by the API. +2 credits, added once per request. |
| Google Search | Yes, Google SERP structured endpoint: organic results, shopping items, related questions and searches. | Supported by the API. |
| Google News | Yes, Google News structured endpoint. | Supported by the API. |
ScraperAPI's plans
| Plan | Monthly | API credits | Concurrent threads | Geotargeting |
|---|---|---|---|---|
| Hobby | $49 | 100,000 | 20 | US & EU only |
| Startup | $149 | 1,000,000 | 50 | US & EU only |
| Business | $299 | 3,000,000 | 100 | Country-level |
| Scaling | $475 | 5,000,000 | 200 | Country-level |
| Professional | $975 | 10,500,000 | 300 | Country-level |
| Advanced | $1,975 | 21,500,000 | 500 | Country-level |
Price per request
| Request | AnswerLine credits | AnswerLine price | ScraperAPI |
|---|---|---|---|
| ChatGPT | 5 | $0.003 | 25 credits, $0.0123 ($0.0025); 75 with sources |
| Perplexity | 4 | $0.002 | 25 credits, $0.0123 ($0.0025) |
| Gemini | 4 | $0.002 | 25 credits, $0.0123 ($0.0025) |
| Microsoft Copilot | 5 | $0.003 | No endpoint found |
| Grok | 4 | $0.002 | No endpoint found |
| Google AI Mode | 4 | $0.002 | 25 credits, $0.0123 ($0.0025) |
| Google AI Overview | 5 | $0.003 | Not documented |
| Google Search | 3 | $0.002 | SERP requests listed at 25 credits |
| Google News | 3 | $0.002 | SERP requests listed at 25 credits |
How requests, geo, billing and delivery work
| ScraperAPI | AnswerLine | |
|---|---|---|
| Parsing depth | AI endpoints return the same normalized fields for every engine: answer as markdown, sources, related queries and model, with raw HTML optional. Google SERP: organic results, shopping items, related questions and searches. | 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 SERP, News and AI Mode: country_code, tld, hl, gl and uule; Hobby and Startup plans are limited to US and EU. No geo parameter is documented for ChatGPT, Perplexity or Gemini. | 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 200 and 404 responses; not for a request that fails after 70 seconds of retrying. | A failed request or task is not charged, and neither is a queued task you clear before it starts. |
| Async and webhooks | Async endpoints with a webhook callback, tried 3 times, plus DataPipeline for scheduled jobs. | 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 ScraperAPI is stronger
- One plan covers any URL plus structured endpoints for Amazon, eBay, Walmart, Redfin and Google Jobs, Shopping and Maps.
- DataPipeline runs recurring jobs of up to 100,000 inputs without code and delivers to a webhook.
- Self-serve plans go up to 500 concurrent threads.
Choose this API when you also need Copilot, Grok and the AI Overview, country and US state on every assistant, and signed webhooks with idempotency keys. The guide below compares the two requests.
Which to pick
Pick ScraperAPI if you already use it to scrape e-commerce, real estate or arbitrary pages and its four AI endpoints give you enough: an answer as markdown and a source list. Its DataPipeline also schedules recurring jobs without code.
Pick this API if you need the Google AI Overview with its sources, Copilot and Grok, country plus US state on every assistant request, and signed webhooks with idempotency keys.
Normalised vs engine-specific schemas
ScraperAPI’s AI Results endpoints return one normalised shape for every engine: query, url, model, answer (markdown), sources[] with title, URL, domain and snippet, and related_queries[] (checked 2026-09-17, docs.scraperapi.com). That is simple to consume, and it is also a ceiling: anything outside those fields is only available in raw HTML with include_html.
This API returns one schema per engine. The shared core (text, markdown, sources) has the same names, and each engine’s schema adds its own fields, such as searchQueries and shoppingCards on ChatGPT and Copilot, or map on Copilot.
Migration: the same ChatGPT request
On ScraperAPI
curl "https://api.scraperapi.com/structured/chatgpt/search/v1?api_key=$SCRAPERAPI_KEY&query=best+CRM+for+real+estate+agents&sources=true"
Per its docs, sources=true makes citations a condition of a successful response and raises the cost from 25 to 75 credits; without it, sources are often empty for ChatGPT.
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 CRM for real estate agents",
"country": "US",
"state": "FL",
"include": { "markdown": true }
}'
Web search is forced by default on this API’s ChatGPT requests, and there is no separate flag or price for asking for sources. Set disableWebSearch: true only when you want to measure what ChatGPT answers without being pushed to search.
Field mapping
| ScraperAPI AI Results | This API ChatGPT result |
|---|---|
answer |
result.markdown (with include.markdown), result.text |
sources[] title, url, domain, snippet |
result.sources[] label, url, description, position; result.citationPills[] domain |
related_queries[] |
no equivalent |
model |
result.model |
query |
your prompt |
Google Search: adding the AI Overview
On ScraperAPI
curl "https://api.scraperapi.com/structured/google/search?api_key=$SCRAPERAPI_KEY&query=crm+for+realtors&country_code=us&tld=com"
The documented keys are search_information, shopping_items, organic_results, related_questions, related_searches and pagination.
On this API
import os, requests
r = requests.post(
"https://api.answerline.dev/v1/monitor/google",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"query": "crm for realtors",
"country": "US",
"location": "Miami,Florida,United States",
"include": {"aioverview": {"markdown": True}},
},
timeout=330,
)
result = r.json()["result"]
for s in (result.get("aioverview") or {}).get("sources", []):
print(s["position"], s["url"])
Beyond the AI Overview, the response adds ads, localResults, knowledgeGraph, peopleAreSaying and shoppingCards next to organicResults, peopleAlsoAsk and relatedSearches.
Async jobs and callbacks
ScraperAPI’s async structured endpoints take a JSON body with apiKey, the query and a callback of type webhook; the reply includes a statusUrl, and its docs say a webhook is tried three times before the job is cancelled.
This API’s equivalent:
import { Client } from "@answerline/sdk";
const client = new Client({ apiKey: process.env.API_KEY!, baseUrl: "https://api.answerline.dev" });
const prompts = ["best CRM for real estate agents", "Follow Up Boss vs kvCORE"];
const batch = await client.createBatch(
prompts.flatMap((prompt, i) =>
(["CHATGPT", "COPILOT", "GROK"] as const).map((taskType) => ({
taskType,
payload: { prompt, country: "US", state: "FL" },
idempotencyKey: `crm-${i}-${taskType}-US-FL-2026-09-17`,
webhook: { url: "https://your-app.com/hooks/answers" },
})),
),
);
console.log(batch.summary);
Differences to plan for:
- Delivery retries. Here a delivery is retried up to 10 attempts with exponential backoff, and owners can redeliver a dead delivery from the dashboard after fixing an endpoint.
- Signatures. Every delivery is signed with your account’s secret. Reject unsigned or stale deliveries.
- Keys. The idempotency key makes resubmission safe; ScraperAPI’s async body has no equivalent documented.
- Queue visibility.
GET /v1/async/statusshows queued and running counts;DELETE /v1/async/queueclears tasks that haven’t started, and those are not charged.
Comparing cost
ScraperAPI’s credit value depends on the plan: the same 25-credit request costs roughly five times more per request on Hobby than on Business, as the table above shows. Its sources=true flag triples the ChatGPT cost. This API’s credits per request are 5 for a ChatGPT, Copilot or Grok task, 4 for Gemini, and 3 for a one-page Google Search with 2 more for the AI Overview; synchronous calls add 2. Credits per request are the same on every plan; the dollar value of a credit depends on the plan, as listed on pricing.
- Decide whether you need citations on every ChatGPT answer. If yes, price ScraperAPI at 75 credits.
- Check the geotargeting limit on the ScraperAPI plan you’d buy: Hobby and Startup are US and EU only.
- Convert both to dollars per answer per engine, at the plan your total volume needs.
- Price engines one side lacks separately instead of dropping them.
Running both side by side before cutting over
Start with a parallel run: the same prompts, markets and schedule on ScraperAPI and on this API for one or two weeks, stored in the same table with a provider column.
- Choose prompts for engines both sides cover, and Google queries you track.
- Decide once whether your ScraperAPI ChatGPT baseline uses
sources=true; the answer changes both cost and what counts as success. - Submit the same prompts here as tasks with webhooks, keyed by prompt, engine, market and day, in the same markets your ScraperAPI plan allows.
- Store both in one table with provider, engine, market, answer text, cited domains and status.
What to compare at the end of the run:
- Answers with sources: the share of answers with at least one source on each side, with the
sourcessetting noted. - AI Overview: for the Google queries, what this API returned in
aioverview, since ScraperAPI’s SERP endpoint documents no equivalent. - Cited domains overlap per prompt, compared with day-to-day variation on one provider.
- Cost per usable answer on the plan each side needs for your volume and markets.
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
ScraperAPI charges for 200 and 404 responses, retries internally for up to 70 seconds, and does not charge a request that still fails, per its docs.
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
- Citations and pills as fields? This API.
- AI Overview from Google? Not documented on ScraperAPI’s SERP endpoint; returned here.
- Copilot or Grok? Covered here; not found in ScraperAPI’s docs.
- Markets beyond US and EU on an entry plan? This API takes any supported country on every plan.
- Other scraping needs? Keep ScraperAPI for them.
Pitfalls
- Treating an empty
sourcesas zero visibility. ScraperAPI’s own docs say sources are often empty withoutsources=true. Whichever API you use, store empty source lists together with the request settings, such as whether web search was disabled, so a zero can be interpreted later. - Mixing related queries and search queries. ScraperAPI’s
related_queriesare follow-up suggestions;searchQuerieshere are searches the engine ran. They measure different things. - Carrying API keys in URLs. Header auth here; rotate keys that were logged in query strings.
- Unbounded retries. Retry a synchronous call only when it never reached the server; a
500or502from it is final. See authentication and errors.
Start with the quickstart or the Google Search engine page.
Questions
Does ScraperAPI have a ChatGPT endpoint?
Yes. As checked on 2026-09-17, ScraperAPI's docs list structured endpoints for ChatGPT, Perplexity, Gemini and Google AI Mode. The ChatGPT endpoint costs 25 credits, or 75 with sources=true, and returns the answer as markdown, sources, related queries and the model.
Does ScraperAPI return Google AI Overviews?
Its Google SERP structured endpoint documentation, checked 2026-09-17, lists search information, shopping items, organic results, related questions, related searches and pagination, with no AI Overview field. This API returns result.aioverview with sources and citation pills when include.aioverview is set.
Can I target a country on ScraperAPI's AI endpoints?
Its Google SERP, News and AI Mode endpoints take country_code and tld; its ChatGPT, Perplexity and Gemini docs list no geo parameter. Its Hobby and Startup plans are limited to US and EU geotargeting. This API takes country and a US state on every assistant.
What does ScraperAPI charge for?
Its docs say it charges for 200 and 404 responses and not for a request that fails after 70 seconds of retrying. This API does not charge a failed request or task.
How do I migrate a ScraperAPI async job with a webhook?
Replace the POST to async.scraperapi.com with POST /v1/async/task, move query and parameters into payload, and replace callback with webhook.url. Deliveries here carry the finished result and are signed, so verify the Webhook-Signature header before storing them.