# Keyword Search Volume API: Google Ads Volume, CPC & Trends (`magenta_waterwheel/keyword-search-volume`) Actor

Bulk Google keyword search volume from Google Ads (Keyword Planner) data: monthly searches, 12-month history, CPC, bids, competition and trend for any country and language. No Google Ads account needed. $1.50 per 1,000 keywords + $0.10 per lookup of up to 1,000; keywords without data are free.

- **URL**: https://apify.com/magenta_waterwheel/keyword-search-volume.md
- **Developed by:** [Huss](https://apify.com/magenta_waterwheel) (community)
- **Categories:** SEO tools, Developer tools
- **Stats:** 2 total users, 2 monthly users, 97.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Keyword Search Volume API: Google Ads Volume, CPC & Trends

**Keyword Search Volume API** returns **Google search volume** for your keywords straight from **Google Ads (Keyword Planner) data**: average monthly searches, a **12-month search history**, **CPC**, low and high **top-of-page bids**, **competition** and a ready-made **trend** (3-month and year-over-year change). Check up to **1,000 keywords per lookup** and up to 100,000 per run, for **any country, region or city** and **any language**.

You don't need a Google Ads account, an active ad campaign or an API key. Paste keywords, click **Start** and export to JSON, CSV or Excel, or call it from the API, Make, Zapier, n8n or an AI agent.

### Why use this keyword volume tool?

|                                | Keyword Search Volume API                   | Google Keyword Planner           | SEO suites (Ahrefs, Semrush) |
| ------------------------------ | ------------------------------------------- | -------------------------------- | ---------------------------- |
| Volumes as numbers, not ranges | Yes                                         | Only with active ad spend        | Estimated, own clickstream   |
| Bulk                           | Up to 100,000 keywords per run              | Manual upload, UI only           | Plan limits                  |
| CPC, bids and competition      | Yes                                         | Yes                              | Yes                          |
| Monthly history and trend      | 12 months by default, up to 4 years         | Yes                              | Yes                          |
| API, schedules, no-code, AI    | Yes                                         | Google Ads API approval required | Expensive API add-ons        |
| Price                          | **$1.50 per 1,000 keywords**, pay as you go | Free with ad spend               | $100+ per month              |

### What data do you get?

- 🔢 **Search volume**: average monthly Google searches for each keyword.
- 📅 **Monthly searches**: month-by-month volume for the last 12 months, or any range up to 4 years back.
- 📈 **Trend**: 3-month change and year-over-year change in percent, ready for sorting.
- 💰 **CPC and bids**: average cost per click and low/high top-of-page bids in USD.
- 🥊 **Competition**: LOW, MEDIUM or HIGH plus a 0-100 competition index.
- 🌍 **Any location and language**: countries, regions and cities by name (`United Kingdom`, `London,England,United Kingdom`) or Google Ads location code, or worldwide.
- 🆓 **No charge for keywords without data**, invalid keywords or duplicates.

### Who uses keyword search volume data?

- **SEO specialists and content teams** prioritizing topics and building content plans.
- **PPC managers** estimating budgets with CPC and competition before launching campaigns.
- **Agencies** running keyword research for many clients and countries on a schedule.
- **Product and market researchers** sizing demand and tracking seasonality and trends.
- **Developers and AI agents** enriching keyword lists inside their own SEO tools and workflows.

### How to check keyword search volume in bulk

1. Click **Try for free**.
2. Paste your keywords into **Keywords**, one per line.
3. Set **Location** (for example `United States` or `2840`) and **Language** (for example `en`).
4. Click **Start**, then download the results from the **Output** tab.

### Input example

```json
{
    "keywords": ["buy laptop", "cheap laptops for sale", "best gaming laptop"],
    "location": "United States",
    "language": "en",
    "includeCpcCompetition": true,
    "includeMonthlySearches": true
}
```

### Output example

```json
{
    "keyword": "buy laptop",
    "spellCorrection": null,
    "hasData": true,
    "searchVolume": 2900,
    "competition": "HIGH",
    "competitionIndex": 100,
    "cpc": 7.95,
    "lowTopOfPageBid": 1.69,
    "highTopOfPageBid": 10.04,
    "monthlySearches": [
        { "month": "2023-10", "searchVolume": 2400 },
        { "month": "2023-09", "searchVolume": 2900 },
        { "month": "2023-08", "searchVolume": 3600 }
    ],
    "trend3mPct": 8.5,
    "trendYoYPct": -33.3,
    "location": "United States",
    "locationCode": 2840,
    "language": "en",
    "languageCode": "en",
    "searchPartners": false,
    "scrapedAt": "2026-10-08T17:00:24.127Z"
}
```

Keywords Google has no data for are returned with `"hasData": false` and are free. A `RUN_SUMMARY` record in the key-value store lists invalid and duplicate keywords and the number of lookups.

### How much does keyword search volume cost?

This Actor uses **pay-per-event** pricing:

| Event                                      | Price                                              |
| ------------------------------------------ | -------------------------------------------------- |
| Keyword with data                          | **$1.50 per 1,000 keywords** ($0.0015 per keyword) |
| Lookup (one batch of up to 1,000 keywords) | $0.10 per lookup                                   |
| Actor start                                | $0.00005 per run                                   |

Keywords without data, invalid keywords and duplicates are free. Examples:

- The prefilled example (4 keywords): about **$0.11**
- 1,000 keywords: about **$1.60**
- 10,000 keywords: about **$16**
- 100,000 keywords: about **$160**

Set **Maximum cost per run** in the run options to cap spending; the Actor stops before it would go over.

This Actor is available on **paid Apify plans** (Starter and higher), because every lookup costs us Google Ads data fees. On the Free plan the run ends right away with a short notice and you are not charged.

### Use it with AI agents (MCP) and the API

Add this Actor as a tool in Claude, ChatGPT, Cursor, VS Code or any other MCP client through the [Apify MCP server](https://docs.apify.com/mcp):

```text
https://mcp.apify.com?tools=magenta_waterwheel/keyword-search-volume
```

Then ask, for example: *"Get US search volume and CPC for these 200 keywords and list the 20 with the best volume-to-competition ratio."* The Actor runs with **limited permissions**, so it can only access its own run storage.

For results in a single HTTP request, call the synchronous endpoint with your [Apify API token](https://console.apify.com/settings/integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/magenta_waterwheel~keyword-search-volume/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["buy laptop","best gaming laptop"],"location":"United States","language":"en"}'
```

### Integrations and scheduling

- ⏰ **Schedule** monthly volume checks for your keyword lists to track seasonality.
- 🔗 **Send results** to Google Sheets, Slack, Airbyte, webhooks, Make, Zapier or n8n.
- 📤 **Export** as JSON, CSV, Excel, XML or HTML.

### FAQ

#### Where does the data come from?

From Google Ads keyword planning data, delivered through a licensed data provider (DataForSEO). It is the same source as Google Keyword Planner, without needing your own Google Ads account or ad spend.

#### Why do some keywords have no data?

Google doesn't report volume for very rare keywords, some brand or adult terms, and keywords it groups with a close variant. Those keywords come back with `hasData: false` and cost nothing.

#### Why do similar keywords show the same volume?

Google Ads combines search volume for close variants (plurals, misspellings, word order). If you need them separated, check them in separate runs.

#### How fast is it?

About 5-10 seconds per lookup of up to 1,000 keywords. The data provider allows a limited number of lookups per minute, so very large runs (tens of thousands of keywords) take a few minutes.

#### Can I use it on the Free plan?

No. Each lookup has a real data cost that Apify doesn't cover on the Free plan, so the Actor needs a paid Apify plan. Free-plan runs end immediately with a notice and no charge.

#### I found a bug or need a feature

Open an issue in the **Issues** tab with a link to your run. We aim to reply within one business day.

### More tools from the same developer

| Actor                                                                                       | What it does                                                                       | Price                     |
| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------- |
| [Career Site Jobs API](https://apify.com/magenta_waterwheel/career-site-jobs-api)           | Jobs from Greenhouse, Lever, Ashby and SmartRecruiters career sites, with salaries | $2 / 1,000 jobs           |
| [Website Screenshot & PDF API](https://apify.com/magenta_waterwheel/website-screenshot-pdf) | Full-page PNG/JPEG screenshots and web page to PDF in bulk                         | $2.50 / 1,000 screenshots |
| [Document & PDF to Markdown](https://apify.com/magenta_waterwheel/document-to-markdown)     | PDF, Word, PowerPoint, Excel and HTML to LLM-ready Markdown, with OCR              | $3 / 1,000 pages          |
| [App Store Reviews Scraper](https://apify.com/magenta_waterwheel/app-store-reviews-details) | Apple App Store reviews and app details in any country                             | $0.25 / 1,000 reviews     |

# Actor input Schema

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

Keywords or phrases, one per line. Up to 80 characters and 10 words each. Duplicates are removed and keywords are lowercased. Characters Google Ads rejects (! @ % , ( ) emoji) make a keyword invalid; it is skipped for free.

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

Country, region or city as a Google Ads location name (United States, United Kingdom, Germany, "London,England,United Kingdom") or a numeric location code (2840 = United States). Use Worldwide for global volume.

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

Language code (en, de, fr, es, pt, ja...) or name (English). Leave empty for all languages.

## `includeCpcCompetition` (type: `boolean`):

Add cost per click, low and high top-of-page bids, competition level (LOW, MEDIUM, HIGH) and competition index (0-100).

## `includeMonthlySearches` (type: `boolean`):

Add month-by-month search volume (last 12 months by default, or your date range).

## `includeKeywordsWithoutData` (type: `boolean`):

Also output keywords Google has no data for (hasData false). These are always free.

## `dateFrom` (type: `string`):

Start month of the monthly history, e.g. 2024-01. Up to 4 years back. Leave empty for the last 12 months.

## `dateTo` (type: `string`):

End month of the monthly history, e.g. 2025-12. Google has no data for the current month.

## `searchPartners` (type: `boolean`):

Include searches on Google search partner sites, not just Google Search.

## `includeAdultKeywords` (type: `boolean`):

Return data for adult keywords (Google may still return no data).

## Actor input object example

```json
{
  "keywords": [
    "buy laptop",
    "cheap laptops for sale",
    "best gaming laptop 2026"
  ],
  "location": "United States",
  "language": "en",
  "includeCpcCompetition": true,
  "includeMonthlySearches": true,
  "includeKeywordsWithoutData": true,
  "searchPartners": false,
  "includeAdultKeywords": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `allRecords` (type: `string`):

No description

## `runSummary` (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": [
        "keyword research tool",
        "seo tools",
        "best running shoes",
        "how to start a podcast"
    ],
    "location": "United States",
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("magenta_waterwheel/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": [
        "keyword research tool",
        "seo tools",
        "best running shoes",
        "how to start a podcast",
    ],
    "location": "United States",
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("magenta_waterwheel/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": [
    "keyword research tool",
    "seo tools",
    "best running shoes",
    "how to start a podcast"
  ],
  "location": "United States",
  "language": "en"
}' |
apify call magenta_waterwheel/keyword-search-volume --silent --output-dataset

```

## MCP server setup

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