# Serper — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orthogonal.com/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

Google Search API by Serper - fast, reliable access to 12 Google search types: web search, images, videos, news, places, maps, shopping, scholar, patents, autocomplete, lens (reverse image search), and reviews. All endpoints accept POST with JSON body. Returns structured JSON results.

**Verified:** yes

## Access

**Run API:** `POST https://api.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Google Patents Search

Google Patents search - returns patent results with titles, patent numbers, inventors, assignees, filing dates, publication dates, and abstracts. Use for IP research, prior art searches, or technology landscape analysis. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /patents`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (e.g. "solar panel efficiency", "battery technology") |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `num` | number | No | Number of results (default 10) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/patents","body":{"q":"<string>","gl":"<string>","hl":"<string>","num":"<number>","page":"<number>"}}'
```

### Google Images Search

Google Images search - returns image results with titles, image URLs, thumbnail URLs, source domains, and dimensions. Use for finding images, visual research, or brand asset discovery. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /images`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en, lang_fr, lang_de) |
| `cr` | string | No | Restrict results to country (e.g. countryUS, countryGB, countryDE) |
| `num` | number | No | Number of results (default 10, max 100) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `tbs` | string | No | Time filter (qdr:h=past hour, qdr:d=past day, qdr:w=past week, qdr:m=past month, qdr:y=past year) |
| `location` | string | No | Location name for localized results (e.g. "New York, NY") |
| `safe` | string | No | Safe search: "active" to filter explicit content, "off" to disable |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/images","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","cr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","tbs":"<string>","location":"<string>","safe":"<string>"}}'
```

### Google Autocomplete

Google Autocomplete - returns search query suggestions based on a prefix. Use for keyword research, SEO, understanding search intent, or building search-ahead UIs.

`POST /autocomplete`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query prefix to get suggestions for |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `location` | string | No | Location name for localized suggestions |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/autocomplete","body":{"q":"<string>","gl":"<string>","hl":"<string>","location":"<string>"}}'
```

### Google Search

Google Search - returns organic results, knowledge graph, people also ask, related searches, and sitelinks. Use for general web queries, fact-finding, and research. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /search`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en, lang_fr, lang_de) |
| `cr` | string | No | Restrict results to country (e.g. countryUS, countryGB, countryDE) |
| `num` | number | No | Number of results (default 10, max 100) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `tbs` | string | No | Time filter (qdr:h=past hour, qdr:d=past day, qdr:w=past week, qdr:m=past month, qdr:y=past year) |
| `location` | string | No | Location name for localized results (e.g. "New York, NY") |
| `safe` | string | No | Safe search: "active" to filter explicit content, "off" to disable |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/search","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","cr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","tbs":"<string>","location":"<string>","safe":"<string>"}}'
```

### Google News Search

Google News search - returns news articles with titles, links, sources, dates, and snippets. Use for current events, press coverage, competitor monitoring, or media research. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /news`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en, lang_fr, lang_de) |
| `cr` | string | No | Restrict results to country (e.g. countryUS, countryGB, countryDE) |
| `num` | number | No | Number of results (default 10, max 100) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `tbs` | string | No | Time filter (qdr:h=past hour, qdr:d=past day, qdr:w=past week, qdr:m=past month, qdr:y=past year) |
| `location` | string | No | Location name for localized results (e.g. "New York, NY") |
| `safe` | string | No | Safe search: "active" to filter explicit content, "off" to disable |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/news","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","cr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","tbs":"<string>","location":"<string>","safe":"<string>"}}'
```

### Google Scholar Search

Google Scholar search - returns academic papers with titles, authors, publication venues, years, citation counts, links, and snippets. Use as_ylo/as_yhi to filter by publication year range. Use for academic research, literature reviews, or citation analysis. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /scholar`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (e.g. "transformer architecture", "CRISPR gene editing") |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en) |
| `num` | number | No | Number of results (default 10) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `as_ylo` | number | No | Filter results from this year onwards (e.g. 2020) |
| `as_yhi` | number | No | Filter results up to this year (e.g. 2024) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/scholar","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","as_ylo":"<number>","as_yhi":"<number>"}}'
```

### Google Videos Search

