# Keyword Suggestions – Google, YouTube & Amazon Autocomplete (`openharvest/keyword-suggestions`) Actor

Keyword suggestions from Google, YouTube, Amazon, Bing and DuckDuckGo autocomplete in one run. Expand a seed with A–Z, numbers, questions, prepositions or your own modifiers, up to two levels deep, for any country and language. One row per suggestion, no start fee.

- **URL**: https://apify.com/openharvest/keyword-suggestions.md
- **Developed by:** [Enes Bulanık](https://apify.com/openharvest) (community)
- **Categories:** SEO tools, Marketing, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 1,000 keyword suggestions

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

## Keyword Suggestions – Google, YouTube & Amazon Autocomplete

Keyword suggestions from Google, YouTube, Amazon, Bing and DuckDuckGo autocomplete in one run. Expand a seed with A–Z, numbers, questions, prepositions or your own modifiers, up to two levels deep, for any country and language. One row per suggestion, no start fee.

**Price: $0.50 per 1,000 keyword suggestions. No start fee.**

### What does the Keyword Suggestions Scraper do?

It sends your keywords to the same public autocomplete services that power each site's search box and saves every suggestion with its context:

- **Google Search autocomplete**, up to 15 suggestions per query
- **YouTube search suggestions**, for video titles and topic research
- **Bing autocomplete**, up to 20+ suggestions per query
- **DuckDuckGo autocomplete**
- **Amazon search suggestions** for 21 marketplaces (US, CA, MX, BR, UK, DE, FR, IT, ES, NL, SE, PL, BE, TR, IN, AE, SA, EG, JP, AU, SG)

**Expand mode** turns one seed into hundreds of long-tail keywords:

| Expansion | Queries sent for seed "coffee maker" |
|---|---|
| `alphabet` | coffee maker a, coffee maker b … coffee maker z |
| `numbers` | coffee maker 0 … coffee maker 9 |
| `questions` | how / what / why / can / where / when / which / who / is / are / does / will coffee maker |
| `prepositions` | coffee maker vs / for / near / with / without / to / like / or / and / in / versus / is |
| custom | your own words, e.g. `best {keyword} 2026`, `günstig` |
| depth 2 | every suggestion found is queried again ("suggestions of suggestions") |

Duplicates are removed automatically. Suggestions identical to the seed or to the query sent are skipped, so you never pay for them.

### Use cases

- **SEO keyword research.** Find long-tail keywords, questions for FAQ sections and content ideas.
- **YouTube SEO.** See what viewers actually type into YouTube search.
- **Amazon and e-commerce.** Find buyer-intent keywords for listings, PPC campaigns and product research.
- **PPC and Google Ads.** Build seed lists and negative-keyword candidates.
- **Multi-country and multilingual research.** Compare suggestions across countries and languages in one dataset.
- **AI agents and content pipelines.** Feed real search demand into LLM-generated briefs and outlines.

### How to use it

1. Click **Try for free**.
2. Enter one or more **Seed keywords**.
3. Pick **Search engines**, your **Country** (`us`, `gb`, `de`, …) and **Language** (`en`, `de`, …).
4. Optional: switch **Mode** to **expand**, choose expansions and set **Depth** to 2.
5. Click **Start**, then download the results as CSV, Excel or JSON, or use the API.

### Input example

```json
{
    "keywords": ["coffee maker", "seo tools"],
    "engines": ["google", "youtube", "bing", "duckduckgo", "amazon"],
    "mode": "expand",
    "expansions": ["alphabet", "questions", "prepositions"],
    "customModifiers": ["best {keyword} 2026"],
    "depth": 1,
    "country": "us",
    "language": "en",
    "maxResultsPerKeyword": 500
}
```

Running with no input (`{}`) returns the suggestions for "coffee maker" from all five engines (about 60 rows).

### Output

One row per suggestion. This is real output:

```json
[
    { "type": "suggestion", "seed": "coffee maker", "suggestion": "coffee maker with grinder", "engine": "google", "modifier": null, "modifierType": null, "position": 1, "country": "us", "language": "en", "depth": 1, "query": "coffee maker", "parent": null },
    { "type": "suggestion", "seed": "coffee maker", "suggestion": "ninja coffee maker", "engine": "amazon", "modifier": null, "modifierType": null, "position": 2, "country": "us", "language": "en", "depth": 1, "query": "coffee maker", "parent": null },
    { "type": "suggestion", "seed": "coffee maker", "suggestion": "how coffee makers work", "engine": "youtube", "modifier": "how", "modifierType": "question", "position": 1, "country": "us", "language": "en", "depth": 1, "query": "how coffee maker", "parent": null },
    { "type": "suggestion", "seed": "coffee maker", "suggestion": "coffee maker vs espresso machine", "engine": "google", "modifier": "vs", "modifierType": "preposition", "position": 1, "country": "us", "language": "en", "depth": 1, "query": "coffee maker vs", "parent": null },
    { "type": "suggestion", "seed": "coffee maker", "suggestion": "coffee maker vs coffee machine", "engine": "bing", "modifier": "vs", "modifierType": "preposition", "position": 1, "country": "us", "language": "en", "depth": 1, "query": "coffee maker vs", "parent": null },
    { "type": "suggestion", "seed": "kahve makinesi", "suggestion": "kahve makinesi fiyatları", "engine": "google", "modifier": null, "modifierType": null, "position": 1, "country": "tr", "language": "tr", "depth": 1, "query": "kahve makinesi", "parent": null }
]
```

| Field | Meaning |
|---|---|
| `seed` | Your input keyword |
| `suggestion` | The autocomplete suggestion |
| `engine` | `google`, `youtube`, `bing`, `duckduckgo` or `amazon` |
| `modifier` / `modifierType` | Modifier used (`a`, `how`, `vs`, …) and its group (`alphabet`, `number`, `question`, `preposition`, `custom`, `suggestion`). `null` for the plain seed. |
| `position` | 1-based rank in that engine's list |
| `country`, `language` | Market used |
| `depth`, `query`, `parent` | Depth (1 or 2), the exact text sent, and for depth 2 the suggestion that was expanded |

Free `status` rows explain anything unusual: `ENGINE_UNSUPPORTED_COUNTRY` (for example Amazon in a country without a marketplace), `ENGINE_BLOCKED` (an engine kept rate-limiting), `NO_SUGGESTIONS` and `NO_RESULTS`.

By default a suggestion appears once **per engine**, so you can see which engines agree. Turn on **Remove duplicates across engines** to keep each suggestion only once per seed.

### Pricing

Pay-per-event: you only pay for suggestions saved, and platform usage is included. **There is no start fee.**

| Event | Price | When it is charged |
|---|---|---|
| `keyword` | **$0.0005** per suggestion ($0.50 / 1,000) | Each suggestion row saved |
| Status rows | **Free** | Unsupported country, blocked engine, no results |

| Job | Approx. rows | Cost |
|---|---|---|
| 1 seed, simple, 5 engines | ~60 | **$0.03** |
| 1 seed, expand (A–Z + questions + prepositions), 5 engines | ~1,000–2,000 | **~$0.50–1.00** |
| 100 seeds, simple, Google only | ~1,400 | **~$0.70** |

Use **Max suggestions per seed keyword** and Apify's **Max cost per run** to cap spending. The Actor stops exactly at your budget.

### Use with AI agents (MCP)

This Actor works as a tool for AI agents through the [Apify MCP server](https://mcp.apify.com) (Claude, Cursor, VS Code, OpenAI Agents and others). Example tool input:

```json
{ "keywords": ["standing desk"], "engines": ["google", "amazon"], "mode": "expand", "expansions": ["questions"], "country": "gb", "language": "en", "maxResultsPerKeyword": 100 }
```

The agent gets flat rows (`seed`, `suggestion`, `engine`, `modifier`, `position`) that it can group, cluster or turn into content briefs directly.

### FAQ

**Does it return search volume?**
No. Autocomplete services don't publish volumes. They show what people actually type, ordered by popularity, so `position` is a useful relative signal. Combine the output with a volume tool if you need exact numbers.

**How do country and language work?**
`country` selects the Amazon marketplace, the Bing market and the DuckDuckGo region, and is passed to Google and YouTube as `gl`. `language` is passed as `hl` and used for Bing and DuckDuckGo. Google also personalizes by the location of the request IP. For the most local Google results, enable **Apify Proxy** with a proxy country matching your target country.

**Are the modifiers translated?**
The built-in question and preposition words are English. For other languages, add your own words in **Custom modifiers**, for example `wie {keyword}` or `günstig`. The alphabet and number expansions work in any language.

**Will I get blocked?**
The Actor sends one request at a time per engine with a polite delay (default 250 ms) and retries with backoff. In testing, 915 requests (3 seeds × 61 queries × 5 engines) finished in about a minute with zero failures. If an engine still rate-limits a very large run, it is disabled with a free `ENGINE_BLOCKED` row and the other engines continue.

**Is Amazon really included?**
Yes. The Actor uses Amazon's public search-completion endpoint, the one the amazon.\* search box uses. It was verified for all 21 listed marketplaces.

### Is it legal?

The Actor only reads **public autocomplete suggestions**, the same text anyone sees while typing in a search box. It does not log in and does not collect personal data. Suggestions are generated by each search engine and may occasionally contain brand names or trademarks. Use the data in line with each site's terms and applicable law.

### Related actors

Other actors by the same developer:

- **Google Trends Scraper – Interest Over Time & Related Queries** – check how demand for the keywords you found changes over time
- **YouTube Transcript Scraper – Captions, Subtitles & Video Data** – read what the top videos for a keyword actually say
- **Website SEO Audit Crawler – Broken Links, Schema & llms.txt** – audit the pages you plan to target with these keywords

### Support & feedback

Missing an engine or a country? Open an issue in the **Issues** tab.

# Actor input Schema

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

One or more seed keywords, e.g. <code>coffee maker</code>, <code>seo tools</code>. Each suggestion row records which seed it came from.

## `engines` (type: `array`):

Autocomplete sources to query. Amazon is available for 21 marketplaces (us, ca, mx, br, gb, de, fr, it, es, nl, se, pl, be, tr, in, ae, sa, eg, jp, au, sg).

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

<b>simple</b> – suggestions for each seed as typed (1 request per engine).<br><b>expand</b> – also query the seed with modifiers (A–Z, 0–9, questions, prepositions, your custom modifiers) to find hundreds of long-tail keywords.

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

2-letter country code (ISO 3166-1), e.g. <code>us</code>, <code>gb</code>, <code>de</code>, <code>in</code>, <code>br</code>. Selects the Amazon marketplace, Bing market and DuckDuckGo region and is passed to Google/YouTube as <code>gl</code>.

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

2-letter language code (ISO 639-1), e.g. <code>en</code>, <code>de</code>, <code>es</code>, <code>tr</code>. Passed to Google/YouTube as <code>hl</code> and used for the Bing market and DuckDuckGo region.

## `maxResultsPerKeyword` (type: `integer`):

Stop collecting for a seed after this many unique suggestions (all engines together). 0 = no limit. You pay per suggestion, so this caps your cost.

## `expansions` (type: `array`):

Used in <b>expand</b> mode. <b>alphabet</b>: “seed a” … “seed z”. <b>numbers</b>: “seed 0” … “seed 9”. <b>questions</b>: “how/what/why/can/where/when/which/who/is/are/does/will seed”. <b>prepositions</b>: “seed vs/for/near/with/without/to/like/or/and/in/versus/is”. Modifier words are English.

## `customModifiers` (type: `array`):

Optional extra modifiers in your own language. Appended to the seed (<code>günstig</code> → “coffee maker günstig”) or placed with <code>{keyword}</code> (<code>best {keyword} 2026</code>).

## `depth` (type: `integer`):

1 = suggestions of the seed (and its modifiers). 2 = also query every unique suggestion found at depth 1 (“suggestions of suggestions”, much larger output – use with a max limit). Duplicates are always removed.

## `dedupeAcrossEngines` (type: `boolean`):

By default a suggestion is kept once per engine (so you can see which engines suggest it). Turn on to keep each suggestion only once per seed, from the first engine that returned it.

## `requestDelayMs` (type: `integer`):

Pause between two requests to the same engine. Engines are queried in parallel; the default is polite and fast enough for thousands of keywords.

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

Usually not needed. Use it if an engine starts rate-limiting large runs (status row ENGINE_BLOCKED) or to get suggestions as seen from a specific country (Apify Proxy with a country).

## Actor input object example

```json
{
  "keywords": [
    "coffee maker",
    "seo tools",
    "running shoes"
  ],
  "engines": [
    "google",
    "amazon"
  ],
  "mode": "expand",
  "country": "de",
  "language": "de",
  "maxResultsPerKeyword": 500,
  "expansions": [
    "alphabet",
    "questions",
    "prepositions"
  ],
  "customModifiers": [
    "best {keyword}",
    "cheap",
    "review"
  ],
  "depth": 2,
  "dedupeAcrossEngines": false,
  "requestDelayMs": 500,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

## `files` (type: `string`):

Records saved in the default key-value store, e.g. the run summary.

# 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",
        "seo tools"
    ],
    "engines": [
        "google",
        "youtube",
        "bing",
        "duckduckgo",
        "amazon"
    ],
    "mode": "simple",
    "country": "us",
    "language": "en",
    "maxResultsPerKeyword": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/keyword-suggestions").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",
        "seo tools",
    ],
    "engines": [
        "google",
        "youtube",
        "bing",
        "duckduckgo",
        "amazon",
    ],
    "mode": "simple",
    "country": "us",
    "language": "en",
    "maxResultsPerKeyword": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("openharvest/keyword-suggestions").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",
    "seo tools"
  ],
  "engines": [
    "google",
    "youtube",
    "bing",
    "duckduckgo",
    "amazon"
  ],
  "mode": "simple",
  "country": "us",
  "language": "en",
  "maxResultsPerKeyword": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call openharvest/keyword-suggestions --silent --output-dataset

```

## MCP server setup

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

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/VesuM4qYKYKW7wDdk/builds/nWWHVqkXSqyx80bUa/openapi.json
