# Keyword Search Volume Checker & API: Bulk Volume & KD (`s_actors/keyword-search-volume`) Actor

Bulk keyword search volume checker: monthly Google search volume from Ahrefs for a list of keywords, plus Keyword Difficulty (KD), backlinks needed to rank, related keywords and the top SERP pages. 181 countries. Tracks volume and KD changes. Works on the free Apify plan.

- **URL**: https://apify.com/s_actors/keyword-search-volume.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** SEO tools, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.99 / 1,000 keyword checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Keyword Search Volume Checker & API: Bulk Volume & KD

Check the **monthly Google search volume** of a whole **keyword list** at once, with the **Keyword Difficulty (KD 0-100)**, **backlinks needed to rank**, **related keywords with their volume** and the **top-ranking pages** for every keyword. Data from **Ahrefs**, **181 countries**. Turn on the **tracker** to see how **volume and KD change** from month to month.

```json
{ "keywords": ["standing desk", "running shoes", "crm for small business"], "country": "us" }
```

No Ahrefs or Google Ads account, no API key, no batch fee. **Works on the free Apify plan.** Use it as a **bulk keyword search volume checker**, a **keyword volume and difficulty checker** or a **keyword search volume API** for keyword research, content plans, programmatic SEO and client reports.

#### What you get

One row per keyword. Real results, 24 October 2026:

| keyword | country | search volume | KD | difficulty | ref. domains to rank |
|---|---|---|---|---|---|
| keyword research | us | 816,000 | 88 | Super hard | 619 |
| seo tools | us | 319,000 | 78 | Super hard | 310 |
| standing desk | us | 152,000 | 52 | Hard | 91 |
| how to make sourdough bread | us | 43,000 | 7 | Easy | 8 |
| vegan protein powder | us | 22,000 | 36 | Hard | 47 |
| best running shoes for flat feet | us | 17,000 | 5 | Easy | 6 |
| crm for small business | us | 1K-10K (range) | 51 | Hard | 88 |
| plumber london | us | 450 | 0 | Easy | 0 |

Same keywords in Germany: `seo tools` 31,000 (KD 15), `standing desk` 1,500 (KD 20).

`relatedKeywords` of `crm for small business`: hubspot crm 23,000, best crm for small business 4,700, small business crm 1,800.

| Field | Description |
|---|---|
| `keyword`, `country` | The keyword and the search market |
| `searchVolume` | Ahrefs' average monthly Google searches in the country |
| `searchVolumeRange`, `volumeSource` | Ahrefs' volume range (`0-100`, `100-1K`, `1K-10K`, `10K-100K`, `100K-1M`, `1M-10M`, `10M+`) for every keyword, handy for grouping; `exact` = `searchVolume` is filled, `range` = Ahrefs shows only the range for this keyword |
| `keywordDifficulty`, `difficultyLevel` | Ahrefs KD 0-100 and its scale: Easy (0-10), Medium (11-30), Hard (31-70), Super hard (71-100) |
| `referringDomainsToRank` | About how many websites must link to a page to reach the top 10 |
| `topPageTraffic` | Monthly organic traffic of the strongest top-3 page: what ranking for this keyword can bring |
| `relatedKeywords` | Main keywords of the top-3 pages that differ from yours, with their exact volume: close variants worth a look |
| `serpFeatures` | SERP features: `ai_overview`, `questions`, `organic_shopping`, `videos`, `top_stories`... |
| `topResults` | Top Google results: position, URL, title; for the first 3 also DR, UR, referring domains, backlinks, organic traffic, ranking keywords, top keyword and its volume |
| `searchVolumeChange`, `keywordDifficultyChange` | Tracker on: change since the previous run |
| `dataUpdatedAt`, `checkedAt` | When Ahrefs last updated the keyword, time of the run |
| `note`, `error` | Unknown keyword or failed check message |

Views: **Search volume** (the main table), **SERP** (features and top pages), **Changes** (tracker). The **KEYWORDS** record (Storage → Key-value store) has one short summary per keyword.

