# Keyword Search Volume, CPC & Difficulty Checker (Bulk) (`tenfoldfleet/keyword-search-volume`) Actor

Check the Google search volume of a list of keywords: monthly volume, CPC, competition, top-of-page bids, keyword difficulty, search intent and 12-month trend for thousands of keywords in one run, 94 countries. $5 per 1,000 keywords plus $0.015 per run; keywords with no data are free.

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

## Pricing

from $5.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.
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

### What does Keyword Search Volume Checker do?

**Keyword Search Volume, CPC & Difficulty Checker** returns **Google search volume**, **cost per click (CPC)**, **Google Ads competition**, **top-of-page bids**, **keyword difficulty**, **search intent** and a **12-month search trend** for every keyword you give it. Paste one keyword or ten thousand: it checks them **in bulk**, 700 at a time, and returns one flat row per keyword.

It is a fast **keyword search volume API** and **Google Keyword Planner alternative** for **94 countries**, with no Google Ads account needed. You pay **$5 per 1,000 keywords** plus $0.015 per run, and keywords with no data are **free**. A paid Apify plan is required.

### Why use a bulk keyword volume checker?

- 🔎 **Keyword research for SEO**: size up a list of content ideas by volume, keyword difficulty and intent before you write.
- 💰 **PPC planning**: get CPC, competition and top-of-page bid ranges to estimate Google Ads budgets.
- 📈 **Seasonality and trends**: the last 12 months of search volume plus monthly, quarterly and yearly change in %.
- 🧭 **Content prioritisation**: sort thousands of keywords by volume vs difficulty to find quick wins.
- 🌍 **International SEO**: compare the same keywords across the US, UK, Germany, France, Australia and 89 more countries.
- 🤖 **Automation and AI agents**: call it from the API, Make, Zapier, n8n or the Apify MCP server inside your own keyword tools.

### What data does it return?

| Field | Example | Description |
|---|---|---|
| `keyword` | `best crm for small business` | Your keyword |
| `searchVolume` | `2900` | Average monthly Google searches |
| `cpc` | `44.05` | Average cost per click, USD |
| `competition` / `competitionLevel` | `0.35` / `MEDIUM` | Google Ads competition |
| `lowTopOfPageBid` / `highTopOfPageBid` | `8.3` / `60.46` | Top-of-page bid range, USD |
| `keywordDifficulty` | `29` | How hard it is to rank in the top 10 organic results (0-100) |
| `mainIntent` / `foreignIntent` | `commercial` / `null` | Search intent: informational, navigational, commercial, transactional |
| `trendMonthly` / `trendQuarterly` / `trendYearly` | `0` / `24` / `24` | Volume change in % |
| `monthlySearches` | `[{ "month": "2026-08", "searchVolume": 3600 }, ...]` | Last 12 months, newest first |
| `found` | `true` | `false` when there is no data for the keyword (free row) |
| `location` / `language` / `lastUpdated` | `United States` / `English` | Market and data freshness |

### How to check keyword search volume in bulk

1. Click **Try for free**.
2. Paste your keywords into **Keywords**, one per line.
3. Pick a **Country** and **Language** (default: United States, English).
4. Click **Start**. A few hundred keywords take a few seconds.
5. Download the results as **CSV, Excel, JSON or HTML**, or read them through the API.

### How much does it cost?

