← Back to Plugins
Integration

Serpkite

SerpKite By SerpKite 👁 17 views ▲ 0 votes

SerpKite for OpenClaw: Google web search provider plus serpkite_search and serpkite_webpage tools

Homepage GitHub

Install

npm install
npm

README

# SerpKite plugin for OpenClaw

Adds [SerpKite](https://serpkite.com) to [OpenClaw](https://github.com/openclaw/openclaw):

- a `serpkite` provider for OpenClaw's built-in `web_search` tool (Google results), and
- two agent tools: `serpkite_search` (Google search with more options) and
  `serpkite_webpage` (a public page or PDF as clean Markdown).

SerpKite is a Google search API built for agents. New accounts get 2,500 credits at
signup and 1,000 free credits every month. A search costs 1 credit and a page read
costs 1 credit.

## Install

Requires OpenClaw 2026.10.10 or later.

```bash
openclaw plugins install npm:@serpkite/openclaw-plugin
```

The `npm:` prefix installs from npm. Without it, OpenClaw looks up scoped package
names on ClawHub. In a noninteractive shell, add `--force` (and
`--accept-capabilities` if OpenClaw asks for capability consent) after you have
reviewed the package.

## Get an API key

Create a key at <https://app.serpkite.com/keys>. Keys start with `skt_live_`.

## Configure

Set the key in the Gateway environment:

```bash
export SERPKITE_API_KEY=skt_live_...
```

or in the OpenClaw config, and select SerpKite as the `web_search` provider:

```json5
{
  plugins: {
    entries: {
      serpkite: {
        enabled: true,
        config: {
          webSearch: {
            apiKey: "skt_live_...", // optional if SERPKITE_API_KEY is set; SecretRefs work too
            // baseUrl: "https://api.serpkite.com", // optional override
          },
        },
      },
    },
  },
  tools: {
    web: {
      search: {
        provider: "serpkite",
      },
    },
  },
}
```

You can also pick SerpKite in `openclaw configure --section web`.

The key is resolved from `plugins.entries.serpkite.config.webSearch.apiKey` first,
then `SERPKITE_API_KEY`. The base URL comes from `webSearch.baseUrl`, then
`SERPKITE_BASE_URL`, then `https://api.serpkite.com`.

Check it works:

```bash
openclaw infer web search --query "openclaw plugins" --json
```

## What the agent gets

### `web_search` (provider `serpkite`)

| Parameter     | Description                                          |
| ------------- | ---------------------------------------------------- |
| `query`       | Search query (required).                             |
| `count`       | Results to return, 1-10.                             |
| `country`     | 2-letter country code, default `us`.                 |
| `language`    | Interface language, e.g. `en`, `de`, `pt-BR`.        |
| `freshness`   | `hour`, `day`, `week`, `month` or `year`.            |
| `date_after`  | Only results published on or after `YYYY-MM-DD`.     |
| `date_before` | Only results published on or before `YYYY-MM-DD`.    |

Each search fetches one page of 10 results for 1 credit.

### `serpkite_search`

Everything above (`time` instead of `freshness`, `start_date`/`end_date` instead of
`date_after`/`date_before`), plus:

| Parameter         | Description                                                                 |
| ----------------- | --------------------------------------------------------------------------- |
| `num`             | 10 (default), 20, 30, 50 or 100. 1 credit per 10 results; 100 costs 7.      |
| `include_domains` | Up to 20 domains, path prefixes (`github.com/org`) or TLDs (`.gov`) to keep. |
| `exclude_domains` | Up to 20 sources to drop.                                                   |

### `serpkite_webpage`

| Parameter   | Description                                              |
| ----------- | -------------------------------------------------------- |
| `url`       | Public http(s) URL of an HTML page or PDF (required).    |
| `country`   | Fetch the page as seen from this country.                |
| `max_chars` | Truncate the Markdown to this length (default 50,000).   |

1 credit per page. Pages that need JavaScript are rendered by SerpKite.

## Caching and errors

Results are cached in memory for `tools.web.search.cacheTtlMinutes` (default 15;
`0` turns the cache off). The cache is keyed by a hash of the API key, so
different keys never share results.

API errors keep SerpKite's status, code and `request_id`:

| Status | Meaning                                                          |
| ------ | ---------------------------------------------------------------- |
| 401    | Missing, invalid or revoked key.                                 |
| 402    | Out of credits.                                                  |
| 429    | Rate limited. Retry later.                                       |
| 503    | Google or the page could not be fetched. Not billed; retry.      |

## Development

```bash
npm install
npm run typecheck
npm test
npm run build
SERPKITE_API_KEY=skt_live_... npm run test:live   # spends 2 credits
```

To try a local build in OpenClaw:

```bash
npm pack
openclaw plugins install npm-pack:./serpkite-openclaw-plugin-0.1.0.tgz --force
openclaw plugins inspect serpkite --runtime --json
```

Releases are published to npm from GitHub Actions with npm trusted publishing
(OIDC) and provenance when a `v*` tag is pushed.

## License

MIT
integration

Comments

Sign in to leave a comment

Loading comments...