# Keyword Research & Autocomplete Scraper | API (`beacondata/keyword-research-scraper`) Actor

Pull hundreds of real autocomplete keyword ideas per seed from Google, YouTube, Amazon and Bing. Pay per seed that returns ideas — empty seeds are free.

- **URL**: https://apify.com/beacondata/keyword-research-scraper.md
- **Developed by:** [Jeffrey Inman](https://apify.com/beacondata) (community)
- **Categories:** SEO tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 keyword set delivereds

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 Research & Autocomplete Scraper

Turn a few seed terms into **hundreds of real keyword ideas** — pulled straight from the autocomplete of **Google, YouTube, Amazon, and Bing**. These are the actual phrases people type, so they're gold for SEO, content planning, PPC, and Amazon product research.

**You pay per seed that returns ideas.** A seed that comes back empty costs $0. No subscription, no seat fees — run 5 seeds or 5,000, you're billed only for the ones that deliver.

This is the data behind tools like AnswerThePublic and Keyword Tool.io, as a raw, scriptable endpoint you can schedule or wire into your own stack.

### Input

```json
{
    "keywords": ["coffee maker", "running shoes"],
    "sources": ["google", "youtube", "amazon"],
    "expand": "deep",
    "gl": "US",
    "hl": "en"
}
```

- `keywords` — your seed terms.
- `sources` — any of `google`, `youtube`, `amazon`, `bing`. Results merge and dedupe across all chosen sources.
- `expand` — how hard to mine each seed:
  - `none` — the seed's direct suggestions
  - `alphabet` — seed + a…z (e.g. "coffee maker a", "coffee maker b") — dozens more ideas
  - `questions` — how / why / what / where / can / does + seed — great for content & FAQs
  - `deep` — alphabet + questions + prepositions (for, with, vs, near…) — the most ideas per seed
- `gl` / `hl` — country and language (Google).

### Output per seed

```json
{
    "seed": "coffee maker",
    "sources": ["google", "amazon"],
    "expand": "deep",
    "count": 214,
    "suggestions": ["coffee maker with grinder", "coffee maker for one", "coffee maker vs french press", "..."]
}
```

Seeds that return nothing come back as `{ seed, error, errorType }` and are **not charged**.

### What people use it for

- **SEO & content:** find long-tail phrases and question keywords competitors miss
- **PPC:** build out keyword and negative-keyword lists fast
- **Amazon sellers:** mine buyer search terms straight from Amazon's own autocomplete
- **YouTube creators:** title and topic ideas from YouTube's search suggestions

Pairs naturally with the [Google Trends Scraper](https://apify.com/beacondata/google-trends-scraper): discover ideas here, then validate demand there.

### Use it from code

```bash
curl -s -X POST "https://api.apify.com/v2/acts/beacondata~keyword-research-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["coffee maker"], "sources": ["google"], "expand": "deep"}'
```

Works everywhere Apify does: REST API, scheduled runs, webhooks, the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) (AI agents can call it as a tool), n8n, Make, Zapier.

### Honest limitations

- These are autocomplete *suggestions* (what people search), not monthly search-volume numbers. For demand strength, pair with the Trends actor.
- Google/Bing suggestions are localized by `gl`/`hl`; Amazon is the US marketplace.
- Very obscure seeds may legitimately return nothing (that's free).

### Automate it with n8n

A ready-made workflow feeds your seed keywords through all four autocomplete engines and appends one row per idea to Google Sheets. In n8n: **Workflow → Import from URL**:

```
https://inmanjeffrey89-cell.github.io/data-tools/workflows/t3-keyword-research-sheets.json
```

No community nodes (plain HTTP Request) — works on n8n Cloud and self-hosted. [More ready-made workflows](https://inmanjeffrey89-cell.github.io/data-tools/n8n-workflows).

### Support

Found a bug or want another source added? Open an issue on the Issues tab — it's read daily and answered.

# Actor input Schema

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

Your starting terms. Each seed is expanded into the real phrases people type, returned as one result row per seed. Required.

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

Which autocomplete engines to mine. Results from all chosen sources are merged and de-duplicated per seed. Google is broad web intent; YouTube is video intent; Amazon is buyer/product intent; Bing is an extra web source. Default is Google.

## `expand` (type: `string`):

How hard to mine each seed. 'none' is the seed's direct suggestions; 'alphabet' appends a–z for dozens more; 'questions' prefixes how/why/what for content ideas; 'deep' combines all three and returns the most ideas per seed (and so the most value per charge). Default none.

## `gl` (type: `string`):

Two-letter country code (US, GB, DE) to localize Google/Bing suggestions. Empty uses the default locale.

## `hl` (type: `string`):

Language code (en, es, de…) for suggestions. Default en.

## Actor input object example

```json
{
  "keywords": [
    "coffee maker",
    "running shoes"
  ],
  "sources": [
    "google"
  ],
  "expand": "none",
  "gl": "",
  "hl": "en"
}
```

# Actor output Schema

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

One item per seed: seed, sources, expand, count, suggestions\[]. Seeds with no results carry error + errorType and are not charged.

# 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",
        "running shoes"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("beacondata/keyword-research-scraper").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",
        "running shoes",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("beacondata/keyword-research-scraper").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",
    "running shoes"
  ]
}' |
apify call beacondata/keyword-research-scraper --silent --output-dataset

```

## MCP server setup

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

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/TjMEaz32jQl0dXqM0/builds/HSmWQLx55h237Vw1T/openapi.json
