> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Serper

The Serper connector lets your AI agent act in each user's Serper account. Each user connects their own Serper API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 13 tools.

**Authentication:** API Key
**Categories:** Search, Analytics, Marketing
**Tools:** 13: 13 read, 0 write, 0 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=SERPER)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Serper connection

   In **AgentKit > Connections**, create a Serper connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'serper'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Serper:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'serper_list_place_reviews',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "serper"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Serper:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="serper_list_place_reviews",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Serper credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'serper_autocomplete',
  toolInput: {
    q: '<q>',
  },
  connector: 'serper',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="serper_autocomplete",
    tool_input={
        "q": "<q>",
    },
    connection_name="serper",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `serper_autocomplete`

Google Autocomplete · Read-only

Get Google's autocomplete suggestions for a partial query through Serper.
Returns suggestions, each with the suggested query as value.
Use this to expand or refine a search query, or for keyword research. Use serper_search to run the search itself.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The partial query to complete, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: how to build your own
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States

Example input: `{"q":"<q>"}`

### `serper_list_place_reviews`

List Place Reviews · Read-only

List the Google reviews of one place through Serper, identified by its cid, fid or Place ID.
Returns a page of reviews (rating, date, review text and reviewer) and a nextPageToken when more reviews exist.
Use this after serper_search_places or serper_search_maps, which return each place's cid and placeId. Pass next_page_token to get the next page.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cid` (`string`, optional): Google CID of the place, from the cid field of serper_search_places or serper_search_maps. Provide cid, fid or place_id. Example: 10179360708466590899
- `fid` (`string`, optional): Google FID (feature identification number) of the place, written as two hex numbers separated by a colon. Provide cid, fid or place_id. Example: 0x89c259a61c75684f:0x79d31adb123348d2
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `next_page_token` (`string`, optional): The nextPageToken from the previous call for the same place, to get the next page of reviews. Omit for the first page.
- `place_id` (`string`, optional): Google Place ID of the place, from the placeId field of serper_search_maps. Provide cid, fid or place_id. Example: ChIJOwg_06VPwokRYv534QaPC8g
- `sort_by` (`string`, optional): Review order: mostRelevant (Google's default), newest, highestRating or lowestRating. One of: `mostRelevant`, `newest`, `highestRating`, `lowestRating`.
- `topic_id` (`string`, optional): ID of a review topic to show only reviews that mention it (for example "service" or "price"), as returned with an earlier page of reviews for the same place.

Example input: `{}`

### `serper_scrape_webpage`

Scrape Webpage · Read-only

Fetch a public webpage through Serper's scraper and get its readable content.
Returns the page text, page metadata and the credits the scrape used, plus the content as markdown when include_markdown is true.
Use this to read a page found with serper_search or another search tool. Most pages cost 2 credits; hard-to-scrape pages cost 6 or 10.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, required): Full URL of the public webpage to scrape, including https://. Example: https://en.wikipedia.org/wiki/Web_scraping
- `include_markdown` (`boolean`, optional): Set true to also get the page content as markdown (keeps headings, lists and links), in addition to plain text.

Example input: `{"url":"<url>"}`

### `serper_search`

Google Web Search · Read-only

Run a Google web search through Serper and get the results page as structured JSON.
Returns organic results (title, link, snippet, sitelinks, position) plus, when Google shows them, the knowledge graph, answer box, People Also Ask questions and related searches.
Use this for general web results. Use serper_search_news for news articles, serper_search_places for local businesses, and serper_scrape_webpage to read a result page.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: best project management software 2026
- `autocorrect` (`boolean`, optional): Whether Google may auto-correct a misspelled query. Serper autocorrects by default; set false to search the query exactly as written.
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2
- `tbs` (`string`, optional): Limit results to a recent time range (Google's tbs parameter): qdr:h past hour, qdr:d past 24 hours, qdr:w past week, qdr:m past month, qdr:y past year. Omit for any time. One of: `qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`.

Example input: `{"q":"<q>"}`

### `serper_search_by_image`

Google Lens Image Search · Read-only

Run a Google Lens reverse image search through Serper on a public image URL.
Returns Google Lens visual matches as JSON: pages that show the same or similar images, each with title, source, link and image URLs.
Use this to identify an image or find where it appears online. Use serper_search_images to find images from a text query. Costs 3 credits per call.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, required): Public URL of the image to analyse, ending in a supported format such as .jpg or .png. The image must be reachable without login. Example: https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr

Example input: `{"url":"<url>"}`

### `serper_search_images`

Google Images Search · Read-only