Google Videos search - returns video results with titles, links, channels, durations, dates, and platforms (YouTube, Vimeo, etc). Use for finding video content, tutorials, or media. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /videos`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en, lang_fr, lang_de) |
| `cr` | string | No | Restrict results to country (e.g. countryUS, countryGB, countryDE) |
| `num` | number | No | Number of results (default 10, max 100) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `tbs` | string | No | Time filter (qdr:h=past hour, qdr:d=past day, qdr:w=past week, qdr:m=past month, qdr:y=past year) |
| `location` | string | No | Location name for localized results (e.g. "New York, NY") |
| `safe` | string | No | Safe search: "active" to filter explicit content, "off" to disable |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/videos","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","cr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","tbs":"<string>","location":"<string>","safe":"<string>"}}'
```

### Google Maps Search

Google Maps search - returns map listings with titles, addresses, latitude/longitude coordinates, ratings, review counts, phone numbers, websites, and categories. More detailed than Places for location-based queries. Use ll parameter for precise geographic targeting. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /maps`

**Estimated cost:** $0.006

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `num` | number | No | Number of results (default 10) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `location` | string | No | Location name for localized results (e.g. "New York, NY") |
| `ll` | string | No | Latitude/longitude with zoom (e.g. "@40.7128,-74.0060,15z"). More precise than location. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/maps","body":{"q":"<string>","gl":"<string>","hl":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","location":"<string>","ll":"<string>"}}'
```

### Google Shopping Search

Google Shopping search - returns product listings with titles, prices, sellers, ratings, delivery info, and product links. Use for price comparison, product research, or e-commerce intelligence. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /shopping`

**Estimated cost:** $0.004

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en, lang_fr, lang_de) |
| `cr` | string | No | Restrict results to country (e.g. countryUS, countryGB, countryDE) |
| `num` | number | No | Number of results (default 10, max 100) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `tbs` | string | No | Time filter (qdr:h=past hour, qdr:d=past day, qdr:w=past week, qdr:m=past month, qdr:y=past year) |
| `location` | string | No | Location name for localized results (e.g. "New York, NY") |
| `safe` | string | No | Safe search: "active" to filter explicit content, "off" to disable |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/shopping","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","cr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","tbs":"<string>","location":"<string>","safe":"<string>"}}'
```

### Google Lens

Google Lens reverse image search - identify objects, find visually similar images, and get visual search results from an image URL. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /lens`

**Estimated cost:** $0.006

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Image URL to search (must be publicly accessible) |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `num` | number | No | Number of results (default 10) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/lens","body":{"url":"<string>","gl":"<string>","hl":"<string>","num":"<number>","page":"<number>"}}'
```

### Google Places Search

Google Places search - returns local businesses with names, addresses, phone numbers, ratings, review counts, hours, categories, and cids. Use for finding local businesses, restaurants, services. Returns cid values needed for the Reviews endpoint. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /places`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (e.g. "coffee shops", "pizza near me") |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `lr` | string | No | Restrict results to language (e.g. lang_en) |
| `num` | number | No | Number of results (default 10) |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `autocorrect` | boolean | No | Enable autocorrect (default true) |
| `location` | string | No | Location name for localized results (e.g. "San Francisco, CA") |
| `ll` | string | No | Latitude/longitude with zoom (e.g. "@37.7749,-122.4194,15z") |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/places","body":{"q":"<string>","gl":"<string>","hl":"<string>","lr":"<string>","num":"<number>","page":"<number>","autocorrect":"<boolean>","location":"<string>","ll":"<string>"}}'
```

### Google Reviews

Google Reviews - returns reviews for a specific business/place including review text, ratings, authors, dates, and likes. Requires a place identifier (cid, fid, or placeId) obtained from Places or Maps search results. Use sortBy to order by relevance, newest, highest, or lowest rating. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

`POST /reviews`

**Estimated cost:** $0.002

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `fid` | string | No | Feature ID of the place (from Places/Maps results). One of fid, cid, or placeId is required. |
| `cid` | string | No | CID of the place (from Places/Maps results). One of fid, cid, or placeId is required. |
| `placeId` | string | No | Google Place ID. One of fid, cid, or placeId is required. |
| `gl` | string | No | Country code (e.g. us, uk, de) |
| `hl` | string | No | Language code (e.g. en, es, fr) |
| `num` | number | No | Number of reviews to return |
| `page` | number | No | Page number for pagination For later pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response. |
| `sortBy` | string | No | Sort order: "mostRelevant" (default), "newestFirst", "highestRating", "lowestRating" |
| `topicId` | string | No | Filter reviews by topic ID (from review topics in Places results) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"serper","path":"/reviews","body":{"fid":"<string>","cid":"<string>","placeId":"<string>","gl":"<string>","hl":"<string>","num":"<number>","page":"<number>","sortBy":"<string>","topicId":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/serper
