# Google Keyword Planner API: Google Ads Search Volume & CPC (`plainrows/google-keyword-planner-api`) Actor

Google Keyword Planner API and MCP tool: real Google Ads search volume, CPC, competition, top-of-page bids and 12-month trend for up to 10,000 keywords, long tail included. A keyword planner alternative without an Ads account. Fee per 1,000-keyword lookup + per keyword found.

- **URL**: https://apify.com/plainrows/google-keyword-planner-api.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** SEO tools, Marketing, Developer tools
- **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 search volumes

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

## Google Keyword Planner API: Google Ads Search Volume & CPC

A **Google Keyword Planner API and MCP tool**: give it a list of keywords and get the **real Google Ads search volume** for each one, as Google's Keyword Planner shows it, with the **CPC**, the **competition** (LOW / MEDIUM / HIGH and its 0-100 index), the **top-of-page bids** and **12 months of searches**. Up to 10,000 keywords per run, 94 countries, any Google Ads language.

A **keyword planner alternative** for people without a Google Ads account (or without an active campaign, which Keyword Planner needs to show exact volumes): the numbers come straight from Google Ads, including **long-tail keywords** that SEO keyword databases do not cover.

### Typical uses

- **Bulk search volume**: check thousands of keywords in one run, 1,000 per lookup.
- **Long-tail and local-language research**: real Google Ads data for phrases too rare for SEO tools.
- **PPC planning**: `cpc`, `lowTopOfPageBid` and `highTopOfPageBid` to budget a Google Ads campaign.
- **Seasonality**: `monthlySearches` shows the last 12 months, month by month.
- **AI agents and automations**: one JSON row per keyword, ready for Google Sheets, n8n, Make, Zapier or an MCP client.

### What you get for each keyword

| Field | Description |
|---|---|
| `keyword` | The keyword looked up (lowercase, spaces collapsed) |
| `searchVolume` | Average monthly Google searches over the last 12 months (Google Ads) |
| `competition`, `competitionIndex` | Google Ads competition: `LOW`, `MEDIUM` or `HIGH`, and its index from 0 to 100 |
| `cpc` | Average cost per click (USD) |
| `lowTopOfPageBid`, `highTopOfPageBid` | Top-of-page bid range (USD) |
| `monthlySearches` | Searches per month (`month` YYYY-MM, `searchVolume`), oldest first |
| `found`, `status`, `message` | `FOUND` when the keyword has a volume; otherwise a free row that says why: `NO_DATA`, `INVALID_KEYWORD`, `PROVIDER_ERROR`, `REJECTED`, `NOT_LOOKED_UP` |
| `country`, `languageCode`, `observedAt`, `schemaVersion` | Settings of the data, when it was fetched, row format version |

Missing values are `null`, never guessed. Google Ads has no data for some keywords (too rare, or grouped with a close variant): they come back as free rows with `found: false`.

#### Example row (real data, Turkey, Turkish, October 2026, monthly list shortened)

```json
{
  "keyword": "izmir saç ekimi fiyatları",
  "searchVolume": 140,
  "competition": "MEDIUM",
  "competitionIndex": 59,
  "cpc": 3.71,
  "lowTopOfPageBid": 0.58,
  "highTopOfPageBid": 4.34,
  "monthlySearches": [{ "month": "2025-10", "searchVolume": 170 }, { "month": "2026-09", "searchVolume": 110 }],
  "found": true,
  "status": "FOUND",
  "message": null,
  "country": "TR",
  "languageCode": "tr",
  "observedAt": "2026-10-22T20:32:00.000Z",
  "schemaVersion": "1.0"
}
```

In that real lookup of 10 long-tail Turkish keywords, 4 had a Google Ads volume and 6 had none.

### Input

```json
{
  "keywords": ["coffee maker", "espresso machine", "french press"],
  "country": "US",
  "languageCode": "en"
}
```

- **keywords** (required): up to 10,000 per run. Google Ads rules: at most **80 characters and 10 words** per keyword, no symbols such as `! @ % ( ) ?` and no emojis; other keywords get a free `INVALID_KEYWORD` row and are never sent. Duplicates (case and spaces ignored) are removed for free.
- **country**: one of 94 countries (default `US`).
- **languageCode** (optional): defaults to the country's main language (e.g. `de` for Switzerland, `tr` for Turkey).

### Pricing

Pay per event, no subscription:

- **Lookup batch: $0.15** once per batch of up to 1,000 keywords looked up in Google Ads, **even when no keyword in the batch has a volume**. The data source bills every lookup ($0.09), whatever it returns.
- **Keyword with search volume: $0.003** per keyword that has a volume. Keywords without data are free rows.
- A small **Actor start** fee per run ($0.002).

Examples: 10 keywords with 4 found = $0.15 + 4 x $0.003 = $0.162; 1,000 keywords with 400 found = $0.15 + $1.20 = $1.35; 2,500 keywords = 3 batches. Batches the data source failed or refused, and keywords not reached (run's maximum cost or timeout), get a free row and no fee. A batch starts only when the run's maximum cost still covers its fee and at least one keyword; the batch is cut to what the budget allows.

**Free Apify plan:** not available. Each lookup costs the data source $0.09, so on a free Apify plan the run looks up nothing and charges only the $0.002 run start fee (one free row per keyword says so). Any paid Apify plan works.

### Good to know

- Google Ads groups close variants (plural, word order, accents) and gives them the same volume; it also returns no data for some keyword groups. For keywords whose volumes look merged, look them up in separate runs.
- Volumes are Google's rounded Keyword Planner figures for search on Google (search partners not included).
- The source allows a limited number of lookups per minute: big runs process 2 batches at a time (about 10,000 keywords in a few minutes).
- Not affiliated with Google.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): batches looked up, keywords with volume (billed), duplicates removed, invalid keywords, and anything skipped because of the free-plan or budget limit.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~google-keyword-planner-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["coffee maker", "espresso machine"], "country": "US"}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/google-keyword-planner-api` and send the rows to Google Sheets.

**AI agents (MCP tool):** add `https://mcp.apify.com?tools=plainrows/google-keyword-planner-api` to Claude, Cursor or any MCP client, then ask "What is the Google Ads search volume and CPC of these keywords in Germany?".

