SearchApi vs AnswerLine
SearchApi prices every engine the same, one search per successful request, and includes ChatGPT, Perplexity, Gemini and Bing Copilot next to its Google engines. This API adds Grok, country and US state targeting on the assistants, and async tasks.
Coverage
| SearchApi | AnswerLine | |
|---|---|---|
| ChatGPT | Yes, chatgpt engine: markdown, text blocks, reference links, citations and the searches ChatGPT ran. | Yes, POST /v1/monitor/chatgpt. |
| Perplexity | Yes, perplexity engine: text blocks, markdown, reference links and related questions. | Yes, POST /v1/monitor/perplexity. |
| Gemini | Yes, gemini engine: text blocks, markdown and reference links. | Yes, POST /v1/monitor/gemini. |
| Microsoft Copilot | Yes, bing_copilot engine (Bing Copilot Search): text blocks, markdown and reference links. | Yes, POST /v1/monitor/copilot. |
| Grok | Not listed on their site. | Yes, POST /v1/monitor/grok. |
| Google AI Mode | Yes, google_ai_mode engine: text blocks, markdown, reference links, local results and shopping. | Yes, POST /v1/monitor/aimode. |
| Google AI Overview | Yes, ai_overview in Google results; when Google loads it later, a second google_ai_overview request with a page_token that expires in under a minute. | Supported by the API. +2 credits, added once per request. |
| Google Search | Yes, google engine. | Supported by the API. |
| Google News | Yes, google_news engine. | Supported by the API. |
SearchApi's plans
| Plan | Monthly | Searches | Per 1,000 searches |
|---|---|---|---|
| Developer | $40 | 10,000 | $4.00 |
| Production | $100 | 35,000 | $3.00 |
| BigData | $250 | 100,000 | $2.50 |
| Scale | $500 | 250,000 | $2.00 |
| Octo 500K | $900 | 500,000 | $1.80 |
| Octo 1M | $1,500 | 1,000,000 | $1.50 |
| Octo 2M | $2,800 | 2,000,000 | $1.40 |
| Octo 5M | $5,000 | 5,000,000 | $1.00 |
Price per request
| Request | AnswerLine credits | AnswerLine price | SearchApi |
|---|---|---|---|
| ChatGPT | 5 | $0.003 | 1 search, $0.004 ($0.001) |
| Perplexity | 4 | $0.002 | 1 search, $0.004 ($0.001) |
| Gemini | 4 | $0.002 | 1 search, $0.004 ($0.001) |
| Microsoft Copilot | 5 | $0.003 | 1 search, $0.004 ($0.001) |
| Grok | 4 | $0.002 | Not listed |
| Google AI Mode | 4 | $0.002 | 1 search, $0.004 ($0.001) |
| Google AI Overview | 5 | $0.003 | 1 search, plus a google_ai_overview request when a page_token is needed |
| Google Search | 3 | $0.002 | 1 search, $0.004 ($0.001) |
| Google News | 3 | $0.002 | 1 search, $0.004 ($0.001) |
How requests, geo, billing and delivery work
| SearchApi | AnswerLine | |
|---|---|---|
| Parsing depth | Google: organic results, AI Overview, answer box, related questions, local results, ads, shopping and knowledge graph. Assistants: text blocks, markdown and reference links; ChatGPT adds citations, web results and search queries. | 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: location, uule, coordinates, gl, hl and device. The ChatGPT, Perplexity, Gemini and Bing Copilot docs list no location, country or language parameter. | 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 | Only successful searches with a 200 status are billed. | A failed request or task is not charged, and neither is a queued task you clear before it starts. |
| Async and webhooks | No async or webhook support documented; each request is a synchronous GET. | 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 SearchApi is stronger
- Bing, Amazon, YouTube, DuckDuckGo, Baidu, app stores, travel sites and ad libraries share the same key and price.
- One flat search price, down to $1 per 1,000 on its largest plan, applies to an AI answer and a Google page alike.
- An enterprise zero_retention option disables logging and storage per request.
Choose this API when the answer has to come from a specific market (every assistant here takes country and US state), when you need Grok, or when prompt sets run as async batches delivered to webhooks. The guide below compares the requests.
Which to pick
Pick SearchApi when you want one key and one flat per-search price across a very wide set of engines (Google verticals, Bing, Amazon, YouTube, app stores, ad libraries) and the AI answers you need are fine without market targeting, or when the enterprise zero-retention option is a requirement.
Pick this API when the AI answer must come from a specific market, because every assistant here takes country and a US state; when you need Grok; or when prompt sets run as async batches with idempotency keys and webhooks rather than a synchronous loop.
Why market targeting decides most evaluations
Assistants that search the web can answer differently by market: the providers, regulation and availability behind a question like “best bank for small business” are local. A visibility report that doesn’t pin the market can’t say which market it describes, and can’t be reproduced.
SearchApi’s docs for its ChatGPT, Perplexity, Gemini and Bing Copilot engines list the query, the API key and an enterprise retention flag, plus a few engine options (web search and entity expansion for ChatGPT, source connectors for Perplexity), and no location or country parameter (checked 2026-09-17, searchapi.io). Its Google engines are the opposite: location, uule, coordinates, gl and hl.
On this API, the assistants take:
country: ISO 3166-1 alpha-2, required on ChatGPT and the other assistants.state: a US state, optional.
Google Search takes country, location (City,Region,Country), uule, hl and device.
If your reporting is single-market and the provider’s default market is yours, this matters less. If you sell reports per country or per state, test it first on the free credits.
Migration: the same ChatGPT request
On SearchApi
curl -G "https://www.searchapi.io/api/v1/search" \
-H "Authorization: Bearer $SEARCHAPI_KEY" \
--data-urlencode "engine=chatgpt" \
--data-urlencode "q=best business bank account for freelancers" \
--data-urlencode "web_search=true"
Its docs list markdown, text_blocks, reference_links, cards, web_results, search_queries, citations and response_metadata in the response.
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 business bank account for freelancers",
"country": "GB",
"include": { "markdown": true }
}'
Field mapping
SearchApi chatgpt |
This API ChatGPT result |
|---|---|
markdown |
result.markdown with include.markdown |
text_blocks |
result.text (plain), result.markdown (structured) |
reference_links |
result.sources[] |
citations |
result.citationPills[] |
search_queries |
result.searchQueries with include.searchQueries |
cards |
result.entities[], result.shoppingCards[], result.map[] |
response_metadata model |
result.model |
Google and the AI Overview
On SearchApi, the Google engine includes ai_overview, but when Google loads it separately the response carries a page_token, and you call the google_ai_overview engine with it within a minute (checked 2026-09-17, searchapi.io). Your code therefore has two paths and a timing constraint.
On this API the overview is part of the one Google request:
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: "business bank account freelancers",
country: "GB",
hl: "en",
include: { aioverview: { markdown: true } },
});
if (result.aioverview) {
for (const s of result.aioverview.sources) console.log(s.position, s.url);
}
result.aioverview is either the overview or null when Google showed none.
From a synchronous loop to async batches
SearchApi’s documented requests are synchronous, and its pricing page caps use at 20% of a plan’s credits per hour. A monthly plan used for a weekly prompt run needs that spread planned.
This API has no hourly credit cap; the limits are requests per second, concurrent running tasks per plan, and a queue for the rest (rate limits). A weekly run is a set of batch calls:
import os, requests
prompts = ["best business bank account for freelancers", "Monzo or Starling for sole traders?"]
tasks = [
{
"taskType": engine,
"payload": {"prompt": p, "country": "GB"},
"idempotencyKey": f"bank-{i}-{engine}-GB-2026-W38",
"webhook": {"url": "https://your-app.com/hooks/answers"},
}
for i, p in enumerate(prompts)
for engine 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,
)
for item in r.json()["results"]:
if not item["success"]:
print(tasks[item["index"]]["idempotencyKey"], item["error"]["code"])
Use the week in the idempotency key so a rerun of the same week is refused rather than duplicated, and next week’s run gets fresh keys.
Comparing cost
SearchApi charges one search per successful request whatever the engine, with the per-search price falling on larger plans. This API charges per engine in credits (5 for ChatGPT, Copilot and Grok tasks, 4 for Gemini, 3 for a one-page Google Search plus 2 for the AI Overview, and 2 more for synchronous calls); the credit’s dollar value depends on the plan on pricing.
- Count successful answers per engine per month.
- For SearchApi, count one search per answer, plus a second request for Google queries whose AI Overview needs a page token; measure that share on your queries.
- For this API, sum credits per engine and pick the plan that covers them.
- Check SearchApi’s hourly 20% cap against how bunched your runs are.
- Price the engines both cover first, then add the rest separately.
Running both side by side before cutting over
Start with a parallel run: the same prompts, markets and schedule on SearchApi 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 (Copilot is SearchApi’s
bing_copilotengine), and Google queries with AI Overviews. - Note that SearchApi’s assistant engines take no market parameter; run this API’s side in the market you believe SearchApi defaults to, and in the markets you report on.
- Submit tasks here with webhooks, keyed by prompt, engine, market and day.
- For Google, record on SearchApi whether a
page_tokenfollow-up was needed and whether it succeeded.
What to compare at the end of the run:
- Market sensitivity: how much answers here change between markets you report on. If they change a lot, an untargeted series isn’t comparable.
- Answer and citation overlap per prompt, against day-to-day variation on one provider.
- AI Overview capture including page-token follow-ups.
- Hourly-cap impact: runs delayed by SearchApi’s 20% hourly cap versus queue wait here.
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
SearchApi bills only successful searches with a 200 status, per its pricing page, so a client written for it may retry other statuses freely; here, follow the retry rules below instead.
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
- Per-market AI answers? Needs
country/stateon the assistants: this API. - Grok? This API.
- Dozens of non-AI engines on one key? SearchApi.
- Scheduled volume without your own queue? Async tasks and webhooks here.
- Per-request zero retention? SearchApi documents it for enterprise requests.
Pitfalls
- Assuming a default market is yours. Record the market with every answer; if the provider doesn’t let you set it, record that too.
- Expired page tokens. On SearchApi, fetch the AI Overview immediately or you lose it for that search.
- Bursty schedules against an hourly cap. Spread runs, or use a provider with a queue.
- Comparing
text_blockstotext. Structure differs; compare markdown to markdown when diffing answers across providers.
Start with the quickstart or the Copilot engine page.
Questions
Which AI engines does SearchApi support?
As checked on 2026-09-17, SearchApi lists ChatGPT, Gemini, Bing Copilot and Perplexity APIs, plus Google AI Mode and Google AI Overview APIs. Grok is not listed on its site.
Can I choose the country for SearchApi's ChatGPT or Perplexity results?
The ChatGPT, Perplexity, Gemini and Bing Copilot docs checked on 2026-09-17 list no location, country or language parameter; Perplexity and Gemini answer in the language of the query. This API takes country on every engine and a US state on the assistants.
How does SearchApi return the Google AI Overview?
Its Google results include ai_overview. When Google loads the overview separately, the response carries a page_token for a second request to the google_ai_overview engine, and its docs say the token expires in less than a minute.
Does SearchApi charge for failed searches?
Its pricing page says failed requests are not billed and only successful searches with a 200 status code are charged. It also says at most 20% of a plan's credits can be used in an hour.
Does SearchApi have webhooks or async jobs?
No async or webhook support was documented on the pages checked on 2026-09-17; requests are synchronous GETs. This API offers synchronous calls and async tasks and batches with signed webhooks.