#### How it works

| Step | What happens |
|---|---|
| 1. Live check | Each keyword is checked live in **Ahrefs' own free Keyword Difficulty Checker**. The Actor passes the human check itself, so there is no captcha-solving fee |
| 2. Volume | The exact volume is the one Ahrefs shows for a top page whose main keyword is yours: about 9 of 10 real keywords. For the rest, the Actor asks Ahrefs' free Keyword Generator for the keyword's volume range (no extra charge) |
| 3. Tracker | With **Track changes** on, the volume and KD of each keyword are remembered under the tracker name and compared on the next run |

#### Why this Actor

| | This Actor | Google Ads Keyword Planner actors |
|---|---|---|
| Search volume | Ahrefs' monthly volume (range for ~1 in 10) | Keyword Planner average |
| Keyword Difficulty, backlinks needed, top pages | Yes, in the same row | Rarely |
| Related keywords from the SERP | Yes, with volume | Ideas mode, separate |
| Price for 10 keywords | ~$0.11 | $0.12-0.70 (often a fee per batch) |
| Unknown keywords | Free | Often charged |
| Volume and KD change tracker | Yes | No |
| CPC and 12-month history | No | Yes |

Need CPC for ad budgets? A Keyword Planner actor fits better. Need to know **how many people search and whether you can rank**? This one gives both in one row.

#### Find keywords you can rank for

1. Paste your keyword list (up to 1,000) into **Keywords** and pick the country.
2. Open the **Search volume** view, sort by `searchVolume`.
3. Keep keywords with a high volume and a low `keywordDifficulty`: they need the fewest backlinks (`referringDomainsToRank`). Check `relatedKeywords` for variants with more volume.

Schedule it monthly with **Track changes between runs** to see which keywords are growing (`searchVolumeChange`).

#### Pricing

Pay per event:

| Event | Free / Starter | Scale | Business |
|---|---|---|---|
| Keyword checked (search volume, KD, backlinks needed, related keywords and SERP of one keyword) | $0.00999 | $0.00899 | $0.00799 |
| Run start (per GB of memory) | $0.003 | $0.003 | $0.003 |

Examples on the Free plan, default 2 GB memory:

| Run | Cost |
|---|---|
| 10 keywords | $0.006 + 10 × $0.00999 = ~$0.106 |
| 100 keywords | $0.006 + 100 × $0.00999 = ~$1.00 |
| 1,000 keywords (4 GB) | $0.012 + 1,000 × $0.00999 = ~$10.00 |

A keyword Ahrefs does not know and a failed live check are free; duplicates are checked once. Set a maximum cost per run in Console and the Actor stops at it.

#### Speed and memory

Checks run in a browser: 1 at a time with the default 2 GB (3-5 keywords a minute), 2 with 3 GB, 6 with 4 GB. The price per keyword is the same; more memory only adds the run start fee per GB. For lists of several hundred keywords choose 4 GB. Rows are saved as they come, so a run stopped by its timeout keeps every keyword checked so far.

#### Other Ahrefs tools

