Bright Data vs AnswerLine
Bright Data covers Google through its SERP API and the AI assistants through Web Scraper API scrapers, both at a flat price per 1,000 successful requests or records. This API returns one engine-specific JSON schema per request, priced in credits.
Coverage
| Bright Data | AnswerLine | |
|---|---|---|
| ChatGPT | Yes, ChatGPT scraper: answer text and HTML, citations, search sources, model. | Yes, POST /v1/monitor/chatgpt. |
| Perplexity | Yes, Perplexity scraper: answer text, HTML and markdown, sources. | Yes, POST /v1/monitor/perplexity. |
| Gemini | Yes, Gemini scraper; its docs say European countries are not available. | Yes, POST /v1/monitor/gemini. |
| Microsoft Copilot | Yes, Microsoft Copilot scraper: prompt, answer and sources. | Yes, POST /v1/monitor/copilot. |
| Grok | Sold on a product page, but the AI scrapers docs page marks Grok as currently unavailable. | Yes, POST /v1/monitor/grok. |
| Google AI Mode | Yes, Google AI scraper: answer text and HTML, links and citations. | Yes, POST /v1/monitor/aimode. |
| Google AI Overview | Yes, through the SERP API with brd_ai_overview=2, which their page says increases the likelihood of receiving one. | Supported by the API. +2 credits, added once per request. |
| Google Search | Yes, SERP API, as parsed JSON, markdown or HTML. | Supported by the API. |
| Google News | Yes, SERP API news search. | Supported by the API. |
Bright Data's pricing
| Product | Free | Pay-as-you-go | Scale plan |
|---|---|---|---|
| SERP API | 5K requests / month | $1.50 / 1K requests | $499 / month with 380K requests, then $1.30 / 1K |
| Web Scraper API (AI scrapers) | 5K records / month | $1.50 / 1K records | $499 / month with 384,000 records, then $1.30 / 1K |
Price per request
| Request | AnswerLine credits | AnswerLine price | Bright Data |
|---|---|---|---|
| ChatGPT | 5 | $0.003 | $0.0015 |
| Perplexity | 4 | $0.002 | $0.0015 |
| Gemini | 4 | $0.002 | $0.0015 |
| Microsoft Copilot | 5 | $0.003 | $0.0015 |
| Grok | 4 | $0.002 | $0.0015 listed; docs mark it unavailable |
| Google AI Mode | 4 | $0.002 | $0.0015 |
| Google AI Overview | 5 | $0.003 | $0.0015; no separate AI Overview price |
| Google Search | 3 | $0.002 | $0.0015 |
| Google News | 3 | $0.002 | $0.0015 |
How requests, geo, billing and delivery work
| Bright Data | AnswerLine | |
|---|---|---|
| Parsing depth | SERP API parsed JSON in a light and a full form; the full form adds the AI Overview, People Also Ask, knowledge panel and more. AI scrapers return answer text, HTML or markdown with citations and sources, delivered as JSON, NDJSON or CSV. | 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 | SERP API: gl, hl and uule (a canonical location or coordinates) and device. AI scrapers take a country input. | 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 | Pay only for successful SERP requests; no charges for failed scraper deliveries. | A failed request or task is not charged, and neither is a queued task you clear before it starts. |
| Async and webhooks | SERP API async requests with a webhook per request or per zone, results kept 48 hours. Scrapers are triggered async and deliver by webhook, API download or to S3, GCS, Azure, Snowflake and SFTP. | 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 Bright Data is stronger
- A flat $1.50 per 1,000 records on pay-as-you-go for every engine; compare it with this API's per-request prices above for your engine mix.
- Their homepage claims 400M+ proxy IPs in 195 countries, seven search engines in the SERP API, and a dataset marketplace and scrapers for hundreds of other domains.
- Results can go straight to cloud storage or a data warehouse instead of a webhook receiver you run.
Choose this API for one request contract across engines, US state targeting on the assistants, and per-task idempotency and signed webhooks instead of zones, dataset ids and snapshot downloads. The guide below compares the two integrations.
Which to pick
Pick Bright Data if you already buy its proxies or datasets, if your team is comfortable with zones and dataset ids, if you want results delivered straight into cloud storage or a warehouse, or if a flat price per record across engines is the deciding factor at your volume.
Pick this API if the job is a recurring AI-visibility pipeline where each answer is one request with its own key, market and webhook, and you want one documented schema per engine instead of mapping scraper records.
Both return JSON over HTTPS; moving between them is mostly a change of request shape and delivery.
How the products are organised
Bright Data splits the job across two products (checked 2026-09-17):
- SERP API for Google Search, Google News and the AI Overview. You create a SERP zone and send either a full Google URL to its request endpoint, or query parameters to its async endpoint. Parsed JSON comes back when you ask for it.
- Web Scraper API for the assistants. Each engine is a scraper identified by a dataset id, called synchronously for small inputs or triggered asynchronously, with results delivered as a snapshot.
This API has one product. Every engine is POST /v1/monitor/<engine> for a synchronous answer, or a task with taskType set to the engine for async work. Auth, errors, credits, idempotency and webhooks are the same across engines.
Three things change when you migrate:
- Identifiers. Zones and dataset ids disappear. Your code references an engine name.
- Delivery. Snapshots delivered in bulk become one webhook delivery per finished task.
- Geo. Bright Data’s scrapers take a
countryinput; its SERP API takesgl,hlanduule. Here the assistants takecountryand a USstate, and Google Search takescountry,location,uule,hlanddevice.
Migration: the same ChatGPT job
On Bright Data
Bright Data’s docs show a synchronous scrape request with a dataset id in the query string, bearer auth, and a JSON array of inputs where each input has a url, a prompt and an optional country (checked 2026-09-17, docs.brightdata.com):
curl -X POST "https://api.brightdata.com/datasets/v3/scrape?dataset_id=gd_m7aof0k82r803d5bjm&format=json" \
-H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '[{ "url": "https://chatgpt.com/", "prompt": "Best payroll software for a UK startup", "country": "GB" }]'
The documented record fields include answer_text, answer_html, citations, search_sources, web_search_triggered and model. The same docs describe optional web_search and require_sources inputs.
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 payroll software for a UK startup",
"country": "GB",
"include": { "markdown": true }
}'
Field mapping for the parts most pipelines store:
| Bright Data ChatGPT record | This API |
|---|---|
answer_text |
result.text |
answer_html |
result.html with include.html; result.markdown with include.markdown |
citations, search_sources |
result.sources[] and result.citationPills[] |
web_search_triggered |
web search is forced by default; set disableWebSearch: true to let ChatGPT decide |
model |
result.model |
Migration: Google with the AI Overview
On Bright Data
The SERP API’s async request, per its docs, posts query parameters with a country and asks for parsed JSON; to raise the chance of an AI Overview, their AI Overview page says to add brd_ai_overview=2 (checked 2026-09-17, docs.brightdata.com):
curl -X POST "https://api.brightdata.com/unblocker/req?customer=$ACCOUNT_ID&zone=$SERP_ZONE" \
-H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "country": "us", "query": { "q": "payroll software", "hl": "en", "gl": "us" }, "brd_json": "1" }'
The response id comes back in a header, and the result is collected later or delivered to a webhook configured on the zone or the request.
On this API
curl -X POST https://api.answerline.dev/v1/async/task \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"taskType": "GOOGLE",
"payload": {
"query": "payroll software",
"country": "US",
"location": "Austin,Texas,United States",
"include": { "aioverview": { "markdown": true } }
},
"idempotencyKey": "payroll-us-austin-2026-09-17",
"webhook": { "url": "https://your-app.com/hooks/answers" }
}'
The delivery carries response.result.aioverview, or null when Google showed no AI Overview, with its sources, citationPills and relatedLinks, next to organicResults, peopleAlsoAsk and the other blocks. The AI Overview add-on is priced on the request, so it is charged whenever include.aioverview is present; see credits.
Receiving results: snapshots vs task deliveries
Bright Data’s scraper jobs return a snapshot: a batch of records you download, or that they push to a webhook or storage target. Its SERP async callbacks, per its docs, usually arrive within minutes but can take up to eight hours at peak, and results are stored for 48 hours.
This API sends one signed delivery per finished task. What that means for your receiver:
- Verify first. Check
Webhook-Signature(HMAC-SHA256 of timestamp and raw body) before parsing. The TypeScript SDK exportsverifyWebhook. - Deduplicate by
task.id. Deliveries can arrive more than once and in any order. - Answer fast. A delivery succeeds on a 2xx within 15 seconds and is otherwise retried, up to 10 attempts, the last about 21 to 43 minutes after the first.
- Treat
FAILEDas data. A failed task is not charged; decide whether to resubmit it with a new idempotency key.
import express from "express";
import { verifyWebhook } from "@answerline/sdk";
const app = express();
app.post("/hooks/answers", express.raw({ type: "application/json" }), async (req, res) => {
if (!(await verifyWebhook(req.body, req.get("webhook-signature"), process.env.WEBHOOK_SECRET!))) {
return res.sendStatus(400);
}
const { task, response } = JSON.parse(req.body.toString("utf8"));
await saveAnswer(task.id, task.status, response); // your storage
res.sendStatus(204);
});
If you do want bulk files in a warehouse, write deliveries to object storage from this receiver; the per-task payload is the same JSON GET /v1/async/task/{id} returns.
Comparing cost
Bright Data prices a record the same whatever the engine. This API prices each engine in credits (for example, 5 credits for a ChatGPT task and 3 for a one-page Google Search task, with add-ons listed in credits), and the dollar value of a credit depends on your plan.
A fair comparison:
- Count answers per engine per month, including every market variant.
- For Bright Data, multiply total records by the pay-as-you-go rate, or use the Scale plan if your monthly total exceeds its included records.
- For this API, sum credits per engine and pick the smallest plan that covers them on pricing.
- Add the cost of what you’d build around each: dataset-to-row mapping and snapshot handling on one side, a webhook receiver on the other.
- Check what is charged when an answer comes back incomplete. Bright Data says failed deliveries are not charged; here a failed task is not charged, and a completed one is charged even when an engine returned no sources.
Running both side by side before cutting over
Start with a parallel run: the same prompts, markets and schedule on Bright Data and on this API for one or two weeks, stored in the same table with a provider column.
- Pick 30 to 50 prompts that matter to your reports, across the engines you use on Bright Data, plus Google Search with the AI Overview.
- Keep Bright Data’s jobs unchanged. Add a task per prompt, engine and market here, with an idempotency key such as
<prompt-id>-<engine>-<market>-<day>. - Normalise both into the same rows: answer text, cited domains, market, engine, collected-at time, and whether the answer came back at all.
- Record Bright Data records that never arrived and tasks that ended
FAILEDin the same table, so gaps are visible on both sides.
What to compare at the end of the run:
- Completion rate per engine and market: answers you can use divided by answers you asked for.
- Cited domains: overlap of the domain sets per prompt. Expect differences between any two runs of the same prompt; compare the overlap between providers with the overlap between two days on one provider.
- Cost per usable answer, including anything you re-ran.
- Operational effort: time spent on snapshot handling and delivery failures versus webhook receiver issues.
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
Bright Data reports failures per request on the SERP API and per record or snapshot on its scrapers, and does not charge failed deliveries. Code built around snapshots usually treats a missing record as a gap to fill in the next job.
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
- Do you need Grok? Bright Data’s docs marked its Grok scraper unavailable on 2026-09-17; this API has a Grok endpoint.
- Do you need Gemini answers from European markets? Bright Data’s Gemini docs exclude European countries; test your markets on this API’s free credits.
- Is state-level US data required? This API’s assistants take
state. - Where do results land? Warehouse-first teams benefit from Bright Data’s storage delivery; service-first teams from per-task webhooks.
- Is proxy or dataset spend already committed? Consolidating on Bright Data can win on procurement alone.
Pitfalls
- Comparing one record to one answer blindly. Check whether a record in your Bright Data job holds one prompt and one answer, as the ChatGPT example does, before multiplying prices.
- Losing the market in the key. Put country and state in the idempotency key; otherwise a second market for the same prompt collides with the first.
- Treating
aioverview: nullas an error. Google shows AI Overviews for some queries and not others. Store the null; it is a measurement. - Polling at scale. For thousands of tasks use webhooks, not a poll loop per task; async tasks covers the queue limits.
- Parsing HTML you don’t need. Ask for
include.htmlonly when you archive snapshots; the structured fields already carry the answer.
See the quickstart, or the Google Search engine page for every result field.
Questions
Does Bright Data scrape ChatGPT, Perplexity, Gemini, Copilot and Grok?
Bright Data sells Web Scraper API scrapers for ChatGPT, Perplexity, Gemini, Microsoft Copilot and Google AI Mode. It also has a Grok product page, but its AI scrapers documentation marked Grok as currently unavailable when checked on 2026-09-17, and its Gemini docs say European countries are not available.
How much does Bright Data charge per AI answer?
Its pricing pages, checked 2026-09-17, list $1.50 per 1,000 records on pay-as-you-go and a $499 monthly Scale plan with 384,000 records, then $1.30 per 1,000. Failed deliveries are not charged.
Can I get Google AI Overviews from Bright Data's SERP API?
Yes. Its AI Overview page says adding brd_ai_overview=2 to the request increases the likelihood of receiving the AI Overview, which is parsed into the full JSON output. This API returns result.aioverview when include.aioverview is set, or null when Google showed none.
What is the main integration difference?
Bright Data's ChatGPT scraper is called through a dataset endpoint with a dataset id and a JSON array of inputs, and async jobs return a snapshot to download or deliver. This API uses one endpoint per engine, with async tasks that carry their own idempotency key and signed webhook.
Which is better for large one-off data pulls?
Bright Data's delivery to S3, GCS, Azure, Snowflake and SFTP fits bulk exports into a warehouse. This API fits recurring prompt sets where each answer is stored by your own service as it arrives.