You pay **$0.005 per keyword with data** (**$5 per 1,000 keywords**), plus **$0.015 per run** (it covers the data provider's fixed fee per request, so send big lists in one run). **Keywords with no data, duplicates, keywords that are too long and keywords skipped for any reason are free.** Set a **maximum cost per run** and the Actor only looks up as many keywords as that budget covers.

| Actor | Price per 1,000 keywords |
|---|---|
| **This Actor** (volume, CPC, bids, difficulty, intent, 12-month trend) | **$5** |
| aitorsm/keyword-volume | $8 to $12 (by Apify plan) |
| khadinakbar/dataforseo-keyword-research | $10 |
| steadyfetch/keyword-search-volume-scraper | $8 |
| s-r/google-keywords | $3 |
| santhej/keyword-research-tool | $3 with difficulty and intent |

Prices as listed on Apify Store in October 2026.

**Free Apify plan: 5 keywords per run.** Every lookup costs us a data fee and free-plan runs earn nothing, so runs on the free Apify plan look up **the first 5 keywords** only; the rest come back as free rows without data. Any paid Apify plan gets every keyword.

### Input

```json
{
    "keywords": ["running shoes", "best crm for small business", "keyword research"],
    "location": "United States",
    "language": "English",
    "includeMonthlyHistory": true
}
```

- **keywords**: up to thousands per run. Duplicates are removed (ignoring case and trailing punctuation). Questions like `what is seo?` work: edge punctuation is removed before the lookup and your original keyword is kept in the output. Phrases longer than 80 characters or 10 words are skipped for free.
- **location**: one of 94 countries.
- **language**: if the language has no data for that country, the country's main language is used (Germany + English becomes Germany + German) and the log says so.
- **includeMonthlyHistory**: add the last 12 months of search volume to each row.

### Output example

```json
{
    "keyword": "best crm for small business",
    "location": "United States",
    "language": "English",
    "found": true,
    "searchVolume": 2900,
    "cpc": 44.05,
    "competition": 0.35,
    "competitionLevel": "MEDIUM",
    "lowTopOfPageBid": 8.3,
    "highTopOfPageBid": 60.46,
    "keywordDifficulty": 29,
    "mainIntent": "commercial",
    "foreignIntent": null,
    "trendMonthly": 0,
    "trendQuarterly": 24,
    "trendYearly": 24,
    "monthlySearches": [
        { "month": "2026-08", "searchVolume": 3600 },
        { "month": "2026-07", "searchVolume": 3600 },
        { "month": "2026-06", "searchVolume": 2900 }
    ],
    "lastUpdated": "2026-09-14 21:13:57 +00:00",
    "error": null
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Use it from code

Python (`pip install "apify-client>=3"`):

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("tenfoldfleet/keyword-search-volume").call(run_input={
    "keywords": ["running shoes", "trail running shoes", "marathon training plan"],
    "location": "United Kingdom",
})
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row["keyword"], row["searchVolume"], row["cpc"], row["keywordDifficulty"])
```

On apify-client 1.x or 2.x, `call()` returns a dict, so use `run["defaultDatasetId"]` instead.

JavaScript (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('tenfoldfleet/keyword-search-volume').call({
    keywords: ['running shoes', 'trail running shoes'],
    location: 'Germany',
    language: 'German',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Tips

- **Send big lists in one run.** Keywords are checked 700 per request and the $0.015 run fee is paid once, so large lists finish quickly and cost less.
- **Filter `found: true`** to keep only keywords with data; the others cost nothing.
- **Sort by `searchVolume` / `keywordDifficulty`** to find high-volume, low-competition keywords.
- Use `trendYearly` and `monthlySearches` to spot seasonal and rising keywords.

### FAQ

#### Where does the data come from?

From the DataForSEO Labs keyword database, which is based on Google Ads (Keyword Planner) data and refreshed monthly. `lastUpdated` shows when each keyword was last refreshed.

#### Why did some keywords return `found: false`?

Google has no search volume data for very rare, misspelled or brand-new phrases. Those rows are **free**. Rows with an `error` text were skipped (too long, max cost per run reached, free Apify plan, or the data source was unavailable) and are free too.

#### Is the search volume exact?

It is Google's average monthly search volume over the last 12 months, based on Google Ads data. CPC and bids are in USD.

#### How is keyword difficulty calculated?

Keyword difficulty (0-100) estimates how hard it is to reach the top 10 organic results, based on the link strength of the pages currently ranking.

#### Do I need a Google Ads account?

No. You only need an Apify account.

#### Can I use it in Make, Zapier, n8n or an AI agent?

Yes. It works with every Apify integration, the REST API and the Apify MCP server.

#### Support

Missing a country or a field? Open an issue in the **Issues** tab.

This Actor returns aggregated keyword statistics only. It does not collect any personal data.

### More tools from Tenfold Fleet

| Actor | Price |
|---|---|
| [ATS Jobs Scraper - Greenhouse, Lever, Ashby & 5 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | $2 per 1,000 (job posting) |
| [Website Contact Scraper - Emails, Phones & Socials](https://apify.com/tenfoldfleet/company-contact-finder) | $8 per 1,000 (website with contacts) |
| [Google Ads Transparency Center Scraper - Competitor Ads by Site](https://apify.com/tenfoldfleet/google-ads-transparency-scraper) | $1 per 1,000 (ad scraped) |
| [Google News Scraper - Articles, Real URLs & Full Text](https://apify.com/tenfoldfleet/google-news-scraper) | $2 per 1,000 (article) |
| [Remote Jobs Aggregator - RemoteOK, WWR, Himalayas & 4 more](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | $1.2 per 1,000 (unique remote job) |
| [SEO Audit Tool - Technical On-Page SEO Checker & Score](https://apify.com/tenfoldfleet/seo-audit-tool) | $20 per 1,000 (page audited) |
| [Shopify Products Scraper - Prices, Variants & Stock](https://apify.com/tenfoldfleet/shopify-products-scraper) | $0.8 per 1,000 (product) |
| [Shopify App & Theme Detector - Store Analyzer & Contacts](https://apify.com/tenfoldfleet/shopify-store-analyzer) | $8 per 1,000 (shopify store analyzed) |
| [Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt](https://apify.com/tenfoldfleet/sitemap-url-extractor) | $0.4 per 1,000 (url extracted) |
| [Technology Detector - Wappalyzer & BuiltWith Alternative](https://apify.com/tenfoldfleet/tech-stack-detector) | $10 per 1,000 (website analyzed) |
| [URL to Markdown - Web Page to LLM-Ready Text for AI Agents](https://apify.com/tenfoldfleet/url-to-markdown) | $1 per 1,000 (page converted) |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | $1.5 per 1,000 (job posting) |
| [YouTube Comments Scraper - Replies, Likes & Sort by Newest](https://apify.com/tenfoldfleet/youtube-comments-scraper) | $0.6 per 1,000 (comment scraped) |
| [YouTube Transcript Scraper - Captions & Subtitles API](https://apify.com/tenfoldfleet/youtube-transcript-scraper) | $3 per 1,000 (transcript extracted) |

# Actor input Schema

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

Keywords to check, one per line. Thousands per run are fine (sent in batches of 700). Duplicates are removed (ignoring case and trailing punctuation such as "?"). Keywords longer than 80 characters or 10 words are skipped for free.

## `location` (type: `string`):

Country whose Google search volume, CPC and keyword difficulty you want. A country name or 2-letter code works ("United States", "US", "GB", "Germany"); 94 countries.

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

Search language, as a name or code ("English", "en", "de"). If the language has no data for the chosen country, the country's main language is used instead (for example Germany + English uses German). 21 countries support more than one language, for example United States English/Spanish, Canada English/French, Switzerland German/French/Italian, Belgium French/Dutch/German and India English/Hindi. English is also available in Cyprus, Egypt, Greece, Saudi Arabia and the UAE.

## `includeMonthlyHistory` (type: `boolean`):

Add the search volume of each of the last 12 months (seasonality) to every keyword.

## Actor input object example

```json
{
  "keywords": [
    "running shoes",
    "best crm for small business",
    "keyword research"
  ],
  "location": "United States",
  "language": "English",
  "includeMonthlyHistory": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": [
        "running shoes",
        "best crm for small business",
        "keyword research"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/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": [
        "running shoes",
        "best crm for small business",
        "keyword research",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/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": [
    "running shoes",
    "best crm for small business",
    "keyword research"
  ]
}' |
apify call tenfoldfleet/keyword-search-volume --silent --output-dataset

```

## MCP server setup

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