# Bulk Keyword Search Volume, CPC, Difficulty & Intent (`reliable-feeds/keyword-search-volume`) Actor

Bulk Google keyword search volume, CPC, competition, keyword difficulty, search intent and 12-month trends for up to 10,000 keywords in 26 countries. No Google Ads account or SEO subscription. $3 per 1,000 keywords with data + $0.02 per run; keywords with no data are free.

- **URL**: https://apify.com/reliable-feeds/keyword-search-volume.md
- **Developed by:** [Reliable Feeds](https://apify.com/reliable-feeds) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 keyword with data

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### What does Keyword Search Volume do?

Paste up to 10,000 keywords and get back **monthly Google search volume, CPC, competition, keyword difficulty, search intent and 3- and 12-month trends**, with 12 months of history, in 26 countries. No Google Ads account, no Keyword Planner ranges, no SEO subscription.

**You only pay for keywords that come back with data.** Keywords with no data, duplicates and keyword ideas are free.

Use it as a pay-as-you-go alternative to Google Keyword Planner, Ahrefs or Semrush when you just need the keyword numbers.

### Features

- 📦 **Bulk:** up to 10,000 keywords per run, sorted by search volume
- 📈 **Full metrics:** search volume, CPC, top-of-page bid range, competition (0–1 and LOW / MEDIUM / HIGH), keyword difficulty (0–100), search intent
- 📊 **Trends:** % change over 3 and 12 months, plus 12 months of history
- 💡 **Keyword ideas mode:** turns up to 100 seed keywords into related Google searches (alphabet and questions), all with metrics
- 🔎 **Filters:** minimum monthly searches; hide keywords without data
- 🛡️ **Budget-safe:** set a maximum cost per run and it only looks up what that budget covers
- 🌍 **26 countries:** US, UK, Canada, Australia, Germany, France, Spain, Italy, Netherlands, India, Brazil and more (full list in the FAQ)

### Who uses it

- **SEO and content teams:** pick topics worth writing about, and skip the ones too hard to rank for.
- **PPC managers:** check volumes and CPCs before building campaigns.
- **Agencies:** keyword research for many clients without another seat licence.
- **AI agents and automations:** a predictable keyword data tool for workflows and agents, through the API or the Apify MCP server.

> Want more ideas first? [Keyword Suggestions](https://apify.com/reliable-feeds/autocomplete-keyword-ideas) pulls them from Google, YouTube, Bing and Amazon autocomplete.

### How to use it

1. Paste your keywords, one per line.
2. Pick a country.
3. Optional: switch on **Find keyword ideas** to add related searches from Google autocomplete.
4. Click **Start**. Results are sorted by search volume. Download them as CSV, Excel or JSON, or send them to Google Sheets, Make, Zapier or n8n.

#### Example input

```json
{
  "keywords": ["standing desk", "fire alarm"],
  "country": "gb",
  "findIdeas": true,
  "ideaExpansions": ["alphabet", "questions"],
  "maxKeywords": 500,
  "minSearchVolume": 10
}
```

#### Use it from AI agents (MCP)

This Actor works through the [Apify MCP server](https://apify.com/apify/actors-mcp-server). Ask your agent things like:

- *"Get UK search volume and CPC for these 50 keywords."*
- *"Find question keywords about electric bikes with at least 100 searches a month."*
- *"Find UK keywords about standing desks with over 500 searches a month and difficulty under 30."*
- *"Which of these 200 keywords have commercial or transactional intent in Germany?"*

Input is a plain list of keywords, and the output is flat JSON with stable field names.

### Output

One row per keyword, highest search volume first.

**Example: UK, "standing desk" with ideas on (test run, 17 Oct 2026).** 300 keywords found, 254 with data, in 4 seconds. The top rows:

| Keyword | Monthly searches | CPC (USD) | Difficulty | Intent |
|---|---|---|---|---|
| standing desk | 33,100 | 3.40 | 19 | transactional |
| standing desk converter | 3,600 | 1.17 | 0 | transactional |
| standing desk uk | 1,900 | 5.08 | 32 | navigational |
| standing desk benefits | 1,000 | 2.02 | 26 | commercial |
| standing desk best | 1,000 | 6.48 | 1 | informational |

The same top row as JSON:

```json
{
  "keyword": "standing desk",
  "hasData": true,
  "searchVolume": 33100,
  "cpc": 3.4,
  "competitionLevel": "HIGH",
  "keywordDifficulty": 19,
  "intent": "transactional",
  "trend3mPct": 22,
  "trend12mPct": 0,
  "isQuestion": false,
  "wordCount": 2,
  "origin": "input",
  "seedKeyword": null,
  "country": "gb",
  "language": "en"
}
```

Every row also includes `competition` (0–1), `lowTopOfPageBid` / `highTopOfPageBid`, `secondaryIntents` and `monthlySearches` (12 months of history). Use the **All fields** view to see them.

| Field | Meaning |
|---|---|
| `searchVolume` | Average monthly Google searches |
| `cpc` | Average cost per click in Google Ads, USD |
| `competition` / `competitionLevel` | Advertiser competition, 0–1 and LOW / MEDIUM / HIGH |
| `keywordDifficulty` | How hard it is to rank in the top 10 organically, 0–100 |
| `intent` | Main search intent |
| `trend3mPct` / `trend12mPct` | % change in searches over 3 and 12 months |
| `monthlySearches` | Search volume for each of the last 12 months |
| `origin` | `input` (your keyword) or `autocomplete` (an idea) |
| `hasData` | `false` when there's no search data for that keyword in that country (not charged) |

A run summary (keywords looked up, with data, charged and skipped) is saved to the key-value store as `RUN_SUMMARY`.

### How much does it cost?

Pay per event, no subscription:

- **$0.02** per run (start)
- **$0.003** per keyword returned **with** data ($3 per 1,000)

Keywords with no data, duplicates, keyword ideas and keywords left out by your minimum-search filter are **free**. In our tests, 85–97% of normal keywords and about 54% of question phrases had data.

| You submit | Expected cost (about 90% with data) | Maximum (all with data) |
|---|---|---|
| 10 keywords | about $0.05 | $0.05 |
| 100 keywords | about $0.29 | $0.32 |
| 1,000 keywords | about $2.72 | $3.02 |
| 10,000 keywords | about $27 | $30.02 |

Set a **maximum cost per run** and the Actor only looks up as many keywords as that budget covers. If the limit is reached, the remaining keywords are left out and the run summary says so.

### Data and accuracy

Metrics come from [DataForSEO](https://dataforseo.com)'s keyword database (DataForSEO Labs), which is based on Google Ads Keyword Planner data and updated monthly. Search volumes are estimates, so treat them as a guide to relative demand rather than exact counts. Very new or very rare searches often have no data, and figures for brand-new keywords can lag behind Google's own monthly update.

### FAQ

**Is this the same as Google Keyword Planner?** It uses the same kind of data, without a Google Ads account, and adds keyword difficulty, intent and trends. You get a single monthly average for each keyword rather than a broad range.

**Where does the data come from?** From DataForSEO, a specialist SEO data provider. You don't need a DataForSEO account or top-up: you pay per keyword here.

**Which countries are supported?** United States, United Kingdom, Canada, Australia, Ireland, New Zealand, India, Singapore, South Africa, Germany, Austria, Switzerland, France, Belgium, Netherlands, Spain, Mexico, Italy, Brazil, Portugal, Sweden, Denmark, Norway, Finland, Poland and Japan.

**How many keywords can I check?** Up to 10,000 per run. With **Find keyword ideas** on, use up to 100 seed keywords.

**Is any personal data collected?** No. Keyword metrics are aggregated, anonymous search statistics.

**Something wrong or missing?** Open an issue on the Issues tab and it will be looked at.

# Actor input Schema

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

One keyword per line. Get search volume, CPC, competition, difficulty, intent and trend for each. Up to 10,000 per run.

## `findIdeas` (type: `boolean`):

Treat your keywords as seeds: find related searches from Google autocomplete and get metrics for all of them. Up to 100 seeds.

## `ideaExpansions` (type: `array`):

Only used when 'Find keyword ideas' is on. Alphabet adds 'keyword a' to 'keyword z'. Questions finds 'how / what / why...' searches.

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

Search data for this country.

## `language` (type: `string`):

Two-letter code, e.g. en, de, fr. Leave empty to use the country's main language.

## `maxKeywords` (type: `integer`):

The most keywords to look up in one run (including ideas). You only pay for keywords that come back with data.

## `minSearchVolume` (type: `integer`):

Leave out keywords with fewer monthly searches than this. Left-out keywords are not charged.

## `includeNoData` (type: `boolean`):

Also list keywords with no search data (free), so you can see what was checked.

## Actor input object example

```json
{
  "keywords": [
    "standing desk",
    "fire alarm"
  ],
  "findIdeas": false,
  "ideaExpansions": [
    "alphabet",
    "questions"
  ],
  "country": "us",
  "maxKeywords": 1000,
  "minSearchVolume": 0,
  "includeNoData": true
}
```

# Actor output Schema

## `keywordMetrics` (type: `string`):

Search volume, CPC, competition, difficulty, intent, trends and monthly history per keyword.

## `allFields` (type: `string`):

Every field, including 12 months of search volume.

## `runSummary` (type: `string`):

Keywords looked up, with data, charged and skipped.

# 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",
        "fire alarm"
    ],
    "country": "us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("reliable-feeds/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",
        "fire alarm",
    ],
    "country": "us",
}

# Run the Actor and wait for it to finish
run = client.actor("reliable-feeds/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",
    "fire alarm"
  ],
  "country": "us"
}' |
apify call reliable-feeds/keyword-search-volume --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reliable-feeds/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/R222fmDQlI0lI6KEW/builds/yYOl3UrrXfUfRUWXP/openapi.json
