# Keyword Research Tool – Keyword Planner Search Volume & CPC (`rowfeed/keyword-search-volume`) Actor

Keyword research tool and Keyword Planner alternative, no SEO subscription: bulk Google and Bing search volume, CPC, competition and 12-month trend, keyword difficulty, search intent and AI search volume (ChatGPT), or keyword ideas from seed words. No per-keyword fee for keywords without data.

- **URL**: https://apify.com/rowfeed/keyword-search-volume.md
- **Developed by:** [Rowfeed](https://apify.com/rowfeed) (community)
- **Categories:** SEO tools, Marketing, AI
- **Features:** Limited permissions
- **Stats:** 12 total users, 8 monthly users, 97.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.55 / 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

## Keyword Research – Google & Bing Search Volume, CPC & Ideas

Get monthly Google and Bing search volume, cost per click, competition, a 12-month trend, keyword difficulty, search intent and AI search volume (how often a keyword is asked in AI assistants such as ChatGPT) for any list of keywords, or discover related keyword ideas from a few seed words.
Built for SEO and PPC marketers, content teams, agencies and AI agents that need keyword numbers without a Google Ads account or an SEO tool subscription.
The figures are Google Ads Keyword Planner and Bing Ads data from a licensed data provider (DataForSEO), so there is no scraping and a run usually finishes in under a minute.

### What you get

- **Search volume for your keyword list**: average monthly searches, CPC, competition (LOW/MEDIUM/HIGH and 0–100), top-of-page bid range and the last 12 months, one row per keyword, up to thousands per run.
- **Google, Bing or both**: set `searchEngine` to `bing` or `both` for Bing Ads search volume, CPC and competition in the same columns (one row per keyword and engine; `search_engine` says which).
- **Keyword difficulty and search intent** (optional): turn on `includeDifficulty` for a 0–100 difficulty score (how hard it is to reach Google's top 10) and the search intent (informational, commercial, transactional, navigational) of every Google keyword with data.
- **Keyword ideas**: give up to 20 seed words and get the related keywords Google Ads suggests, sorted by search volume, with the same metrics.
- **Fair billing**: keywords Google has no data for are returned with `has_data: false` and cost nothing beyond the lookup, and a lookup is only charged when it succeeds.
- **AI search volume** (optional): turn on `includeAiSearchVolume` to see how often each keyword is asked in AI assistants such as ChatGPT per month (`ai_search_volume`), with a 12-month series (`ai_monthly_searches`). Compare it with the Google volume to find topics people now ask AI instead of searching. Measured 05.11.2026: "crm software" 201,000 Google searches and 2,434 AI searches a month in the US; "laufschuhe" 49,500 and 6,717 in Germany.

### Example output row

A real row from a run with the default input (United States, English):

```json
{
  "keyword": "web scraping",
  "search_volume": 9900,
  "cpc_usd": 14.12,
  "competition": "LOW",
  "competition_index": 22,
  "low_top_of_page_bid_usd": 2.98,
  "high_top_of_page_bid_usd": 13.35,
  "trend_3m_pct": -13.3,
  "latest_month": "2026-08",
  "latest_month_volume": 8100,
  "monthly_searches": [
    { "month": "2025-09", "search_volume": 12100 },
    { "month": "2025-10", "search_volume": 9900 },
    "... 9 more months ...",
    { "month": "2026-08", "search_volume": 8100 }
  ],
  "has_data": true,
  "spell": null,
  "location": "United States",
  "language": "English",
  "location_code": 2840,
  "language_code": "en",
  "checked_at": "2026-10-13T06:55:00+00:00"
}
```

`trend_3m_pct` compares the searches of the last 3 months with the 3 months before. Google Ads publishes figures for complete months only, so the newest month is usually last month or the month before.

### Input

| Field | What it does |
|---|---|
| `keywords` | Keywords to measure, or seed words in ideas mode. Max 80 characters and 10 words each. Keywords with symbols Google Ads refuses (`! @ % , * ( )`, emoji) are skipped with a warning row. |
| `includeDifficulty` | Add keyword difficulty and search intent to Google keywords with data (+2 lookups, $0.08, per started 100 such keywords). |
| `includeAiSearchVolume` | Add AI search volume and its 12-month series to Google keywords with data (+1 lookup, $0.04, per started 100 such keywords). |
| `mode` | `volume` = one row per keyword you enter. `ideas` = related keywords for your seeds, sorted by search volume. |
| `location` | Country, region or city as Google Ads names it: `United States`, `United Kingdom`, `Germany`, `London,England,United Kingdom`. Empty = worldwide. |
| `language` | `English`, `German`, `Spanish` ... Empty = all languages. |
| `maxResults` | Ideas mode only: stop after this many keyword rows (default 500, up to 20,000). |

### Pricing

> **About the price notice for 26 November 2026:** normal Google lookups stay $0.04 and keyword rows stay $0.003, now 5-15% cheaper on paid Apify plans. The notice only ends a short-lived discount on lookups and makes a Bing lookup count as 4 instead of 3.

Pay per event, no subscription:

- **$3 per 1,000 keywords with data** ($0.003 each). Keywords without data are free.
- **$0.04 per lookup** of up to 100 keywords with both a location and a language set. Without both (worldwide, all languages, an unknown language), or for a location or language only Google Ads knows, a lookup counts as 4 ($0.16). A bigger batch (101 to 1,000 keywords) or a keyword-ideas lookup (up to 20 seed words) counts as 4 lookups ($0.16). A Bing lookup (up to 1,000 keywords) counts as 3 lookups ($0.12); from 26 November 2026 it counts as 4 ($0.16). Keyword difficulty + search intent adds 2 lookups ($0.08) per started 100 Google keywords with data. AI search volume adds 1 lookup ($0.04) per started 100.
- $0.001 per run start.

Examples: 10 keywords cost about $0.07. 100 keywords cost about $0.34. 1,000 keywords cost about $3.16. 500 keyword ideas from one seed cost about $1.66. 100 keywords on Google and Bing cost about $0.76 ($0.80 from 26 November). 100 keywords with difficulty and intent cost about $0.42. 100 keywords with AI search volume cost about $0.38.

**Try it for $0.001:** the five example keywords that are pre-filled in the input are answered from a saved snapshot of a real lookup (rows carry `from_snapshot: true`) and cost only the $0.001 run start. Change any keyword, the location or the language and the lookup runs live.

**Free Apify plan:** the pre-filled example works on any plan. Live lookups need a paid Apify plan (any plan), because each one costs real money at the data provider; on the free plan the run returns a `paid_plan_required` row and charges nothing beyond the start.

You can cap the cost of a run with the maximum charge setting. The Actor checks your budget before each lookup and stops cleanly when it is reached. A lookup that fails is not charged, and the run continues with the next batch.

### Good to know

- Lists of up to 100 keywords are answered from DataForSEO's keyword database (Google Ads figures, refreshed monthly); bigger batches and keyword ideas come live from Google Ads. Keywords missing from the database come back without data and are free.
- Volumes are Google Ads averages, rounded by Google into buckets (for example 8,100 / 9,900 / 12,100), the same numbers Keyword Planner shows.
- Google may merge very similar keywords (singular/plural) into one volume.
- Monthly figures for small or seasonal keywords can swing a lot from month to month, so read `trend_3m_pct` together with `monthly_searches`.
- Error rows carry `error` and `errorMessage` fields and are never charged.
- Works well from AI agents and MCP clients: one call, flat JSON rows.

### More SEO tools from Rowfeed

- [SEO Audit Tool & Website Crawler](https://apify.com/rowfeed/seo-site-audit) – titles, meta descriptions, H1, noindex, broken links and a 0-100 SEO score for every page.
- [Keyword Generator](https://apify.com/rowfeed/keyword-generator) – hundreds of long-tail keyword ideas from Google, YouTube and Bing autocomplete; feed them back here for volume.
- [Competitor Keyword Research](https://apify.com/rowfeed/competitor-keywords) – every Google keyword any website ranks for, with position, volume and traffic.
- [SERP API & Rank Checker](https://apify.com/rowfeed/google-serp-api) – Google results for any keyword and country, with your domain's position.
- [Backlinks Checker](https://apify.com/rowfeed/backlink-checker) – referring domains, anchors, dofollow and link strength of any site.
- [Website Traffic & Domain Authority Checker](https://apify.com/rowfeed/website-traffic-checker) – traffic estimate and authority for up to 10,000 domains.
- [Broken Link Checker](https://apify.com/rowfeed/broken-link-checker) – 404s, dead links, broken images and redirect chains on any website.
- [AI Search Visibility Tracker](https://apify.com/rowfeed/ai-search-visibility-tracker) – is your brand named and cited by ChatGPT, Gemini, Perplexity and Google AI Mode.
- [Local Rank Tracker](https://apify.com/rowfeed/google-maps-rank-tracker) – Google Maps rankings on a geo-grid around a business.
- [Google Trends API](https://apify.com/rowfeed/google-trends-explorer) – interest over time, regions and rising searches.
- [Google Images API](https://apify.com/rowfeed/google-images-api) – image URLs and the pages they are on, for image SEO.
- [WHOIS Lookup & Domain Checker](https://apify.com/rowfeed/domain-rdap-checker) – domain age, expiry, registrar and DNS in bulk.
- [Sitemap URL Extractor](https://apify.com/rowfeed/sitemap-url-extractor) – every URL in a site's sitemaps, with lastmod.
- [PageSpeed Insights API](https://apify.com/rowfeed/pagespeed-insights-api) – Lighthouse scores, Core Web Vitals and real-user speed data for many pages at once.
- [DA PA Checker](https://apify.com/rowfeed/da-pa-checker) – domain authority, page authority and spam score for up to 10,000 domains or URLs.

Not affiliated with Google.

# Actor input Schema

## `mode` (type: `string`):

"Search volume" returns one row per keyword you enter. "Keyword ideas" returns related keywords Google Ads suggests for your seeds, sorted by search volume.

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

In "Search volume" mode: the keywords to measure (thousands are fine; looked up 1,000 at a time). In "Keyword ideas" mode: seed words (up to 20 per lookup). Max 80 characters and 10 words each. Google Ads does not accept symbols like ! @ % , \* ( ) or emoji, so such keywords are skipped with a warning row.

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

Country, region or city as Google Ads names it, e.g. "United States", "United Kingdom", "Germany", "London,England,United Kingdom". Leave empty for worldwide (each batch then counts as 4 lookups, $0.16, instead of 1).

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

Language name, e.g. "English", "German", "Spanish". Codes (de, fr, sk) and native names (Deutsch, Slovenčina) work too. Leave empty for all languages.

## `includeDifficulty` (type: `boolean`):

Also add keyword difficulty (0-100, how hard it is to rank in Google top 10) and search intent (informational, commercial, transactional, navigational) to every Google keyword with data. +2 lookups ($0.08) per started 100 keywords.

## `includeAiSearchVolume` (type: `boolean`):

Also add AI search volume: how often each keyword is asked in AI assistants such as ChatGPT per month, with a 12-month series (Google keywords with data). +1 lookup ($0.04) per started 100 keywords.

## `searchEngine` (type: `string`):

Search volume from Google (Google Ads data), Bing (Bing Ads data) or both. Keyword ideas are Google only. A Bing lookup counts as 3 lookups (4 from 26 November 2026).

## `maxResults` (type: `integer`):

Keyword ideas mode only: stop after this many keyword rows (Google Ads can suggest up to 20,000 per lookup).

## Actor input object example

```json
{
  "mode": "volume",
  "keywords": [
    "running shoes",
    "trail running shoes"
  ],
  "location": "United States",
  "language": "English",
  "includeDifficulty": false,
  "includeAiSearchVolume": false,
  "searchEngine": "google",
  "maxResults": 500
}
```

# 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": [
        "web scraping",
        "price tracking",
        "keyword research",
        "seo tools",
        "lead generation"
    ],
    "location": "United States",
    "language": "English"
};

// Run the Actor and wait for it to finish
const run = await client.actor("rowfeed/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": [
        "web scraping",
        "price tracking",
        "keyword research",
        "seo tools",
        "lead generation",
    ],
    "location": "United States",
    "language": "English",
}

# Run the Actor and wait for it to finish
run = client.actor("rowfeed/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": [
    "web scraping",
    "price tracking",
    "keyword research",
    "seo tools",
    "lead generation"
  ],
  "location": "United States",
  "language": "English"
}' |
apify call rowfeed/keyword-search-volume --silent --output-dataset

```

## MCP server setup

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