# Keyword Research Tool: Autocomplete Keywords, Intent & Clusters (`thesamirux/seo-keyword-clusters`) Actor

Turn seed keywords into hundreds of long-tail keywords from Google, YouTube, Bing, DuckDuckGo and Amazon autocomplete, deduplicated and labeled with search intent, question patterns and topic clusters. English, Spanish and Portuguese.

- **URL**: https://apify.com/thesamirux/seo-keyword-clusters.md
- **Developed by:** [Mateo Cao](https://apify.com/thesamirux) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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.

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

### What does Keyword Research Tool do?

**Keyword Research Tool** turns a few seed keywords into **hundreds of real long-tail keywords** from **Google, YouTube, Bing, DuckDuckGo and Amazon autocomplete**, then does the analysis you would otherwise do by hand in a spreadsheet:

- 🔁 **Deduplicates** suggestions across every query and source.
- 🎯 Labels each keyword with its **search intent**: transactional, commercial, navigational or informational.
- ❓ Detects **questions, comparisons and prepositions**, like AnswerThePublic.
- 🧩 Groups keywords into **topic clusters** so you can plan one page per cluster.
- 📊 Ranks keywords by a **popularity score** based on how often and how high they appear in autocomplete.

It works in **English, Spanish and Portuguese** (question and comparison expansions included) and in any other language with alphabet expansion. It's a **Google autocomplete scraper**, a **keyword suggestions API** and a lightweight **AnswerThePublic alternative** in one Actor.

### Why use this keyword research tool?

- ✍️ **Content and SEO planning**: find the questions people ask and group them into articles.
- 🛒 **E-commerce and Amazon sellers**: discover product keywords buyers type into Amazon search.
- 🎬 **YouTube creators**: find video topics from YouTube autocomplete.
- 📣 **PPC**: build keyword lists and negative keywords by intent.
- 🤖 **AI agents and automations**: clean JSON through the Apify API, MCP server, Make, Zapier or n8n.

### What data does it extract?

| Field | Description |
|---|---|
| `keyword` | The keyword |
| `intent` / `intentSignals` | Search intent and the words that decided it |
| `pattern` / `questionWord` | question, comparison, preposition or other; the question word |
| `cluster` / `clusterSize` | Topic cluster label and how many keywords share it |
| `relevance` / `score` | Popularity proxy (0-100 within the run) and its raw value |
| `sources` / `sourceCount` | Which autocomplete sources suggested it |
| `occurrences` / `bestPosition` | How many suggestion lists contained it and its best position |
| `seed` / `modifiers` / `depth` | Where it came from |

The run also stores a **CLUSTERS** record with every cluster, its dominant intent and its top keywords, and a **SUMMARY** record with request statistics per source.

### How to do keyword research with autocomplete

1. Click **Try for free**.
2. Enter one or more **seed keywords**, for example `crm software`.
3. Pick the **sources** (Google is the default) and set the **language** and **country**.
4. Click **Start**. A seed usually takes under a minute.
5. Open the **Overview**, **By cluster** or **Questions** view, or export to CSV, Excel or JSON.

### How much does it cost?

This Actor uses **pay-per-event** pricing with platform usage included: **$1.20 per 1,000 keywords** returned. You only pay for unique keywords delivered, never for duplicates or failed requests.

- One seed with the default expansions on Google typically returns 200-400 keywords: about **$0.25-0.50**.
- Use **Max keywords** to cap the cost of every run. Apify's free plan includes monthly credit to try it.

### Input

See the **Input** tab for every option. The most useful ones:

- **Expansion**: alphabet (`seed a` ... `seed z`), questions (`how seed`, `cómo seed`, `como seed`), prepositions (`seed for`, `seed para`), comparisons (`seed vs`, `seed alternatives`) and digits.
- **Deep expansion**: expands the best keywords of each seed again to reach deeper long tail.
- **Filters**: only keywords containing the seed, excluded words, and the maximum number of keywords.
- **Country**: also selects the Amazon marketplace (US, CA, MX, BR, UK, ES, DE, FR, IT).

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Example items:

```json
[
  {
    "keyword": "crm software for small business",
    "intent": "unclassified",
    "pattern": "preposition",
    "cluster": "small business",
    "clusterSize": 12,
    "relevance": 100,
    "sources": ["bing", "google"],
    "occurrences": 4,
    "bestPosition": 1,
    "seed": "crm software"
  },
  {
    "keyword": "how to choose crm software",
    "intent": "informational",
    "pattern": "question",
    "questionWord": "how",
    "cluster": "choose",
    "clusterSize": 3,
    "relevance": 41,
    "sources": ["google"],
    "seed": "crm software"
  }
]
```

### How the analysis works

- **Intent** is rule-based and multilingual: words like *buy, price, precio, preço* mean transactional; *best, vs, mejor, melhor* mean commercial; *login, sign in, iniciar sesión* mean navigational; questions and words like *guide, ejemplos, dicas* mean informational. Keywords with no clear signal are marked `unclassified` instead of being guessed.
- **Clusters** group keywords by their most shared topic term, after removing the seed and grammar words, so `crm free trial` and `free crm for startups` both go to **free**. Keywords with no shared term go to **other**; keywords that only restate the seed go to **general**.
- **Relevance** is not search volume. Autocomplete does not publish volumes; relevance tells you which keywords autocomplete shows most often and highest, which correlates with demand.

### Tips

- Add **Bing** and **DuckDuckGo** to confirm keywords: those found in several sources are usually the strongest.
- For Spanish or Portuguese markets set the language (`es`, `pt`) and the country (`ar`, `mx`, `es`, `br`...) together.
- Use **Exclude words** to remove competitor brands, or **Only keywords that contain the seed** to stay on topic.

### FAQ

#### Does it give search volume or keyword difficulty?

No. Those come from paid data providers. Use the relevance score to prioritize, and check volumes for your shortlist in your SEO tool of choice.

#### Do I need a proxy?

Usually not. If a source shows up as skipped in the SUMMARY record, lower **Max concurrency per source** or enable a proxy in the **Advanced** section.

#### Is it legal?

The Actor collects public autocomplete suggestions, the same ones any visitor sees while typing, and no personal data. You are responsible for using the results in line with the terms of each search engine and the laws of your country.

#### Investigación de palabras clave en español

Sí: configurá `language` en `es` y el país (`ar`, `mx`, `es`, `co`...). Las preguntas (`cómo`, `qué`, `por qué`), comparaciones y la intención de búsqueda funcionan en español y portugués.

#### I found a bug or need another source

Open an issue in the **Issues** tab with your input. Requests are welcome.

# Actor input Schema

## `seeds` (type: `array`):

One topic per line, for example crm software or como aprender python. Each seed is expanded through autocomplete into hundreds of related long-tail keywords.

## `sources` (type: `array`):

Where to collect suggestions. Google covers most needs; add YouTube for video topics, Amazon for product keywords, Bing and DuckDuckGo for extra coverage. Keywords found in several sources rank higher.

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

Language code of the suggestions (en, es, pt, de, fr...). Question, preposition and comparison expansions are available for English, Spanish and Portuguese; other languages use alphabet expansion.

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

Two-letter country code (us, gb, ar, mx, br, es...). Also selects the Amazon marketplace when Amazon is a source (us, ca, mx, br, gb, es, de, fr, it).

## `expandAlphabet` (type: `boolean`):

Query the seed followed by every letter. The main source of long-tail keywords.

## `expandQuestions` (type: `boolean`):

Query question prefixes in the selected language, e.g. how crm software, cómo crm software. Great for FAQ and blog topics.

## `expandPrepositions` (type: `boolean`):

Query the seed followed by prepositions, e.g. crm software for, crm software without.

## `expandComparisons` (type: `boolean`):

Query comparison modifiers, e.g. crm software vs, crm software alternatives.

## `expandDigits` (type: `boolean`):

Query the seed followed by digits. Useful for years, versions and model numbers.

## `deepExpandTop` (type: `integer`):

Expand the N best keywords found for each seed again with a-z to reach deeper long tail. 0 disables it. Each keyword expanded adds 27 queries per source.

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

Maximum number of keywords returned per run, best first. You only pay for keywords returned.

## `mustContainSeed` (type: `boolean`):

Drop suggestions that do not include every word of their seed (plural forms count as matches).

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

Drop keywords containing any of these words or phrases, for example competitor brands or free.

## `minClusterSize` (type: `integer`):

A topic term must be shared by at least this many keywords to become a cluster. Keywords without such a term go to the cluster "other".

## `maxConcurrencyPerSource` (type: `integer`):

Parallel requests to each source. Lower it if a source starts failing.

## `proxyConfiguration` (type: `object`):

Optional. Autocomplete endpoints usually work without a proxy. Use one only for very large runs or if the SUMMARY record shows a source being skipped after repeated errors.

## Actor input object example

```json
{
  "seeds": [
    "crm software",
    "email marketing"
  ],
  "sources": [
    "google"
  ],
  "language": "en",
  "country": "us",
  "expandAlphabet": true,
  "expandQuestions": true,
  "expandPrepositions": true,
  "expandComparisons": true,
  "expandDigits": false,
  "deepExpandTop": 0,
  "maxKeywords": 1000,
  "mustContainSeed": false,
  "excludeWords": [],
  "minClusterSize": 2,
  "maxConcurrencyPerSource": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

One item per unique keyword, best keywords first

## `clusters` (type: `string`):

Every cluster with its size, dominant intent and top keywords

## `summary` (type: `string`):

Keyword counts and request statistics per source

# 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 = {
    "seeds": [
        "crm software",
        "email marketing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thesamirux/seo-keyword-clusters").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 = { "seeds": [
        "crm software",
        "email marketing",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("thesamirux/seo-keyword-clusters").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 '{
  "seeds": [
    "crm software",
    "email marketing"
  ]
}' |
apify call thesamirux/seo-keyword-clusters --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thesamirux/seo-keyword-clusters"
        }
    }
}
```

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/kBUcnmFMV5qSxBBF9/builds/IeERUztV864KvofCI/openapi.json