Search Google Images through Serper.
Returns images with title, full-size imageUrl and its width and height, thumbnailUrl, source site, domain, link to the hosting page and position.
Use this to find images by text. Use serper_search_by_image to find matches for an image you already have.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: golden gate bridge at sunset
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States
- `num` (`integer`, optional): How many images to return: 10 or 100. Serper returns 10 when omitted; 100 costs 2 credits instead of 1. One of: `10`, `100`.
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2
- `tbs` (`string`, optional): Limit results to a recent time range (Google's tbs parameter): qdr:h past hour, qdr:d past 24 hours, qdr:w past week, qdr:m past month, qdr:y past year. Omit for any time. One of: `qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`.

Example input: `{"q":"<q>"}`

### `serper_search_maps`

Google Maps Search · Read-only

Search Google Maps through Serper, around a map position or for one place by its Place ID or CID.
Returns the map position used (ll) and places with title, address, latitude, longitude, rating, ratingCount, type, types, website, phoneNumber, description, cid and placeId.
Use this for Maps listings in a specific area or to look up a known place. Use serper_search_places for a simpler local search, and serper_list_place_reviews for a place's reviews. Costs 3 credits per call.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cid` (`string`, optional): Google CID (customer identification number) of one business listing to look up, as returned in the cid field of serper_search_places or serper_search_maps results. Example: 10179360708466590899
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `ll` (`string`, optional): Map position to search around, as @latitude,longitude,zoom with a zoom level from 3z to 21z, in Google Maps URL format. Example: @40.6973709,-74.1444871,11z
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2
- `place_id` (`string`, optional): Google Place ID of one place to look up instead of searching. Example: ChIJOwg_06VPwokRYv534QaPC8g
- `q` (`string`, optional): What to search for on Google Maps. Required unless place_id or cid identifies the place. Example: shops near 5th avenue

Example input: `{}`

### `serper_search_news`

Google News Search · Read-only

Search Google News through Serper for articles matching a query.
Returns news results with title, link, snippet, source, relative date, thumbnail imageUrl and position.
Use this for recent coverage of a topic, optionally limited with tbs (for example the past 24 hours). Use serper_search for general web pages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: OpenAI funding round
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2
- `tbs` (`string`, optional): Limit results to a recent time range (Google's tbs parameter): qdr:h past hour, qdr:d past 24 hours, qdr:w past week, qdr:m past month, qdr:y past year. Omit for any time. One of: `qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`.

Example input: `{"q":"<q>"}`

### `serper_search_patents`

Google Patents Search · Read-only

Search Google Patents through Serper.
Returns patents with title, snippet, link, publicationNumber, inventor, assignee, priority, filing, grant and publication dates, language, thumbnailUrl, pdfUrl and figures.
Use this for prior-art and patent lookups. Use serper_search_scholar for academic papers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: solid state battery electrolyte
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2

Example input: `{"q":"<q>"}`

### `serper_search_places`

Google Places Search · Read-only

Search Google's local results through Serper for businesses and places matching a query.
Returns places with title, address, latitude, longitude, rating, ratingCount, category, phoneNumber, website and cid (Google's place identifier).
Use this for quick local lookups such as "coffee near Union Square". Use serper_search_maps for Google Maps results at a set map position, and serper_list_place_reviews with a place's cid for its reviews.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: coffee shops in San Francisco
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2

Example input: `{"q":"<q>"}`

### `serper_search_scholar`

Google Scholar Search · Read-only

Search Google Scholar through Serper for academic papers, theses and books.
Returns results with title, link, publicationInfo (authors, venue, year), snippet, year and citedBy count.
Use this for scholarly literature. Use serper_search_patents for patents and serper_search for general web pages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: attention is all you need
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2

Example input: `{"q":"<q>"}`

### `serper_search_shopping`

Google Shopping Search · Read-only

Search Google Shopping through Serper for products matching a query.
Returns product offers with title, source (store), link, price, delivery, imageUrl, rating, ratingCount, offers, productId and position.
Use this to compare prices and sellers for a product. Use serper_search for general web pages. Costs 2 credits per call.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: nike air max 90
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2

Example input: `{"q":"<q>"}`

### `serper_search_videos`

Google Videos Search · Read-only

Search Google Videos through Serper.
Returns videos with title, link, snippet, thumbnail imageUrl, duration, source (for example YouTube), channel, date and position.
Use this to find videos on a topic. Use serper_search for general web pages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The search query, as you would type it into Google. Google search operators such as site:, filetype: and quotes work. Example: falcon 9 launch
- `gl` (`string`, optional): Two-letter country code (Google's gl parameter, lowercase) that sets which country's Google results to return. Serper uses us when omitted. Example: gb
- `hl` (`string`, optional): Google interface language code (Google's hl parameter) for the results, usually a two-letter language code, or language-region for a few languages such as zh-cn. Serper uses en when omitted. Example: fr
- `location` (`string`, optional): Place to run the search from, as a Google location name (city, region or country, comma-separated, most specific first). Results are localized as if searched from there. Example: Austin, Texas, United States
- `page` (`integer`, optional): Results page to return, starting at 1. Each page is a separate call and costs credits again. Example: 2
- `tbs` (`string`, optional): Limit results to a recent time range (Google's tbs parameter): qdr:h past hour, qdr:d past 24 hours, qdr:w past week, qdr:m past month, qdr:y past year. Omit for any time. One of: `qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`.

Example input: `{"q":"<q>"}`

## Related

Other Search connectors ([all 51](/agentkit/connectors/?category=search)):

- [Supadata](/agentkit/connectors/supadata/): Scalekit connector, API key, 21 tools
- [Exa](/agentkit/connectors/exa/): Scalekit connector, API key, 21 tools
- [Brave Search](/agentkit/connectors/brave/): Scalekit connector, API key, 18 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
