Try it
Run a live search on any of the five engines
One real call against the API, no signup and no key. Switch the engine and run it again — the shape never changes.
Search Engines
Five Search Engines, One API Key
Every engine is billed at the same Web category rate, so pick on the data you need, not the price. Each page below goes deep on one engine.
- The richest Deep Search feature set
- Featured snippets, PAA, knowledge panel
- Sitelinks and local pack
- AI Overview on request (
include_aio) - News from $0.01/1K calls
Yahoo
- People Also Ask, answers and sources
- Related searches and inline videos
- AI Overview on request (
include_aio) - Broad image filters: size, colour, type
- 112 country codes
Bing
- People Also Ask, answers and sources
- Related searches and inline videos
- News up to ~49 articles per call
- Knowledge panel, local pack if shown
- 112 country targeting
DuckDuckGo
- The leanest response of the five
- Organic results and ads, ~10 per page
- Deepest image results (~95 at
num=100) - Unpersonalized results
- Images from $0.25/1K calls
Brave
- Independent web index
- Widest organic page: 10–20 results
- People Also Ask and related searches
- AI Overview on request (
include_aio) - Same web pricing as every engine
Engine comparison
What Actually Differs Between the Five Engines
Same price, same keys, same parameters. What changes is which blocks a result page carries and how deep a single call goes.
Deep Search feature coverage
Read this as how often a block is filled in, never as which keys you get — the keys are identical on all five. Quick Search is organic-only on every engine by design, so every row below describes GET /api/search.
| Deep Search block | Bing | Yahoo | DuckDuckGo | Brave | |
|---|---|---|---|---|---|
| Organic results per page | ~10 | ~7 | ~7 | ~10 | ~10–20 |
| Ads | Yes | Yes | Yes | Yes | Yes |
| People Also Ask (answers + sources) | Yes | Yes | Yes | No | Yes |
| Related searches | Yes | Yes | Yes | No | Yes |
| Inline videos | Yes | Yes | Yes | No | Yes |
| Featured snippet | More frequent | Where present | Where present | Where present | Where present |
| Knowledge panel | Yes | Where present | Where present | Where present | Where present |
| Local pack | Yes | Where present | Where present | No | Where present |
| Sitelinks | Yes | No | No | No | No |
AI Overview — opt in with include_aio | Yes | Always null | Yes | Always null | Yes |
Pixel positions — pixel_position (beta) | Yes | Yes | Yes | Yes | Not supported |
A block a result page did not carry comes back as null or [], never as a missing key, so the table changes what your parser finds, never what it has to handle. AI Overview and pixel positions are paid-tier features; on a free-tier call they return empty with metadata.aiOverviewUnavailable / metadata.pixelPositionUnavailable set to free_tier.
How deep one call goes, per engine
Measured on our own endpoints at the maximum num each one accepts. Every figure is a ceiling, not a promise — a short answer always carries a delivery block telling you exactly how short it is.
| Endpoint | Bing | Yahoo | DuckDuckGo | Brave | |
|---|---|---|---|---|---|
/api/search — web, num=100 | Up to 100 organic results on every engine, retrieved across up to 10 result pages in one call | ||||
/api/news — num=50 | Full set in one call | ~47–49 | ~47–49 | ~44 | ~29 |
/api/images — num=100 | ~60 | ~60 | ~60 | ~95 | ~50 |
/api/videos — num=100 | ~60 | ~59 | ~60 | ~59 | ~50 |
| Image filters: size, type, colour, aspect | Yes | Yes | Yes | Yes | No |
| Image filters: people, time | No | Yes | Yes | Time only | No |
News caps at num=50; web, images and videos cap at num=100. On engine=google the news endpoint returns its whole result set in a single call, so pages has no effect there and it is always billed as one page. language coverage is broadest on Yahoo, Bing and Brave and narrower on DuckDuckGo; it is not accepted on /api/videos. safe is not accepted on /api/images.
So which one do you call?
Rank tracking and URL lists → any engine on Quick Search
Quick Search (/api/search/quick) is organic-only on all five engines: position, title, URL, snippet and displayed URL, and nothing else to parse. It is the smallest, fastest payload and it costs the same Web rate as Deep Search, so a rank tracker never pays for blocks it throws away.
SERP-feature research → Google, then Yahoo or Bing
If the question is "what else is on this page", Google Deep Search carries the most: sitelinks, the most frequent featured snippets, knowledge panel and local pack. Yahoo and Bing carry People Also Ask with answers and source links, related searches and inline videos at the same price.
AI answers and citations → Google, Yahoo or Brave
Add include_aio=true to a paid Deep Search call and results.aiOverview comes back with the answer text and the source pages it cites. Those are the three engines that accept it; on bing and ddg the key is always null.
A second, independent read → Brave or DuckDuckGo
Brave runs its own index and returns the widest organic page of the five, 10–20 results. DuckDuckGo returns unpersonalized results and the deepest image sets we measure at num=100, about 95. Both are worth calling when you want a view that is not shaped by personalization.
Quick Start
One Request Format, Five Search Engines
A single GET with an API key header. To switch engine you change one query parameter — nothing else about the call or the response changes.
# Deep Search on Google — the full SERP object, up to 100 results curl "https://apiserpent.com/api/search?q=best+crm+software&engine=google&num=20&country=us" \ -H "X-API-Key: YOUR_API_KEY" # Same query, Brave index. Only `engine=` changed. curl "https://apiserpent.com/api/search?q=best+crm+software&engine=brave&num=20&country=us" \ -H "X-API-Key: YOUR_API_KEY" # Quick Search — organic only, built for rank tracking curl "https://apiserpent.com/api/search/quick?q=best+crm+software&engine=ddg&num=10" \ -H "X-API-Key: YOUR_API_KEY"
{
"success": true,
"query": "best crm software",
"type": "web",
"engine": "brave",
"country": "us",
"pagesRequested": 2,
"pagesScraped": 2,
"results": {
"organic": [
{
"title": "The 12 Best CRM Software Platforms of 2026",
"url": "https://example.com/best-crm",
"snippet": "We tested 30 CRMs across pricing, pipeline tools and…",
"displayedUrl": "example.com/best-crm",
"position": 1
}
],
"ads": { "top": [], "bottom": [], "totalCount": 0 },
"peopleAlsoAsk": [
{
"question": "What is the easiest CRM to use?",
"answer": "Most small teams start with a pipeline-first tool…",
"sourceUrl": "https://example.com/easy-crm",
"sourceTitle": "Choosing a CRM",
"sourceDisplay": "example.com › easy-crm"
}
],
"relatedSearches": [ { "query": "free crm software" } ],
"featuredSnippet": null,
"aiOverview": null, // opt in with include_aio=true
"knowledgePanel": null,
"localPack": [],
"richSnippets": [],
"videos": [],
"shopping": []
},
"metadata": {
"totalOrganicResults": 20,
"hasAds": false,
"hasPeopleAlsoAsk": true,
"hasRelatedSearches": true,
"hasFeaturedSnippet": false,
"hasAiOverview": false,
"hasKnowledgePanel": false,
"hasLocalPack": false
},
"meta": { "totalOrganic": 20, "requestedNum": 20, "elapsed": "8100ms" }
}
Every key above is always present. A block the result page did not contain — or that the engine you asked for does not carry — arrives as its own empty value (null for object-shaped blocks, [] for array-shaped ones), never as a missing key. That is the whole reason one parser can serve all five engines. Prefer a flat list? format=simple returns a single results array of position, title, url plus a total.
The contract
Every Parameter, Every Field, Written Once
The same parameter names work on every engine and, where the endpoint supports them, across web, news, image and video search.
Core request parameters
- q — query, up to 2048 chars
- engine — google | yahoo | bing | ddg | brave
- country — 112 codes, default us
- language — 2-letter ISO 639-1
- num — results, up to 100 (news 50)
- pages — 1–10 web, 1–5 news; num wins
- freshness — h | d | w | m | y
- safe — off | moderate | strict
- format — full | simple
Opt-in extras
- include_aio — AI Overview block
- include_video_stats — views, duration
- pixel_position — on-screen coordinates
- timeout — your own ceiling, in seconds
- timeout_ms — the same, in milliseconds
- sort — relevance | date (news: yahoo, bing)
- size, type, color, aspect (images)
- license — cc, public, share… (images)
- time — day | week | month | year (videos)
Web search result fields
- organic[].position
- organic[].title
- organic[].url
- organic[].snippet
- organic[].displayedUrl
- featuredSnippet.text
- peopleAlsoAsk[].question
- relatedSearches[].query
- ads.top[].title, ads.top[].url
News, image and video fields
- articles[].title, .url, .source
- articles[].publishedTime (YYYY-MM-DD)
- articles[].snippet, .image
- images[].thumbnail, .original
- images[].width, .height, .pageUrl
- videos[].title, .url, .duration
- videos[].views (a number), .publisher
- videos[].publishedTime, .thumbnail
- delivery.requested / .returned
Field sets are standardised across engines: the seven news keys, the eight image keys and the eleven video keys are the complete set, in the same order, whichever engine you called. Full API reference →
Reliability
You Are Told Exactly What You Got
A SERP API earns its keep on the imperfect calls. Here is what the response tells you when one comes back short.
Short answers ship, they do not fail
Every endpoint has a maximum time it will spend on a request. When that budget runs out we return the results already gathered plus a top-level delivery block: requested, returned, a machine-readable reason and a sentence safe to show a human. We never throw away the work and hand you an error instead.
Every block stands on its own
The response is never all-or-nothing. Each of the eleven result blocks carries its own value, so a page with no knowledge panel still returns organic results, People Also Ask and related searches — and the shape is identical either way. Your parser never has to branch on what a particular result page happened to carry.
Set your own deadline
Send timeout in seconds (or timeout_ms) and the call answers inside your budget rather than ours. It can only lower the endpoint's limit, never raise it, and it is clamped rather than rejected. GET /api/status publishes the live limit for every endpoint mounted on your account.
Empty is refunded, short is charged
If a search could not be completed on our side and comes back empty, the credits go back automatically. A search that completes and genuinely has no matches is a real answer and is charged. A short-but-delivered response is charged normally — and says so, in the same delivery block.
Price Comparison
Up to 833× Cheaper Than Competitors
Every price below comes from the provider's own pricing page. Watch the two right-hand columns — the cheap-looking rates often hide a queue, a credit multiplier, or no AI Overviews at all.
| Provider | Entry price /1K | Cheapest /1K | Free tier | AI Overviews |
|---|---|---|---|---|
| Serpent API (Web — all engines) | $0.60 | $0.03 | Free to start | Opt-in via include_aio (paid Deep Search — google, yahoo, brave) |
| Scrapingdog | $1.00 (LITE, $40/mo) | $0.14 ($30,000 plan) | 200 credits (~40 Google searches) | Separate request |
| Serper | $1.00 | $0.30 | 2,500 queries | No endpoint published |
| DataForSEO | $0.60 | $0.60 (~5-min queue; $2.00 synchronous) | ~$1 trial credit | Doubles the task price |
| Oxylabs | $1.00 | $0.50 (quote-only Custom+ tier; Google billed at 2× base) | 2,000 results | No published support |
| Bright Data | $1.50 | $1.30 ($499/mo Scale plan) | 5,000/mo | Not stated |
| SerpApi | $25.00 | $1.96 ($106,050 plan) | 250/mo | Sometimes a separate request |
Web from $0.03/1K calls at the Scale tier, across every engine. Volume pricing locks in with a one-time deposit — $100 for Growth (10× off), $500 for Scale (20× off). SerpApi's entry plan is $25/1K — 42× our entry rate, and up to 833× once the Scale discount is in.
Rates read from each provider's published pricing on 10 September 2026. “Cheapest” is the best rate a vendor lists, whatever it costs to reach; entry price is the lowest paid plan. Oxylabs shows its plan tiles in a rotating carousel, so one page view shows only part of the ladder: $0.50 is the Google rate on its quote-only Custom+ tier, and $0.60 on the $999-a-month Business plan is the cheapest rate on a tier with a published price. Serper is the exception — its /pricing page 404s and only the free tier is published, so its ladder comes from ColdIQ's July 2026 analysis. SerpApi · Serper · DataForSEO · Bright Data · Oxylabs · Scrapingdog
Pricing
One Rate Card, Every Engine
Prices are flat per category and identical across Google, Bing, Yahoo, DuckDuckGo and Brave. No subscription, no seat fee, and credits do not expire.
Web Search
- Quick and Deep share one price
- Up to 100 results per Deep call
- Every feature block included
- All five engines, same rate
News
- Up to 50 articles per request
- Title, URL, source, date, image
- Freshness: hour, day, week, month
- Sort by relevance or date
Images
- Thumbnail and full-size URLs
- Dimensions and source page
- Size, type, colour, aspect filters
- Licence filters where supported
Videos
- Eleven standardised video fields
- Views as a number, not a string
- Duration, publisher, published date
- Freshness filtering on every engine
Tiers
- $100 once locks Growth — 10× off
- $500 once locks Scale — 20× off
- Never downgrades as you spend down
- $10 minimum first deposit
Quick Search is billed one Web unit per request whatever your tier or balance. On Deep Search, Growth and Scale accounts — and Default accounts holding at least a $10 live balance — are billed one Web unit per request for supported page depths, so 100 results cost the same as 10. Default-tier accounts under a $10 balance are billed per result page. Results are identical either way; only the price differs.
Why Serpent API
The Most Affordable Search API for Developers
No monthly subscriptions. No complicated setups. Just low-cost search results with reliable, structured data.
Pay-As-You-Go Pricing
No monthly minimums. Web SERP from $0.03/1K calls. Credits never expire. The most cost-effective SERP solution available.
Clean JSON Responses
Organic results, People Also Ask with sources, featured snippets, knowledge panels, local packs and inline videos — already parsed, in named fields.
Unified Search API
One endpoint format for all five search engines, and one results shape. Switch between Google, Bing, Yahoo, DuckDuckGo and Brave with a single parameter.
Free Tier — no card required
Get started with free access to all five search engines. No credit card needed. The best way to test and prototype before committing to a paid plan.
Volume Discounts
Growth pricing applies with a one-time $100 deposit, Scale with a one-time $500 deposit. Web search drops to $0.03/1K at Scale and news to $0.01/1K. Ideal for high-volume workloads.
RESTful & Simple
Standard GET requests with API key auth. Works with cURL, Python, JavaScript, or any HTTP client. Integrate in minutes.
FAQ
SERP API Questions
include_aio. The only parameter that is not available everywhere is pixel_position, which Deep Search supports on google, yahoo, bing and ddg but not on brave.
GET /api/search returns one results object whose keys are identical on google, yahoo, bing, ddg and brave: organic, ads, peopleAlsoAsk, relatedSearches, featuredSnippet, aiOverview, knowledgePanel, localPack, richSnippets, videos and shopping. A block the result page did not contain comes back as its own empty value — null for object-shaped blocks, [] for array-shaped ones — never as a missing key. The metadata object follows the same rule and carries a has* boolean for each block, so you can write one parser and point it at any engine. What varies between engines is how often a given block is filled in, not which keys you get.
delivery block giving what you requested, what was returned and a plain-English note — we do not discard the work and return an error. You can lower the ceiling yourself with timeout (seconds) or timeout_ms; it can only shorten the endpoint budget, never extend it. GET /api/status publishes the live limit for every endpoint mounted on your account. On billing: an empty response that could not be completed is refunded automatically, while a short but delivered response is charged normally and says so.
include_aio=true on a Deep Search call (GET /api/search) with engine=google, engine=yahoo or engine=brave, on a paid tier. When one is available you get results.aiOverview with the answer text and the source pages it cites, and metadata.hasAiOverview is true. On engine=bing and engine=ddg the key is always null. If no AI Overview is available for the query, aiOverview comes back null and every other block still returns — the request is never all-or-nothing.
Try the Free SERP API Today
Get free API calls on a new account, usable on any endpoint. No credit card needed. Web requests start from $0.03/1K at Scale.
Try for Free

