---
title: "SERP API"
description: "Google, Bing, Naver, Baidu, Yandex and eleven more search engines, maps, app stores and Google Trends, through one set of operations and one schema."
---

> Every apinoa docs page as markdown: https://apinoa.com/llms.txt (all in one file: https://apinoa.com/llms-full.txt; this API family in one file: https://apinoa.com/docs/serp/llms.txt)

The SERP API reads search engines the way a person sees them. A results page comes back in the order it was
shown: organic results, ads, news, images, videos, "People also ask", knowledge panels, local packs and AI
Overviews. One schema covers every engine, so the code that reads Google also reads Naver.

```bash
curl "https://gateway.apinoa.com/v1/google/search?q=best+running+shoes&country=US" -H "x-api-key: $APINOA_API_KEY"
curl "https://gateway.apinoa.com/v1/naver/places?q=강남역+카페" -H "x-api-key: $APINOA_API_KEY"
curl "https://gateway.apinoa.com/v1/google-trends/explore?terms=chatgpt,gemini&country=US" -H "x-api-key: $APINOA_API_KEY"
```

## Operations

| Operation | Returns | What It Reads |
|---|---|---|
| `search` | `ResultsPage` | One results page: web (the default), `news`, `images` or `videos`, chosen with `type`. Some engines also take `type=image` with an `image` URL for a reverse-image search |
| `suggestions` | `Suggestions` | What the search box suggests for `q` |
| `places` | `PlacesPage` | Places on the map for `q`, around `near` (a place name) or `location` (`lat,lng`) |
| `place` | `Place` | One place: `id` from `places`, or its map link as `url` |
| `reviews` | `PlaceReviewsPage` | A place's reviews: `place` |

The app stores and Google Trends use the same names: `search`, `app` and `reviews` for apps, and `explore` and
`trending` for Trends.

## Which Engine Has Which

| | search | suggestions | places | place | reviews | Markets |
|---|:-:|:-:|:-:|:-:|:-:|---|
| [Google](/docs/api-reference/google) | ✓ | ✓ | ✓ | ✓ | | 10 |
| [Bing](/docs/api-reference/bing) | ✓ | ✓ | | | | 10 |
| [Yahoo](/docs/api-reference/yahoo) | ✓ | ✓ | | | | 13 |
| [DuckDuckGo](/docs/api-reference/duckduckgo) | ✓ | ✓ | | | | 14 |
| [Yandex](/docs/api-reference/yandex) | ✓ | ✓ | ✓ | ✓ | ✓ | 10 |
| [Naver](/docs/api-reference/naver) | ✓ | ✓ | ✓ | ✓ | ✓ | KR |
| [Daum](/docs/api-reference/daum) | ✓ | ✓ | | | | KR |
| [Baidu](/docs/api-reference/baidu) | ✓ | ✓ | | | | CN |
| [Sogou](/docs/api-reference/sogou) | ✓ | ✓ | | | | CN |
| [Yahoo! JAPAN](/docs/api-reference/yahoo-japan) | ✓ | ✓ | | | | JP |
| [Seznam](/docs/api-reference/seznam) | ✓ | ✓ | | | | CZ |
| [Tripadvisor](/docs/api-reference/tripadvisor) | | | ✓ | ✓ | ✓ | 15 |

| | Operations |
|---|---|
| [Google Shopping](/docs/api-reference/google-shopping) | `search` `product` `reviews`, returning the marketplace types |
| [Google Play](/docs/api-reference/google-play) · [App Store](/docs/api-reference/app-store) | `search` `app` `reviews` |
| [Google Trends](/docs/api-reference/google-trends) | `explore` `trending` |

Each engine's page lists the inputs every operation takes there.

## Inputs

One name means one thing on every engine:

| Input | Meaning |
|---|---|
| `q` | the query, search operators included |
| `type` | what to search: `web`, `news`, `images`, `videos` (each engine takes its own subset) |
| `country` | the market, as an ISO 3166 code |
| `lang` | the interface language (`en`, `pt-BR`) |
| `device` | read the `desktop` page (the default) or the `mobile` one |
| `timeRange` | only results from the past `hour`, `day`, `week`, `month` or `year` |
| `safe` | safe search, `on` or `off` |
| `near` · `location` | for `places`: a place name, or a `lat,lng` point |
| `id` · `place` | the place (or app) to read; `id` also takes its link as `url` |
| `sort` | review order |
| `limit` | results wanted. More than one page is charged per page |
| `cursor` | the next page |

An input an engine does not take is refused with `400 INVALID_PARAMS`, not ignored. You are never charged for
a page that did not do what you asked.

## What Is the Same Everywhere

- **Shapes.** Every operation returns one of the types in the
  [Response Schema](/docs/api-reference/serp/response-schema). Facts that only one engine has are in `ext`.
- **Nothing is dropped.** Every block on the page is returned, in page order, with its `rank`. A block that
  has no shared shape yet comes back as `type: "other"`.
- **Paging.** A list returns an opaque `cursor`. For the next page, call the same operation with `cursor`
  alone. No `cursor` means there is no next page.
- **Absent is not zero.** A count or rating the page does not show is left out, never reported as `0`. Times
  are ISO 8601 in UTC.
- **No results is an answer.** `outcome: "noResults"` means the engine said it found nothing. A page that
  could not be read is an error, and errors are not billed.
- **Price.** $0.0012 per unit. Most calls are one unit. `limit` above one page costs one unit per page, and
  each operation's page lists its range.

## Errors

The SERP API uses the same envelope and codes as the rest of the API. See [Errors](/docs/errors). A place or app
that does not exist returns `404 NOT_FOUND`, and a product `404 PRODUCT_NOT_FOUND`; the message names the id. A
Google Shopping product from a single store has no reviews: `404 REVIEWS_NOT_FOUND`.

## Reference

- [Response Schema](/docs/api-reference/serp/response-schema): every field of every type
- [AI Answers API](/docs/api-reference/answers): ChatGPT, Gemini, Google AI Mode and more, through one answer type
- [Errors](/docs/errors): every error code