| Actor | What it does |
| --- | --- |
| [Ahrefs Keyword Generator & API](https://apify.com/s_actors/ahrefs-keyword-generator) | Keyword ideas and questions with volume and difficulty for many seeds, exact KD, search volume and SERP for keyword lists, new ideas tracker |
| [Ahrefs DR Checker & API](https://apify.com/s_actors/ahrefs-dr-checker) | Bulk Domain Rating, referring domains, organic traffic and traffic value for thousands of domains, 12-month history, DR and traffic change tracker |
| [Ahrefs Backlink Checker & API](https://apify.com/s_actors/ahrefs-backlink-checker) | Top backlinks with anchors and linking DR, total backlinks and referring domains for many domains or exact pages, new backlinks tracker |
| [Ahrefs Traffic Checker & API](https://apify.com/s_actors/ahrefs-traffic-checker) | Organic traffic, traffic value, top pages, countries and keywords for websites, folders or single pages, by country, traffic change tracker |
| [Ahrefs SEO Checker & API](https://apify.com/s_actors/ahrefs-seo-checker) | All in one: DR, backlinks with the top 20 links, organic traffic, top pages, competitors and keyword difficulty for domains, URLs and keywords in one run, change tracker |

#### FAQ

**Where does the search volume come from?** From Ahrefs' free keyword tools at the time of the run: Ahrefs' estimate of average monthly Google searches in the chosen country. It can differ from Google Keyword Planner, which rounds into wide buckets for accounts without ad spend.

**Why is the volume a range for some keywords?** Ahrefs' free tools show the exact number when a top-3 page has your keyword as its main keyword, which is the usual case for real queries. Otherwise the Actor returns Ahrefs' range (`1K-10K`) and close variants with exact volume in `relatedKeywords`.

**How often does the volume change?** Ahrefs refreshes volumes about once a month (`dataUpdatedAt`). A monthly schedule with the tracker is enough.

**Does it give CPC or search trends by month?** No: Ahrefs' free tools do not show them.

**Bing, YouTube or Amazon keywords?** Ahrefs' free YouTube, Bing and Amazon keyword tools are under maintenance (October 2026): this Actor gives Google volumes.

**Is this the official Ahrefs API?** No. The official Ahrefs API needs a paid Ahrefs plan with API units. This Actor reads the same public data Ahrefs shows in its free tools, for any number of keywords, without an Ahrefs account.

#### Use with the API and AI agents

Call the Actor from the [Apify API](https://docs.apify.com/api/v2), Python or JavaScript clients, Make, Zapier, n8n, or as a tool for AI agents through the [Apify MCP server](https://mcp.apify.com). Input is one JSON object, output is one JSON row per keyword.

# Actor input Schema

## `keywords` (type: `array`):

Keywords to check the search volume of. One per line, up to 1,000 per run; duplicates are checked once.

## `country` (type: `string`):

Search market of the volume, difficulty and SERP (Google in that country).

## `volumeRangeFallback` (type: `boolean`):

For the few keywords where Ahrefs shows no exact volume, get the volume range from the Ahrefs Keyword Generator (e.g. "1K-10K"). One more browser check, no extra charge.

## `trackChanges` (type: `boolean`):

Remember the volume and KD of each keyword: rows get searchVolumeChange and keywordDifficultyChange since the previous run with the same tracker name. Schedule the Actor monthly to see which keywords grow.

## `onlyChanged` (type: `boolean`):

With tracking on: the table lists only keywords whose volume or KD changed since the previous run. The first run only remembers.

## `monitorName` (type: `string`):

Separate trackers for separate lists, e.g. "blog" and "shop".

## `debugLog` (type: `boolean`):

Log every browser check attempt.

## Actor input object example

```json
{
  "keywords": [
    "standing desk",
    "running shoes"
  ],
  "country": "us",
  "volumeRangeFallback": true,
  "trackChanges": false,
  "onlyChanged": false,
  "monitorName": "default",
  "debugLog": false
}
```

# Actor output Schema

## `volume` (type: `string`):

Monthly search volume (or range), KD, referring domains to rank, related keywords.

## `serp` (type: `string`):

SERP features and the top results with DR, traffic and top keyword of each page.

## `keywords` (type: `string`):

One entry per keyword: volume, KD and, with tracking, their changes.

## `all` (type: `string`):

Every field, including DR, traffic and top keyword of each top SERP page.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "standing desk",
        "running shoes"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/keyword-search-volume").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keywords": [
        "standing desk",
        "running shoes",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("s_actors/keyword-search-volume").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "standing desk",
    "running shoes"
  ]
}' |
apify call s_actors/keyword-search-volume --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/keyword-search-volume"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/OAEaPcOsqvC6LMlGJ/builds/9eTNjeRGcV7biIqWz/openapi.json
