# Keyword Research Tool - Ideas, Volume, KD, Intent & SERP (`wrenfield-data/keyword-research-tool`) Actor

Keyword ideas from any seed with search volume, CPC, keyword difficulty (KD), search intent and SERP features in one row. Ahrefs Keywords Explorer & Semrush Keyword Magic alternative. 90+ countries, up to 10,000 keywords per run, $3 per 1,000 keywords.

- **URL**: https://apify.com/wrenfield-data/keyword-research-tool.md
- **Developed by:** [Wrenfield Data](https://apify.com/wrenfield-data) (community)
- **Categories:** SEO tools
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 keyword results

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 Tool: keyword ideas with volume, KD, intent and SERP features in one row

**Keyword Research Tool** turns one seed keyword into hundreds or thousands of **keyword ideas**, and every row already has **search volume, CPC, keyword difficulty (KD 0-100), search intent and SERP features** (AI Overview, featured snippet, People Also Ask, local pack, shopping, video). It's a pay-as-you-go **Ahrefs Keywords Explorer / Semrush Keyword Magic Tool alternative**: no subscription and no login, at **$3 per 1,000 keywords**.

- 🔎 **3 research modes**: topical **ideas**, long-tail **suggestions** that contain your seed, and Google **related searches** chains.
- 📊 **Everything in one row**: volume, CPC, Google Ads competition and bids, KD with an easy-to-read level, intent, SERP features, 12-month trend and top-10 backlink strength.
- 🎯 **Filters built in**: minimum volume, maximum KD ("easy wins" under 30) and intent, so you pay only for keywords you'll use.
- ⚡ **Fast**: the default 100-keyword run finishes in about 5 seconds, which suits AI agents and the Apify MCP server.
- 🌍 **90+ countries** and their languages.

### What data do you get?

| Field | What it is |
| --- | --- |
| `keyword`, `type`, `seed_keyword` | The keyword, how it was found (`seed`, `idea`, `suggestion`, `related`) and its seed |
| `search_volume`, `search_volume_trend`, `monthly_searches` | Average monthly Google searches, % change (month/quarter/year) and optional 12-month history |
| `cpc`, `competition`, `competition_index`, `low_top_of_page_bid`, `high_top_of_page_bid` | Google Ads cost and competition |
| `keyword_difficulty`, `difficulty_level` | SEO difficulty 0-100 and `very easy` … `very hard` |
| `search_intent`, `secondary_intents` | informational, navigational, commercial or transactional |
| `serp_features`, `has_ai_overview`, `has_featured_snippet`, `has_people_also_ask`, `has_local_pack`, `has_shopping_results`, `has_video` | What Google shows on page 1 |
| `avg_backlinks_top10`, `avg_referring_domains_top10` | How strong the pages ranking in the top 10 are |

### How to do keyword research

1. Enter one or more **Seed keywords** (e.g. `running shoes`).
2. Pick a **Research mode**: start with **ideas**. Use **suggestions** for long-tail phrases that contain your seed.
3. Choose the **Country** and **Language**.
4. Optional: set **Max keyword difficulty** to 30 and **Min search volume** to 100 to keep only realistic targets.
5. Click **Start** and sort the table by volume or KD.

### Input example

```json
{
    "seedKeywords": ["running shoes"],
    "mode": "ideas",
    "location": "United States",
    "language": "English",
    "maxKeywords": 500,
    "maxKeywordDifficulty": 30,
    "minSearchVolume": 100
}
```

### Output example

```json
{
    "keyword": "running shoes",
    "type": "seed",
    "seed_keyword": "running shoes",
    "search_volume": 301000,
    "cpc": 1.09,
    "competition": "HIGH",
    "competition_index": 100,
    "keyword_difficulty": 43,
    "difficulty_level": "possible",
    "search_intent": "transactional",
    "secondary_intents": [],
    "serp_features": ["popular_products", "product_considerations", "organic", "local_pack", "people_also_ask", "related_searches", "images"],
    "has_ai_overview": false,
    "has_people_also_ask": true,
    "has_local_pack": true,
    "has_shopping_results": true,
    "avg_backlinks_top10": 369,
    "avg_referring_domains_top10": 87,
    "search_volume_trend": {"monthly": -18, "quarterly": 0, "yearly": -55},
    "location": "United States",
    "language": "English"
}
```

### Pricing

This Actor uses **pay-per-event** pricing. Paid Apify plans get automatic volume discounts (Bronze, Silver, Gold).

| Event | Price |
| --- | --- |
| Keyword result (`keyword-result`) | **$0.003** per keyword row ($3 per 1,000) |
| Research request (`research-request`) | **$0.025** per keyword-database lookup of up to 1,000 keywords (the seed-keyword lookup is one more) |

| Example run | Cost |
| --- | --- |
| Default: 1 seed, 100 keywords | $0.35 |
| 1 seed, 1,000 keyword ideas | $3.05 |
| 5 seeds, 10,000 keyword ideas | $30.28 |

Set **Maximum cost per run** in the run options to cap your spend; the Actor stops cleanly at the cap.

**Free Apify plan:** 1 seed keyword and 50 keywords per run, so you can try it before you upgrade.

### Use it through the API, on a schedule or with AI agents

**One-link MCP setup:** `https://mcp.apify.com?tools=wrenfield-data/keyword-research-tool` (Claude, Cursor, VS Code or any MCP client). Set `maxTotalChargeUsd` on the run to cap what it can charge.

Call it from Python, JavaScript or any HTTP client with the [Apify API](https://docs.apify.com/api/v2), or connect it to Make, Zapier, n8n and Google Sheets. AI agents can use it as a tool through the Apify MCP server. The output fields are fully described in the dataset schema, so agents know what each column means.

```bash
curl -X POST "https://api.apify.com/v2/acts/wrenfield-data~keyword-research-tool/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"seedKeywords": ["running shoes"], "maxKeywords": 100}'
```

### FAQ

**Where does the data come from?**
From a licensed SEO keyword database (DataForSEO Labs) built from Google Ads data and Google results pages. The Actor doesn't scrape Ahrefs or Semrush, and it doesn't log in anywhere.

**How is this different from Keyword Search Volume?**
[Keyword Search Volume](https://apify.com/wrenfield-data/keyword-search-volume) gives exact Google Keyword Planner volumes for a list you already have. This tool *finds* new keywords and adds KD, intent and SERP features to each one.

**Why do volumes differ from other tools?**
Every tool models Google data differently. Compare keywords relative to each other in the same dataset.

### Related SEO tools

From the same developer. Every tool exports flat JSON, CSV or Excel, so one dataset feeds the next:

- [SEO Toolkit All-in-One](https://apify.com/wrenfield-data/seo-toolkit): domain overview, ranked keywords, competitors, backlinks and live SERPs
- [Keyword Search Volume](https://apify.com/wrenfield-data/keyword-search-volume): exact Google Keyword Planner volume and CPC for your own list
- [Bulk Keyword Difficulty Checker](https://apify.com/wrenfield-data/keyword-difficulty-checker): KD and intent for thousands of keywords
- [Competitor Keywords](https://apify.com/wrenfield-data/competitor-keywords): every keyword a domain ranks for
- [Google Autocomplete Keyword Expander](https://apify.com/wrenfield-data/google-autocomplete-keyword-expander): long-tail ideas from Google and YouTube autocomplete
- [People Also Ask Scraper](https://apify.com/wrenfield-data/people-also-ask-scraper): questions people ask for your keywords
- [AI Answer Scraper](https://apify.com/wrenfield-data/ai-answer-scraper): what ChatGPT, Perplexity and Google AI Mode answer for your keywords

### Feedback and support

Missing a field, hit an error, or need another country or option? Open an issue on the **Issues** tab and include the run ID. We read every issue and reply there.

### Acceptable use

- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Google, DataForSEO, Ahrefs or Semrush. Product names are used only to describe compatibility.
- Don't resell the raw data as your own keyword database, and don't use it to build a competing search engine or to harm the search engines the data comes from.
- The Actor may not be used from, or for people or organizations in, Russia, Belarus, Cuba, Iran, Syria, Myanmar, North Korea, Crimea or the Russian-occupied territories of Ukraine.
- You are responsible for using the results lawfully.

# Actor input Schema

## `seedKeywords` (type: `array`):

One or more topics to research, e.g. <code>running shoes</code>. "Ideas" mode accepts up to 200 seeds at once; "suggestions" and "related" use up to 20.

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

How keywords are found. <b>ideas</b> = topically related keywords, <b>suggestions</b> = phrase-match long tail containing your seed, <b>related</b> = Google related-searches graph.

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

Country: name (<code>United States</code>), 2-letter code (<code>DE</code>) or location code (<code>2840</code>).

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

Language name or code (<code>English</code>, <code>es</code>). Leave empty for the main language of the country.

## `maxKeywords` (type: `integer`):

Maximum keyword rows per run, including the seed keywords. The default of 100 finishes in a few seconds.

## `sortBy` (type: `string`):

Which keywords come first (and are kept when you hit Max keywords).

## `minSearchVolume` (type: `integer`):

Only keywords with at least this many monthly searches.

## `maxKeywordDifficulty` (type: `integer`):

Only keywords with KD at or below this value (0-100). Use 30 to find easy wins.

## `searchIntents` (type: `array`):

Only keywords with these main intents. Leave empty for all.

## `includeSeedKeywords` (type: `boolean`):

Add a row with full metrics for each seed keyword (one extra data request).

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

Add the last 12 months of search volume to each row.

## `relatedDepth` (type: `integer`):

Only for "related" mode: how many levels of related searches to follow (more = more keywords).

## Actor input object example

```json
{
  "seedKeywords": [
    "running shoes"
  ],
  "mode": "ideas",
  "location": "United States",
  "language": "English",
  "maxKeywords": 50,
  "sortBy": "relevance",
  "includeSeedKeywords": true,
  "includeMonthlySearches": false,
  "relatedDepth": 2
}
```

# Actor output Schema

## `keywords` (type: `string`):

No description

## `allFields` (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 = {
    "seedKeywords": [
        "running shoes"
    ],
    "location": "United States",
    "language": "English",
    "maxKeywords": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("wrenfield-data/keyword-research-tool").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 = {
    "seedKeywords": ["running shoes"],
    "location": "United States",
    "language": "English",
    "maxKeywords": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("wrenfield-data/keyword-research-tool").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 '{
  "seedKeywords": [
    "running shoes"
  ],
  "location": "United States",
  "language": "English",
  "maxKeywords": 50
}' |
apify call wrenfield-data/keyword-research-tool --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wrenfield-data/keyword-research-tool"
        }
    }
}
```

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/7ayoBcw5bf6Ac3fyc/builds/Wod5STrYBn8BUk3gJ/openapi.json
