# Keyword Research Tool: Ideas, Volume, KD & Intent (`steady-scrape/keyword-research-explorer`) Actor

Turn 1-20 seed keywords into hundreds of keyword ideas, long-tail suggestions or related searches with Google search volume, CPC, keyword difficulty, intent, SERP features and 12-month trend. Filters. No Semrush login.

- **URL**: https://apify.com/steady-scrape/keyword-research-explorer.md
- **Developed by:** [SteadyScrape](https://apify.com/steady-scrape) (community)
- **Categories:** SEO tools, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.25 / 1,000 keywords

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: Ideas, Volume, KD & Intent

Turn 1–20 seed keywords into hundreds of **keyword ideas, long-tail suggestions or related searches**, each with **Google monthly search volume, CPC, keyword difficulty (0–100), search intent, SERP features and a 12-month trend**. Built for SEO freelancers, content teams, agencies and PPC managers who want Semrush-style keyword research without a $130/month subscription. Pay only for what you get: **$0.003 per keyword**, plus $0.02 per run and $0.02 per keyword-database request (1,000 keyword ideas = $3.04).

No Semrush, Ahrefs or Google Ads account, no scraping, no blocked runs: the data comes from a licensed keyword database (DataForSEO Labs, updated monthly).

### What it does

| Mode | You get |
|---|---|
| **Keyword ideas** (default) | The widest list for your topic. All seed keywords are researched together, so 3 seeds about coffee give one coffee keyword list, ranked by relevance (or by volume). |
| **Long-tail suggestions** | Longer phrases that contain each seed, like `coffee grinder for espresso`, `best coffee grinder under 100`. Sorted by search volume. |
| **Related searches** | Keywords Google shows as "searches related to" each seed, and their related searches (up to 4 levels deep). Great for topic clusters. |

Every keyword comes with:

- **Monthly search volume** (Google, chosen country and language) and the **last 12 months** month by month
- **Trend**: change vs last month, 3 months ago and 1 year ago (%)
- **CPC** and top-of-page bid range (USD), Google Ads competition
- **Keyword difficulty** 0–100 (how hard it is to reach Google's top 10)
- **Search intent**: informational, navigational, commercial or transactional (plus secondary intents)
- **SERP features** on the results page: featured snippet, People Also Ask, local pack, images, videos, shopping...
- Word count and whether it is a question

**Filters run before you are charged**: min/max search volume, max (or min) keyword difficulty, search intent, must contain / must not contain words, questions only, and other-language keywords. Duplicates across seeds are removed and never charged.

### Use cases

- **Plan a content calendar**: one run with 3–5 seeds, *max keyword difficulty 30* and *min volume 50* gives a list of low-competition topics you can rank for.
- **Find FAQ and blog questions**: turn on *Questions only* to get every "how/what/why/can" query people type about your product.
- **Build topic clusters**: *Related searches* mode groups keywords around each seed for pillar pages.
- **PPC keyword lists**: filter on *commercial* and *transactional* intent and sort by CPC in the dataset to find buyer keywords.
- **Local or international SEO**: run the same seeds for the UK, Germany or Brazil in their own language.
- **Feed AI agents and spreadsheets**: call it from the API, Make, Zapier, n8n or an MCP client and get clean JSON/CSV.

### Input example

```json
{
  "seedKeywords": ["coffee grinder", "espresso machine"],
  "mode": "ideas",
  "limitPerSeed": 200,
  "location": "United States",
  "language": "English",
  "minSearchVolume": 50,
  "maxKeywordDifficulty": 40,
  "excludeWords": ["repair"]
}
```

Only `seedKeywords` is required. Countries: any Google country (name or 2-letter code, like `UK`, `DE`, `BR`). Languages: name or code (`English`, `es`, `German`).

### Output example

Real rows from a test run (United States, English, October 2026 data):

| keyword | searchVolume | cpc | keywordDifficulty | searchIntent | trendYearlyPct | serpFeatures |
|---|---|---|---|---|---|---|
| burr coffee grinder | 18100 | 0.96 | 7 | transactional | -76 | ai_overview, popular_products, people_also_ask |
| best coffee grinder | 14800 | 1.10 | 20 | commercial | 0 | ai_overview, people_also_ask, popular_products |
| manual coffee grinder | 12100 | 0.62 | 4 | transactional | -45 | popular_products, people_also_ask, images |
| how to clean a coffee grinder | 1300 | 0.34 | 2 | informational | 85 | ai_overview, people_also_ask, video |

One dataset row (JSON):

```json
{
  "keyword": "best coffee grinder",
  "seedKeyword": "coffee grinder",
  "mode": "related",
  "searchVolume": 14800,
  "cpc": 1.1,
  "competition": "HIGH",
  "competitionIndex": 1,
  "lowTopOfPageBid": 0.39,
  "highTopOfPageBid": 0.8,
  "keywordDifficulty": 20,
  "searchIntent": "commercial",
  "secondaryIntents": [],
  "serpFeatures": ["ai_overview", "people_also_ask", "popular_products", "perspectives", "related_searches", "images"],
  "trend12Months": [{"month": "2025-10", "searchVolume": 12100}, {"month": "2025-11", "searchVolume": 22200}],
  "trendMonthlyPct": 0,
  "trendQuarterlyPct": 22,
  "trendYearlyPct": 0,
  "wordCount": 3,
  "isQuestion": false,
  "location": "United States",
  "language": "English",
  "dataUpdatedAt": "2026-10-15",
  "relatedDepth": 2
}
```

(`trend12Months` is shortened here; you get 12 months.) The run summary (key-value store record `OUTPUT`) lists each seed, how many keywords it returned and how many were removed by your filters.

### Pricing

Pay per event, no subscription:

| Event | Price |
|---|---|
| Run with results | $0.02 (once per run, only when at least one keyword is returned) |
| Keyword | $0.003 per keyword in your dataset |
| Keyword database request | $0.02 per request that returned keywords (see below) |

Price per keyword: $0.003 on the Apify Free plan, $0.0027 on Starter (Bronze), $0.0024 on Scale (Silver), $0.00225 on Business (Gold) and above. The discount is applied automatically. The run fee and the keyword database request fee are the same on every plan.

**What counts as a keyword database request**: each lookup the Actor makes in the keyword database, returning up to 1,000 keywords. *Keyword ideas* researches all your seeds together in **one** request; *long-tail suggestions* and *related searches* make **one request per seed** (all related depth levels come back in that one request). Every extra 1,000 keywords for the same seed or ideas list is one more request. Seeds that return nothing, or whose keywords are all removed by your filters, are not charged.

**Worked examples**

- 100 keyword ideas for one seed: $0.02 + $0.02 + 100 × $0.003 = **$0.34**
- 1,000 keyword ideas from 5 seeds: $0.02 + $0.02 + $3.00 = **$3.04**
- Long-tail suggestions, 5 seeds × 200 keywords: $0.02 + 5 × $0.02 + $3.00 = **$3.12**
- 5,000 keyword ideas: $0.02 + 5 × $0.02 + $15.00 = **$15.12**

You are **never charged** for runs without results, seeds that return nothing, provider errors, keywords removed by your filters or duplicates. Set *Maximum cost per run* in the run options and the Actor stops at that budget.

**Apify Free plan**: up to 3 seed keywords and 100 keywords per run, so you can try it on your own topic. Paid Apify plans get the full 20 seeds and 1,000 keywords per seed.

### How it compares

| | This Actor | SEO suite subscription | Free keyword planners |
|---|---|---|---|
| Price | ~$3.04 per 1,000 keywords, no monthly fee | $100–$250 per month | Free, but ranges or a few rows |
| Keyword difficulty, intent, SERP features | Yes | Yes | Rarely |
| 12-month trend | Yes | Yes | Sometimes |
| API / automation | Built in (Apify API, webhooks, integrations) | Extra plan | No |
| Login or Google Ads account | Not needed | Needed | Usually needed |

### FAQ

**Where does the data come from?** From DataForSEO Labs, a licensed database built from Google Ads keyword data and Google results, refreshed monthly. It is the same type of data SEO suites show.

**Why do numbers differ from Google Keyword Planner?** Keyword Planner shows ranges unless you spend on ads, and groups close variants. Here you get one exact monthly average per keyword. Expect the same order of magnitude, not identical numbers.

**What is keyword difficulty?** A 0–100 score of how hard it is to reach Google's top 10, based on the strength of the pages already ranking. Under 30 is usually realistic for newer sites.

**Ideas vs suggestions vs related?** Ideas = broad topic list (can include keywords without your seed words). Suggestions = phrases that contain the seed. Related = Google's related searches, good for clusters.

**Some seeds returned nothing.** Very new or very niche terms may not be in the database yet, or your filters removed everything. Those seeds cost nothing; try a broader seed or loosen the filters.

**Can I get more than 1,000 keywords per seed?** Use several seeds or several runs. In ideas mode 20 seeds × 1,000 = up to 20,000 keywords.

**Does it support other countries and languages?** Yes, every Google Ads country and language.

**Do I need an API key?** No. Everything is included in the per-keyword price.

### Integrations

- **Schedule** it monthly from the Apify console to refresh volumes and trends.
- **API**: start a run with `POST https://api.apify.com/v2/acts/steady-scrape~keyword-research-explorer/runs` and read the dataset as JSON, CSV or Excel.
- **Make, Zapier, n8n**: use the Apify app/node to send keywords to Google Sheets, Airtable or Notion.
- **AI agents**: works with the Apify MCP server, so Claude, ChatGPT or Cursor agents can run keyword research for you.

### More from SteadyScrape

- [Keyword Search Volume API: Bulk Volume & CPC](https://apify.com/steady-scrape/keyword-search-volume): already have your keyword list? Get volume, CPC and trends for up to thousands of keywords per run.
- [AI Search Visibility Tracker: ChatGPT & Perplexity](https://apify.com/steady-scrape/ai-brand-visibility-tracker): see whether ChatGPT and Perplexity mention, rank and cite your brand versus your competitors.
- [Competitor Keyword Gap: Missing & Ranked Keywords](https://apify.com/steady-scrape/competitor-keywords-gap): the keywords your competitors rank for and you don't, with search volume, CPC, difficulty and their positions.
- [Bulk Domain Checker: Rank, Backlinks & Traffic](https://apify.com/steady-scrape/domain-seo-metrics): organic and paid traffic estimates, ranked keywords and backlinks for a list of domains.

See every **SteadyScrape (steady-scrape)** Actor on [our Apify profile](https://apify.com/steady-scrape).

### Need something else?

Open an issue in the **Issues** tab. SteadyScrape usually replies within a day.

### Acceptable use

You may not use results from this service to build or operate a search engine, or any product or service that competes with or harms the business of search engine providers.

— SteadyScrape

# Actor input Schema

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

1-20 topics or keywords to expand, like 'coffee grinder' or 'crm software'. Apify Free plan: first 3 seeds per run.

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

Ideas = the widest list for your topic (all seeds in one query). Suggestions = longer phrases containing each seed. Related = keywords Google shows as related searches for each seed.

## `limitPerSeed` (type: `integer`):

Most keywords returned per seed (ideas mode: per seed in total, so 3 seeds x 100 = up to 300). Apify Free plan: 100 keywords per run.

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

Country name or 2-letter code, like United States, UK, DE.

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

Language name or code, like English, es, German.

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

Skip keywords with fewer monthly searches. Empty = no minimum.

## `maxSearchVolume` (type: `integer`):

Skip keywords with more monthly searches (handy for long-tail work).

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

Only keywords that are this easy or easier to rank for. 30 is a common 'low competition' cut-off.

## `minKeywordDifficulty` (type: `integer`):

Rarely needed. Skip keywords easier than this.

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

Keep only keywords with these main intents. Empty = all.

## `includeWords` (type: `array`):

Keep only keywords that contain at least one of these words, like 'best' or 'for'.

## `excludeWords` (type: `array`):

Drop keywords that contain any of these words, like brand names or 'free'.

## `questionsOnly` (type: `boolean`):

Keep only question keywords (how, what, why, can, is...). Great for FAQ and blog ideas.

## `includeOtherLanguages` (type: `boolean`):

By default keywords detected as another language than the one chosen are dropped.

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

Ideas mode only. Suggestions and related keywords are always sorted by search volume.

## `ignoreSynonyms` (type: `boolean`):

Ideas and suggestions modes: drop close variants (plural, word order) of the same keyword.

## Actor input object example

```json
{
  "seedKeywords": [
    "coffee grinder"
  ],
  "mode": "ideas",
  "limitPerSeed": 100,
  "location": "United States",
  "language": "English",
  "questionsOnly": false,
  "includeOtherLanguages": false,
  "sortBy": "relevance",
  "ignoreSynonyms": false
}
```

# 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 = {
    "seedKeywords": [
        "coffee grinder"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("steady-scrape/keyword-research-explorer").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": ["coffee grinder"] }

# Run the Actor and wait for it to finish
run = client.actor("steady-scrape/keyword-research-explorer").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": [
    "coffee grinder"
  ]
}' |
apify call steady-scrape/keyword-research-explorer --silent --output-dataset

```

## MCP server setup

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

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/4Bf1HpW28zXaWUbYc/builds/e5a6SChPGTOgMl4dz/openapi.json