### FAQ

**Is this the same data as Google Keyword Planner?**
Yes: the volumes, competition and bids come from Google Ads, the source of Keyword Planner, without needing your own Ads account or campaign.

**What is the difference with Keyword Planner Alternative by PlainRows?**
[Keyword Planner Alternative](https://apify.com/plainrows/keyword-planner-alternative) reads an SEO keyword database: cheaper per keyword, with keyword ideas, but rare and long-tail keywords are often missing. This Actor asks Google Ads itself: the real Google Ads figures, and it covers much of the long tail absent from SEO databases. Use the first for common keywords and ideas, this one when you need Google's own numbers or many keywords come back empty.

**Why am I charged for a batch where no keyword has a volume?**
The data source bills each lookup of up to 1,000 keywords, even when Google Ads has no data for any of them. The batch fee covers that lookup; the keyword fee applies only to keywords with a volume.

**Why are some volumes empty?**
Google Ads has no data for very rare keywords and for some groups of close variants. Those rows are free.

**How many keywords can I send?**
Up to 10,000 per run, in batches of 1,000. Group your keywords in one run rather than many small runs: one batch fee covers up to 1,000 keywords.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Bing Keyword Search Volume & CPC](https://apify.com/plainrows/bing-keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Google Trends Keyword Discovery (Rising & Related)](https://apify.com/plainrows/google-trends-keyword-discovery) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Competitor Keywords API (Ranked Keywords)](https://apify.com/plainrows/competitor-keywords-api) · [Bulk Website Traffic Checker](https://apify.com/plainrows/website-traffic-checker) · [SEO Competitors & Keyword Gap Finder](https://apify.com/plainrows/seo-competitors-keyword-gap) · [PPC Competitor Keywords (SpyFu Alternative)](https://apify.com/plainrows/ppc-competitor-keywords) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Backlink API (Referring Domains & Backlinks Data)](https://apify.com/plainrows/backlink-api) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [SEO Audit API (On-Page SEO Checker)](https://apify.com/plainrows/seo-audit-api) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [AI Overview Tracker (Google AI Overview Citations)](https://apify.com/plainrows/ai-overview-tracker) · [Perplexity Search API (Answers & Citations)](https://apify.com/plainrows/perplexity-search-api) · [ChatGPT Search Scraper (Answers & Citations)](https://apify.com/plainrows/chatgpt-search-scraper) · [AI Citations Finder (LLM Mentions in ChatGPT & AI Overviews)](https://apify.com/plainrows/ai-citations-finder) · [Keyword Rank Checker (Google SERP Position)](https://apify.com/plainrows/keyword-rank-checker) · [Google Search API (SERP Scraper & Web Results)](https://apify.com/plainrows/google-search-api) · [Bing Search API (Bing SERP & Web Results)](https://apify.com/plainrows/bing-search-api) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Arbeitsagentur Jobs Scraper (Germany)](https://apify.com/plainrows/arbeitsagentur-jobs-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Catho Jobs Scraper (Brazil)](https://apify.com/plainrows/catho-jobs-scraper) · [Vagas.com.br Jobs Scraper (Brazil)](https://apify.com/plainrows/vagas-jobs-scraper) · [Jobs.cz Scraper (Czech Republic)](https://apify.com/plainrows/jobs-cz-scraper) · [Remote Jobs Scraper (Himalayas, RemoteOK, Jobicy)](https://apify.com/plainrows/remote-jobs-aggregator) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Amazon Keyword Research (Search Volume & Reverse ASIN)](https://apify.com/plainrows/amazon-keyword-research) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [PDF to Markdown Converter (PDF to Text for AI & RAG)](https://apify.com/plainrows/pdf-to-markdown) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

### Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

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

One keyword per line, up to 10,000 per run, at most 80 characters and 10 words each, without symbols such as ! @ % ( ) ? or emojis (Google Ads rules; others get a free INVALID_KEYWORD row). Duplicates (case and spaces ignored) are removed for free. Keywords are looked up in batches of up to 1,000: each batch is charged once, even when no keyword in it has a volume (the data source bills every lookup, $0.09), plus each keyword with a search volume. Keywords without data are free rows.

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

Country whose Google Ads search data you want (94 countries).

## `languageCode` (type: `string`):

Language code, e.g. "en", "fr" or "zh-TW". Leave empty to use the country's main language (for example German for Switzerland, Turkish for Turkey). A language Google Ads does not offer stops the run with a clear message and no charge.

## Actor input object example

```json
{
  "keywords": [
    "coffee maker",
    "espresso machine",
    "french press"
  ],
  "country": "US"
}
```

# Actor output Schema

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

No description

## `summary` (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": [
        "coffee maker",
        "espresso machine",
        "french press"
    ],
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/google-keyword-planner-api").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": [
        "coffee maker",
        "espresso machine",
        "french press",
    ],
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/google-keyword-planner-api").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": [
    "coffee maker",
    "espresso machine",
    "french press"
  ],
  "country": "US"
}' |
apify call plainrows/google-keyword-planner-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/google-keyword-planner-api"
        }
    }
}
```

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/3aXMF03OWB2pjMJzE/builds/BFvr5eJVGN91huhhr/openapi.json
