Oxylabs vs AnswerLine
Oxylabs' Web Scraper API has parsed sources for ChatGPT, Perplexity, Gemini, Google AI Mode and Google Search, billed per 1,000 results on monthly plans. This API adds Copilot and Grok and prices each engine in credits.
Coverage
| Oxylabs | AnswerLine | |
|---|---|---|
| ChatGPT | Yes, chatgpt source: response text, markdown, citations, search queries, shopping products and ads. | Yes, POST /v1/monitor/chatgpt. |
| Perplexity | Yes, perplexity source: answer, top sources, related queries and inline products. | Yes, POST /v1/monitor/perplexity. |
| Gemini | Yes, gemini source: response text, markdown and citations. | Yes, POST /v1/monitor/gemini. |
| Microsoft Copilot | Not in their AI targets list. | Yes, POST /v1/monitor/copilot. |
| Grok | Not in their docs. | Yes, POST /v1/monitor/grok. |
| Google AI Mode | Yes, google_ai_mode source: response text, citations and links. | Yes, POST /v1/monitor/aimode. |
| Google AI Overview | Yes, ai_overviews inside google_search results with rendering on; their docs describe this as maximizing the chance of getting one. | Supported by the API. +2 credits, added once per request. |
| Google Search | Yes, google_search source with parsing. | Supported by the API. |
| Google News | Yes, google_search with the news search context. | Supported by the API. |
Oxylabs' Web Scraper API plans
| Plan | Monthly | Results included | Google, no JS / 1K | With JS rendering / 1K |
|---|---|---|---|---|
| Free trial | $0 | Up to 2,000 | , | , |
| Micro | $49 | Up to 98,000 | $1.00 | $1.35 |
| Starter | $99 | Up to 220,000 | $0.90 | $1.30 |
| Advanced | $249 | Up to 622,500 | $0.80 | $1.25 |
Price per request
| Request | AnswerLine credits | AnswerLine price | Oxylabs |
|---|---|---|---|
| ChatGPT | 5 | $0.003 | No separate price published |
| Perplexity | 4 | $0.002 | No separate price published |
| Gemini | 4 | $0.002 | No separate price published |
| Microsoft Copilot | 5 | $0.003 | Not offered |
| Grok | 4 | $0.002 | Not offered |
| Google AI Mode | 4 | $0.002 | No separate price published; requires rendering |
| Google AI Overview | 5 | $0.003 | Requires rendering; JS-rendered results are $0.00135 |
| Google Search | 3 | $0.002 | $0.001 without JS |
| Google News | 3 | $0.002 | $0.001 without JS |
How requests, geo, billing and delivery work
| Oxylabs | AnswerLine | |
|---|---|---|
| Parsing depth | Parsed JSON per source with a parse status code; raw HTML, markdown and screenshots on request, and a custom parser for any page. | 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: geo_location as city, state, country, coordinates or criteria id, plus locale. AI sources take a country. | 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 | Results with 2xx and 4xx status are billable; 429 and 5xx are not, and faults on your side are still billed. | A failed request or task is not charged, and neither is a queued task you clear before it starts. |
| Async and webhooks | Realtime (synchronous) or Push-Pull jobs with callback_url and batches of up to 5,000 queries; results can go to S3 or GCS. The AI sources are Push-Pull only. | 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 Oxylabs is stronger
- The same plan covers 100+ pre-configured targets and any website through its universal source.
- Their product page claims 175M+ residential IPs and 20M+ mobile IPs.
- Google geo_location accepts coordinates and criteria ids, and batches of up to 5,000 jobs can be delivered to cloud storage.
Choose this API for AI visibility including Copilot and Grok, with US state targeting, synchronous or async requests on every engine, and a price stated per engine. The guide below maps an Oxylabs job to a task here.
Which to pick
Pick Oxylabs when AI answers are one of many scraping targets you already run through its Web Scraper API, when you need hyperlocal Google targeting by coordinates, batches of thousands of URLs delivered to cloud storage, or its proxy network for sites no structured API covers.
Pick this API when the job is AI visibility: prompts sent to the AI assistants, plus Google Search with the AI Overview, in chosen countries and US states, stored as documented fields. It covers Copilot and Grok, the two assistants Oxylabs’ docs don’t list.
Sources vs engines
An Oxylabs request names a source: google_search, chatgpt, perplexity, gemini, google_ai_mode, or universal for any URL. Every source shares the same job envelope: geo_location, parse, render, callback_url, storage options. Parsed output is source-specific and flagged with a parse_status_code (checked 2026-09-17 on developers.oxylabs.io).
A request here names an engine by endpoint (/v1/monitor/chatgpt) or by taskType (CHATGPT). There are no parse or render flags: every response is structured JSON, with the schema in the API reference.
What this means for a migration:
- No parse status to check. A task either completes with its parsed result or fails, uncharged.
- Sync where you want it. Oxylabs’ AI sources are Push-Pull only. Here any engine can be called synchronously for interactive features, at a small surcharge, or queued as a task.
- Geo is narrower but explicit. Oxylabs’ Google source accepts cities, states, coordinates and criteria ids; its AI sources take a country. Here the assistants take a country and a US state; Google Search takes
location(City,Region,Country),uule,hlanddevice.
Migration: a ChatGPT job with a callback
On Oxylabs
Their ChatGPT docs show a Push-Pull job with basic auth, a prompt, parsing, a country as geo_location, and a callback URL (checked 2026-09-17, developers.oxylabs.io):
curl -X POST https://data.oxylabs.io/v1/queries \
-u "$OXYLABS_USER:$OXYLABS_PASS" \
-H "Content-Type: application/json" \
-d '{
"source": "chatgpt",
"prompt": "best project management tool for construction firms",
"parse": true,
"geo_location": "United States",
"callback_url": "https://your-app.com/oxylabs-callback"
}'
The callback tells you the job is done; results are then fetched from the job’s results endpoint (type=parsed). Their docs describe an optional search flag that turns on web search for this source, off by default.
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": "CHATGPT",
"payload": {
"prompt": "best project management tool for construction firms",
"country": "US",
"include": { "markdown": true }
},
"idempotencyKey": "pm-construction-US-2026-09-17",
"webhook": { "url": "https://your-app.com/hooks/answers" }
}'
The webhook delivery carries the result itself, so there is no second fetch. Web search is forced by default; disableWebSearch: true lets ChatGPT decide on its own, and sources can then be empty.
Field mapping
Oxylabs chatgpt parsed |
This API |
|---|---|
response_text |
result.text |
markdown_text |
result.markdown with include.markdown |
citations, links |
result.sources[], result.citationPills[] |
search_queries |
result.searchQueries with include.searchQueries |
shopping_products |
result.shoppingCards[] with include.shopping |
ads |
result.ads[] with include.ads |
llm_model |
result.model |
On this API the four flags rawResponse, searchQueries, ads and shopping form one group: enabling any of them adds 2 credits once, however many you enable.
Google Search and AI Overviews
Oxylabs returns AI Overviews inside google_search results when you enable rendering; its docs describe this as maximizing the chance of getting one. Here the AI Overview is an explicit add-on:
import os, requests
r = requests.post(
"https://api.answerline.dev/v1/monitor/google",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"query": "construction project management software",
"country": "US",
"location": "Denver,Colorado,United States",
"device": "desktop",
"include": {"aioverview": {"markdown": True}},
},
timeout=330,
)
result = r.json()["result"]
aio = result.get("aioverview")
print("AI Overview shown" if aio else "No AI Overview", len(result["organicResults"]))
aioverview is null when Google didn’t show one. When it is present, sources holds the source rail and citationPills the inline chips, which lets you separate “cited in the answer text” from “listed in the rail”.
Batches and throughput
Oxylabs’ batch endpoint takes up to 5,000 queries per call. This API’s batch takes up to 500 tasks per call, and each task is admitted on its own: an overflowing queue rejects the whole batch with 429 QUEUE_LIMIT_EXCEEDED, otherwise items fail individually. A 5,000-prompt run is ten batch calls with the same idempotency key scheme.
How many tasks run at once is set by your plan’s concurrency. Tasks wait in your queue for a free slot; GET /v1/async/status shows queued and processing counts. See rate limits.
Cost comparison approach
Oxylabs charges per result, with the rate depending on target and rendering, on monthly plans with an included result count. The pricing page lists no separate rate for AI sources. This API charges credits per engine; ChatGPT and Copilot tasks are 5 credits, Grok and Gemini 4, Google Search 3 plus add-ons.
- Ask Oxylabs which rate applies to the AI sources you use, since the pricing page does not say.
- Count answers per engine and per market.
- Account for billing rules: Oxylabs bills 4xx results as successful; here failed tasks are free.
- Compare the cost of the results you can use, not results returned. An Oxylabs result with a parse failure, or a Google result without the AI Overview you needed, costs the same as a good one.
Running both side by side before cutting over
Start with a parallel run: the same prompts, markets and schedule on Oxylabs and on this API for one or two weeks, stored in the same table with a provider column.
- Choose prompts for the assistants both sides cover, plus Google Search queries where you track AI Overviews.
- Keep the Oxylabs Push-Pull jobs as they are, with the same
geo_locationcountries. - Submit matching tasks here with
countryset to the same country and a webhook per task. - Write both into one table: provider, engine, market, prompt, answer text, cited domains, parse status on Oxylabs, task status here.
What to compare at the end of the run:
- Usable-result rate: Oxylabs results with a successful parse status versus
COMPLETEDtasks here. - AI Overview presence on the same Google queries, market and device.
- Cited domains per prompt, compared against day-to-day variation on one provider.
- Billing: what you paid for results you couldn’t use on each side, given that Oxylabs bills 4xx results.
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
Oxylabs reports job status (pending, done, faulted) and a parse status code per result, bills 2xx and 4xx results and not 429 or 5xx, per its billing 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
- Copilot or Grok needed? Not in Oxylabs’ docs; covered here.
- Synchronous AI answers? Only possible here.
- Coordinates or Google criteria ids? Only on Oxylabs; here use
locationoruule. - Non-AI scraping on the same contract? Oxylabs.
- Per-task webhooks with signatures and idempotency? This API.
Pitfalls
- Keeping the two-step fetch. Oxylabs callbacks announce completion; deliveries here carry the data. Remove the results fetch or you’ll call an endpoint that doesn’t exist.
- Free-text geo. Oxylabs warns that an unrecognised Google
geo_locationis not rejected. Herecountryis an ISO 3166-1 alpha-2 code; list the codes an engine supports withGET /v1/countriesonce and cache them. - Prompt length. Oxylabs documents a 4,000-character limit for its ChatGPT source. Keep prompts to what a user would type; long pasted context measures something else.
- Retry storms. Don’t resubmit a task that is still
QUEUEDorPROCESSING. OnlyCOMPLETEDandFAILEDare final, and a repeated idempotency key answers409anyway.
Start with the quickstart or the Copilot engine page.
Questions
Which AI assistants does Oxylabs' Web Scraper API support?
As checked on 2026-09-17, its docs list chatgpt, perplexity and gemini sources under LLMs and AI, plus a google_ai_mode source and AI Overviews inside google_search. No Copilot or Grok source was found.
Can I call Oxylabs' ChatGPT source synchronously?
No. Oxylabs' docs say Realtime and Proxy Endpoint are not available for the AI assistant sources, so they run as Push-Pull jobs. This API accepts every engine as a synchronous monitor call or as an async task.
How does Oxylabs bill failed results?
Its billing docs, checked 2026-09-17, count results with 2xx and 4xx status codes as successful and billable, do not bill 429 and 5xx, and bill faults on the client side. This API does not charge a failed request or task.
Is there a separate Oxylabs price for ChatGPT or Perplexity results?
The pricing page checked on 2026-09-17 lists prices for Google, Amazon, other targets and JavaScript rendering, but no separate price for the AI assistant sources.
What do I change to migrate an Oxylabs Push-Pull job?
Replace the job POST with POST /v1/async/task or /v1/async/task/batch, move source-specific fields into payload, replace callback_url with webhook.url, and replace geo_location with country and, for US markets, state.