# Keyword Search Volume - Google Keyword Planner, No Ads Account

> Bulk keyword search volume checker and search volume API with real Google Keyword Planner data: monthly searches, CPC, competition, 12-month trends and keyword ideas for any country, city or language. No Google Ads account. $4 per 1,000 keywords; keywords with no data are free.

- Category: Keyword data
- Price: $4 per 1,000 × keyword result, billed per result by Apify (no subscription); any other billed events are listed on the Store page. Cap any run with `maxTotalChargeUsd`.
- Store page: https://apify.com/wrenfield-data/keyword-search-volume
- Human page: https://wrenfielddata.com/tools/keyword-search-volume/
- OpenAPI 3 spec: https://api.apify.com/v2/acts/wrenfield-data~keyword-search-volume/builds/default/openapi.json
- MCP tool: https://mcp.apify.com?tools=wrenfield-data/keyword-search-volume (appears as `wrenfield-data--keyword-search-volume`)

## Call it

Synchronous run that returns the dataset rows as JSON (use `/runs` for long jobs and poll; see the OpenAPI spec):

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/wrenfield-data~keyword-search-volume/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["keyword research", "seo tools", "ai seo", "content marketing", "running shoes"], "location": "United States", "language": "English", "mode": "search_volume", "includeMonthlySearches": true}'
```

## Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | array | yes | `["keyword research", "seo tools", "ai seo", "content marketing", "running shoes"]` | Keywords to look up, one per line (thousands are fine). Used as seed keywords when you ask for keyword ideas. Keywords are trimmed, lower-cased and de-duplicated; match-type symbols like [exact] or "phrase" and characters Google Ads does not accept are removed. Max 80 characters and 10 words per keyword. Large lists are split into batches of 1,000 automatically. Keywords without data are free. |
| `mode` | string |  | `"search_volume"` | Search volume: metrics for exactly the keywords you enter. Keyword ideas: new related keywords (with the same metrics) generated from your seed keywords, like Google Keyword Planner's 'Discover new keywords'. Both: metrics for your keywords plus ideas. |
| `location` | string |  | `"United States"` | Country (United States, US, 2840), state or region (California, Bavaria,Germany), city (London, Austin, TX, New York,New York,United States) or Worldwide. Plain names are matched to the Google Ads location list; if a name is ambiguous the run note says which place was used. State, city and worldwide lookups use live Google Ads data. |
| `language` | string |  |  | Language name (English, Spanish) or code (en, es). Leave empty to use the main language of the location (e.g. German for Germany). |
| `includeMonthlySearches` | boolean |  | `true` | Add the month-by-month search volume (last 12 months by default, or the date range below) to every result. |
| `dateFrom` | string |  |  | Optional start month of the monthly history, format YYYY-MM (e.g. 2024-01). Up to 4 years back. Leave empty for the last 12 months. |
| `dateTo` | string |  |  | Optional end month of the monthly history, format YYYY-MM. Google publishes data for the previous month only, so later months are capped automatically. |
| `ideasMethod` | string |  | `"keyword_ideas"` | Only used for keyword ideas. With the Google Ads API data source, ideas come from Keyword Planner's 'Discover new keywords' (up to 20 seed keywords per request) and this setting is ignored. With the keyword database: Keyword Planner-style ideas = keywords about the same topic; Long-tail suggestions = phrases that contain your seed keyword; Related searches = Google's 'related searches' for your seed keyword. |
| `maxIdeas` | integer |  | `100` | Maximum number of keyword ideas to return in total per run. You only pay for ideas that are returned. |
| `minSearchVolume` | integer |  | `0` | Skip keyword ideas with a lower average monthly search volume (e.g. 100 to drop tiny long-tail phrases). 0 = keep all ideas that have data. |
| `dataSource` | string |  | `"google_ads"` | Google Ads API (default): queries Google Ads (Keyword Planner) live, up to 1,000 keywords per request, and returns a row for every keyword Google knows. Adds a small per-request fee (see Pricing). Keyword database: a database built from Google Ads data, refreshed monthly; no request fee, also returns keyword difficulty and search intent, country-level locations only. Auto: keyword database for country-level searches, Google Ads API for regions/cities or languages the database does not cover. |
| `googleAdsMode` | string |  | `"live"` | Only used when the Google Ads API is queried. Live (default): results in seconds. Queued: cheaper per-request fee, but results usually take a few minutes and can take longer at peak times; the run waits for them. If a queued run times out, run it again with the same input to collect the results without paying the request fee again. |
| `queuedMaxWaitMinutes` | integer |  | `120` | Queued mode only: how long the run waits for Google Ads results before stopping (it never waits past the run timeout). |

## Example input

```json
{
  "keywords": [
    "keyword research",
    "seo tools",
    "ai seo",
    "content marketing",
    "running shoes"
  ],
  "location": "United States",
  "language": "English",
  "mode": "search_volume",
  "includeMonthlySearches": true
}
```

## Output fields

One flat row per result:

| Field | Type | Description |
|---|---|---|
| `keyword` | string | Keyword (normalized, lower-case) |
| `type` | string | keyword = one of your input keywords; idea = a keyword idea generated from your seed keywords |
| `seed_keyword` | string | Seed keyword(s) an idea was generated from |
| `location` | string | Location name |
| `location_code` | integer | Google Ads location code (e.g. 2840 = United States) |
| `language` | string |  |
| `language_code` | string |  |
| `search_volume` | integer | Average monthly searches (last 12 months) |
| `cpc` | number | Average cost per click in USD |
| `competition` | string | Paid search competition level: LOW, MEDIUM or HIGH |
| `competition_index` | integer | Paid search competition index, 0-100 |
| `low_top_of_page_bid` | number | Top-of-page bid, low range (USD) |
| `high_top_of_page_bid` | number | Top-of-page bid, high range (USD) |
| `keyword_difficulty` | integer | SEO ranking difficulty 0-100 (keyword database only) |
| `search_intent` | string | informational, navigational, commercial or transactional (keyword database only) |
| `trend` | object | Search volume change in % of the latest month vs. previous month / 3 months / 12 months earlier |
| `search_volume_avg_in_range` | integer | Average monthly searches within the requested date range (only when a date range is set) |
| `monthly_searches` | array | Monthly search volume history, oldest to newest: {date, year, month, search_volume} |
| `found` | boolean | true if search volume data was found (only these rows are charged) |
| `spell` | string | Google's spelling correction, if the keyword looked misspelled |
| `note` | string | Explanation when no data was found |
| `source` | string | keyword_database, google_ads_live or google_ads_queued |
| `data_updated_at` | string | When the keyword's metrics were last refreshed (keyword database) |
| `scraped_at` | string | When this row was produced (UTC) |

## Notes

- Auth: an Apify API token as `Authorization: Bearer <token>`; the MCP server also supports OAuth sign-in.
- Failed or empty results are not charged on most tools; check the pricing on the Store page.
- Questions: hello@wrenfielddata.com
