SerpApi vs AnswerLine
SerpApi and this API both return structured Google Search, AI Overview and Google News results. SerpApi prices per search; this API prices in credits that also cover ChatGPT, Gemini, Copilot and Google AI Mode.
Coverage
| SerpApi | AnswerLine | |
|---|---|---|
| Google Search | Yes, Google Search API. | Supported by the API. |
| Google News | Yes, a separate Google News API (title, snippet, source, date, link). | Supported by the API. |
| Google AI Overview | Yes, inline in Search API results, or through a separate AI Overview API call with a page_token when Google loads it separately. Documented fields include text_blocks and references; no separate price is published. | Supported by the API. +35 credits, added once per request. |
SerpApi's pricing tiers
| Plan | Monthly | Searches | Per 1,000 searches |
|---|---|---|---|
| Free | $0 | 250 | — |
| Starter | $25 | 1,000 | $25.00 |
| Developer | $75 | 5,000 | $15.00 |
| Production | $150 | 15,000 | $10.00 |
| Big Data | $275 | 30,000 | $9.17 |
| Searcher | $725 | 100,000 | $7.25 |
| Volume | $1,475 | 250,000 | $5.90 |
| Infrastructure | $2,750 | 500,000 | $5.50 |
Price per request, this API
| Request | AnswerLine credits | AnswerLine price | SerpApi |
|---|---|---|---|
| Google Search | 35 | $0.004 | part of the per-search tiers above |
| Google Search with AI Overview | 70 | $0.007 | no separate price published |
| Google News | 35 | $0.004 | part of the per-search tiers above |
Which to pick
Pick SerpApi when you need Google verticals beyond web search, or when repeated identical searches benefit from its free cached results.
Pick this API when Google results are one part of an AI-visibility measurement that also includes the AI assistants, and you want the AI Overview in the same request as the organic results, async tasks delivered to signed webhooks, and one credit balance across engines.
What changes in the request
SerpApi is a GET with query parameters and the key as api_key (checked 2026-09-17, serpapi.com):
curl -G https://serpapi.com/search \
--data-urlencode "engine=google" \
--data-urlencode "q=best running shoes for flat feet" \
--data-urlencode "location=Austin, Texas, United States" \
--data-urlencode "gl=us" \
--data-urlencode "hl=en" \
--data-urlencode "api_key=$SERPAPI_KEY"
This API is a POST with a JSON body and a bearer token:
curl -X POST https://api.answerline.dev/v1/monitor/google \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "best running shoes for flat feet",
"country": "US",
"include": { "aioverview": { "markdown": true } }
}'
Parameter mapping:
| SerpApi | This API |
|---|---|
q |
query |
gl |
country (upper-case ISO code); gl is also accepted |
hl |
hl |
location, uule |
location or uule (one of the two) |
device |
device: desktop, mobile, ios, android on Google Search; desktop, mobile on AI Mode |
start (10 per page) |
pages: 1 to 10 pages in one request |
async=true + Search Archive API |
POST /v1/async/task + webhook or GET /v1/async/task/{id} |
api_key query parameter |
Authorization: Bearer header |
Keys in headers are less likely to end up in proxy and access logs than keys in URLs. Rotate SerpApi keys that were logged when you switch.
The AI Overview: one request instead of two paths
SerpApi’s AI Overview docs describe two cases (checked 2026-09-17, serpapi.com): the overview embedded in the search results with text_blocks and references, or a page_token that you send to the google_ai_overview engine, and its docs say the token expires within a minute. Code that tracks AI Overviews on SerpApi therefore needs both branches and has to make the second call immediately.
On this API there is one branch:
import os, requests
r = requests.post(
"https://api.answerline.dev/v1/monitor/google",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"query": "best running shoes for flat feet", "country": "US", "include": {"aioverview": {"markdown": True}}},
timeout=330,
)
aio = r.json()["result"].get("aioverview")
if aio is None:
print("No AI Overview for this query and market")
else:
print(aio["markdown"][:200])
for s in aio["sources"]:
print(s["position"], s["url"])
Structure differs from SerpApi’s text_blocks:
| SerpApi AI Overview | This API result.aioverview |
|---|---|
text_blocks[] (heading, paragraph, list, table, comparison, …) |
markdown with include.aioverview.markdown, and the plain answer text |
references[] (title, link, snippet, source, index) |
sources[] (label, url, description, position, redirectLink) |
reference_indexes on a paragraph |
citationPills[]: each inline chip’s sources, grouped by citationPillId |
| — | relatedLinks[]: a chip’s “related links” not in sources |
If your pipeline renders the overview, markdown replaces block walking. If it measures citations, citationPills tells you which sources the text cites inline, which is a stronger signal than appearing in the source rail.
People Also Ask answers can be AI Overviews too; include.paaAioverview returns them in result.peopleAlsoAsk[] with their own markdown and sources. It shares the add-on price with include.aioverview, charged once.
Moving async work
SerpApi’s async=true submits a search and returns immediately; you retrieve the result later from its Search Archive API. That is polling by design.
This API’s tasks can be polled the same way, but for scheduled rank tracking a webhook per task avoids the polling loop:
import { Client } from "@answerline/sdk";
const client = new Client({ apiKey: process.env.API_KEY!, baseUrl: "https://api.answerline.dev" });
const keywords = ["best running shoes for flat feet", "running shoes wide toe box"];
const markets = [{ country: "US" }, { country: "CA" }];
const batch = await client.createBatch(
keywords.flatMap((query, i) =>
markets.map((m) => ({
taskType: "GOOGLE" as const,
payload: { query, ...m, pages: 3, include: { aioverview: {} } },
idempotencyKey: `shoes-${i}-${m.country}-2026-09-17`,
webhook: { url: "https://your-app.com/hooks/serp" },
})),
),
);
console.log(batch.summary);
Each delivery is signed with Webhook-Signature; verify it with verifyWebhook before storing. Tasks that fail are not charged, and resubmitting a batch after a network error is safe because the idempotency keys refuse duplicates.
Throughput planning
SerpApi’s plans set searches per month and a throughput per hour (for example 1,000 per hour on Developer, per its pricing page on 2026-09-17). This API’s plans set monthly credits, how many tasks run at once, and a queue: tasks beyond your concurrency wait rather than fail, for up to 72 hours. For a nightly run, check that concurrency × (window length ÷ average task duration) covers the task count; rate limits lists concurrency per plan.
Adding the assistants
With the same key and task model, the prompt version of a keyword runs on the assistants:
curl -X POST https://api.answerline.dev/v1/async/task/batch \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '[
{ "taskType": "CHATGPT", "payload": { "prompt": "What are the best running shoes for flat feet?", "country": "US" }, "idempotencyKey": "shoes-0-chatgpt-US-2026-09-17" },
{ "taskType": "GEMINI", "payload": { "prompt": "What are the best running shoes for flat feet?", "country": "US" }, "idempotencyKey": "shoes-0-gemini-US-2026-09-17" },
{ "taskType": "COPILOT", "payload": { "prompt": "What are the best running shoes for flat feet?", "country": "US" }, "idempotencyKey": "shoes-0-copilot-US-2026-09-17" }
]'
Join assistant answers to SERP results on keyword, market and day. Prompt set design covers turning keywords into prompts.
Cost comparison
SerpApi counts one search per successful request, whatever the result size, and cached searches are free. This API counts credits per request: a Google Search task is 35 credits for the first page, 35 per extra page, and 35 once for the AI Overview; synchronous calls add 6.7, plus 35 per results page. In dollars, a one-page Google Search task is $3.50 per 1,000 on Starter and $1.27 per 1,000 on Max billed annually; pricing lists the plans in between.
- Count SerpApi searches per keyword, including extra pages (each
startoffset is a search) andgoogle_ai_overviewcalls for page tokens. - Count this API’s credits per keyword: first page, extra pages, AI Overview add-on.
- Remove searches SerpApi would serve from cache for free if your workload repeats identical searches; this API publishes no cache discount.
- Add assistant answers if you need them. SerpApi’s API list (checked 2026-09-23, serpapi.com) has no ChatGPT, Perplexity, Gemini or Grok API, so those would come from a second provider.
Overlapping SerpApi searches with tasks
Run both over the same keywords and countries for a week or two, into one table with a provider column.
- Choose keywords where you track AI Overviews, in two or three markets you report on.
- Keep SerpApi requests as they are, including
google_ai_overviewfollow-ups for page tokens. - Submit matching
GOOGLEtasks here withinclude.aioverviewand the same country, keyed by keyword, market and day. - Store organic positions, AI Overview presence and cited URLs from both sides in one table.
Then compare, per keyword and market:
- AI Overview capture: presence per keyword on each side, including SerpApi page-token follow-ups that expired.
- Citation agreement: overlap of source URLs, with two runs of one keyword on the same provider as the baseline.
- Organic position agreement for the same keyword and market.
- Searches versus credits: what the same month of work costs on each side, extra pages included.
Move keywords in market groups rather than engine by engine. An organic position series is only comparable within one location and device, so the thing to avoid is a market that changes provider halfway through a reporting month.
Failed searches and deduplication
SerpApi counts only successful searches against the plan, not cached, errored or failed ones, and the same accounting holds here: a failed task is not charged. What differs is the cache. A repeated identical search costs the same as the first one, so deduplication becomes yours to do, with idempotency keys.
A key that already exists answers 409 RESOURCE_CONFLICT instead of running the search again, which is the nearest equivalent to SerpApi’s free cached result and the reason keys should encode keyword, market and day. Authentication and errors lists the codes; rate limits explains how the queue absorbs a burst that would have exceeded SerpApi’s hourly throughput.
Choosing for a SERP pipeline
- Only Google, including verticals beyond web search? SerpApi.
- AI Overview in one request, with inline citation grouping? This API.
- ChatGPT and Gemini under the same key as Google? This API.
- Webhooks per task and idempotency? This API.
- Repeated identical searches that benefit from a free cache? SerpApi.
Details worth getting right
- Location string format. This API’s Google Search and AI Mode endpoints take
locationas comma-separatedCity,Region,Country, for exampleAustin,Texas,United States; normalize stored SerpApi locations to that form. - Pagination semantics. Replace
startloops withpages; a single task returns up to ten pages, charged for the pages fetched. - AI Overview presence as a metric. A null
aioverviewis a measurement for that query, market and moment. Store it. - Mixing cached and fresh data. If part of your history came from cached SerpApi results, mark it, so a change you see after migrating isn’t an artefact of caching.
Start with the Google Search engine page or the quickstart.
SerpApi is a trademark of its owner. AnswerLine is not affiliated with or endorsed by SerpApi.
Questions
How does SerpApi return the Google AI Overview?
Per SerpApi's docs checked 2026-09-17, the AI Overview can be embedded in Google Search API results. When Google loads it separately, the results carry a page_token instead, which you pass to the google_ai_overview engine within about a minute. This API's Google Search endpoint returns result.aioverview in the same request, or null when Google showed none.
Does SerpApi charge for failed or cached searches?
SerpApi's pricing FAQ says only successful searches count toward the monthly searches, and cached, errored and failed searches do not. This API does not charge failed requests or tasks.
Does SerpApi have async requests?
Yes. SerpApi documents an async parameter that submits a search and lets you retrieve it later from its Search Archive API. This API's async tasks can also deliver each finished result to a signed webhook, and carry idempotency keys.
Does SerpApi support Google AI Mode?
Yes. SerpApi documents a google_ai_mode engine returning text blocks, references, shopping results and reconstructed markdown. This API has a separate Google AI Mode endpoint, POST /v1/monitor/aimode, which takes a country, a location or uule, and hl.
Does SerpApi return answers from AI assistants?
SerpApi's API list, checked 2026-09-23, includes Bing Copilot, Google AI Mode, Google AI Overview, Brave AI Mode and Naver AI Overview APIs, and no ChatGPT, Perplexity, Gemini or Grok API. This API returns ChatGPT and Gemini answers from 213 countries and Microsoft Copilot answers from any country today, with Perplexity and Grok paused and coming back soon, under the same key, credits and task model as its Google endpoints.