# Keyword Suggestions Scraper - Google, YouTube & Bing (`rjmacarthy/keyword-suggestions-scraper`) Actor

Keyword research from autocomplete: expand seed keywords into suggestions from Google, YouTube, Google Shopping, News, Images and Bing in one run. Alphabet, question and preposition expansion, depth 2, question tagging and an only-new mode. No start fee.

- **URL**: https://apify.com/rjmacarthy/keyword-suggestions-scraper.md
- **Developed by:** [rj](https://apify.com/rjmacarthy) (community)
- **Categories:** SEO tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $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 Scraper - Google, YouTube, Bing & Shopping Autocomplete

Turn a few seed keywords into hundreds of real search queries, straight from the autocomplete boxes of **Google Search, YouTube, Google Shopping, Google News, Google Images and Bing**, in one run. Most autocomplete scrapers cover one engine; this one queries six, expands each seed with **a-z / 0-9, question words (who, what, how...) and prepositions (vs, for, with...)**, can go **two levels deep** for long-tail ideas, tags every **question keyword**, and has an **only-new mode** for monitoring autocomplete trends on a schedule. No start fee: you pay only per unique suggestion.

### What data can you get

| Field | Example |
|---|---|
| `suggestion` | coffee maker with grinder |
| `engine` | google, youtube, google-shopping, google-news, google-images, bing |
| `seedKeyword` | coffee maker |
| `expansionQuery` (the query that was typed) | coffee maker w |
| `position` (rank in the dropdown, 1 = top) | 2 |
| `depth` (1 = seed expansion, 2 = re-expanded suggestion) | 1 |
| `country`, `language` | us, en |
| `wordCount` | 4 |
| `containsSeed` | true |
| `questionType` | how (or null) |
| `url` (search-results page for the suggestion) | https://www.google.com/search?q=coffee%20maker%20with%20grinder\&hl=en\&gl=us |
| `id`, `scrapedAt` | google:coffee maker with grinder, 2026-11-06T12:25:59.836Z |

### Use cases

- **SEO keyword research:** long-tail keywords and content ideas people actually type into Google.
- **YouTube video ideas and tags:** what viewers search on YouTube around your topic.
- **Ecommerce and Amazon-style product research:** buyer-intent queries from Google Shopping and Bing ("air fryer deals", "... near me").
- **FAQ and "People also ask" content:** the `questions` expansion plus `questionType` gives you who/what/how/why questions ready for an FAQ page.
- **Comparison content:** the "vs" expansion finds competitor comparisons ("notion vs ...").
- **Trend monitoring:** schedule a run with *Only new suggestions* to get only autocomplete entries that appeared since last time.
- **Local and international SEO:** any country and language (`gb`/`en`, `de`/`de`, `fr`/`fr`...).

### How to use

1. Enter one or more **seed keywords**.
2. Pick the **engines**.
3. Choose an **expansion**: `none` (1 query per seed and engine, ~10 suggestions), `questions` (19 queries), `alphabet` (37 queries) or `full` (55 queries).
4. Optionally set **Depth 2**, **country** and **language**, and **Max suggestions** (default 500, which caps the cost).

Quick check, two engines:

```json
{
  "keywords": ["coffee maker"],
  "engines": ["google", "youtube"],
  "expansion": "none",
  "country": "us",
  "language": "en",
  "maxItems": 20
}
```

Full keyword research for SEO, Google and Bing:

```json
{
  "keywords": ["standing desk", "ergonomic chair"],
  "engines": ["google", "bing"],
  "expansion": "full",
  "depth": 1,
  "country": "us",
  "language": "en",
  "maxItems": 1000
}
```

German market, questions only:

```json
{
  "keywords": ["kaffeevollautomat"],
  "engines": ["google"],
  "expansion": "questions",
  "country": "de",
  "language": "de",
  "maxItems": 200
}
```

Weekly monitor of new YouTube suggestions (run on a schedule):

```json
{
  "keywords": ["iphone 18"],
  "engines": ["youtube", "google"],
  "expansion": "alphabet",
  "onlyNew": true,
  "stateKey": "iphone-monitor",
  "maxItems": 500
}
```

### Output example

Real items from a run of the quick-check input above:

```json
[
  {
    "id": "google:coffee maker with grinder",
    "suggestion": "coffee maker with grinder",
    "engine": "google",
    "seedKeyword": "coffee maker",
    "expansionQuery": "coffee maker",
    "position": 2,
    "depth": 1,
    "country": "us",
    "language": "en",
    "wordCount": 4,
    "containsSeed": true,
    "questionType": null,
    "url": "https://www.google.com/search?q=coffee%20maker%20with%20grinder&hl=en&gl=us",
    "scrapedAt": "2026-11-06T12:25:59.836Z"
  },
  {
    "id": "youtube:coffee maker review",
    "suggestion": "coffee maker review",
    "engine": "youtube",
    "seedKeyword": "coffee maker",
    "expansionQuery": "coffee maker",
    "position": 2,
    "depth": 1,
    "country": "us",
    "language": "en",
    "wordCount": 3,
    "containsSeed": true,
    "questionType": null,
    "url": "https://www.youtube.com/results?search_query=coffee%20maker%20review",
    "scrapedAt": "2026-11-06T12:26:00.178Z"
  }
]
```

The run also writes a `RUN_SUMMARY` record (key-value store) with counts per seed and engine, request statistics and any errors.

### Pricing

Pay per event, no start fee:

| Event | Price |
|---|---|
| `suggestion` - one unique suggestion in the output | $0.0005 |

Examples: 1,000 suggestions = **$0.50**. A `full` expansion of one seed on one engine typically returns 150-250 unique suggestions (about $0.08-$0.13). Set **Max suggestions** or the run's "Maximum cost per run" to cap spending; the Actor stops cleanly when it is reached.

### Tips and limits

- Each autocomplete query returns up to 10 suggestions (Bing up to ~15). Duplicates across queries are removed per engine, so `full` yields fewer than 55 x 10.
- The same suggestion on two engines is two rows (it tells you it ranks on both). Within one engine it is output once, with the first query that produced it.
- **Max suggestions is shared fairly across engines:** the engines are queried in turns, so with 3 engines and a limit of 300 each gets about 100. If one engine runs out of suggestions, the others use the rest.
- **Depth 2** re-queries the top 10 suggestions of each seed and engine as plain queries (not re-expanded a-z), so it adds up to 10 queries per seed and engine.
- Suggestions are personalised by country and language only; no search volume or CPC data (autocomplete doesn't expose it).
- Google's shopping/news/images suggestions often overlap a lot with web search; YouTube and Bing differ the most.
- Rows from different engines are interleaved in the dataset; filter or sort by `engine` as needed.

### FAQ

**Is it legal?** The Actor reads public autocomplete endpoints that any browser uses, without login. It collects search phrases, not personal data. You are responsible for using the data in line with the engines' terms and the laws that apply to you.

**Do I need a proxy?** No. If an engine rate-limits the run (HTTP 429), the Actor automatically retries through Apify's datacenter proxy. Residential proxies are not supported: if you select them, the Actor logs a warning and uses Apify datacenter proxy instead.

**Why fewer suggestions than expected?** Rare or very long seeds get few or no suggestions. Try a shorter seed or the `alphabet` expansion. Check `RUN_SUMMARY` for failed queries.

**How does Only new suggestions work?** The Actor remembers every suggestion it output per seed and engine in a named key-value store (`keyword-suggestions-state`, one record per *Monitor name*). Later runs skip those and charge only for new ones. Entries not seen for 180 days are forgotten.

**Which languages work?** Any two-letter Google `hl` / Bing language code, with proper accents and umlauts (e.g. "kühlschrank").

### Integrations

Use the results via the Apify API (JSON, CSV, Excel), schedule runs, or connect with Make, Zapier, n8n, Google Sheets, Slack and webhooks. AI agents can call it through the Apify MCP server.

### Changelog

- **0.1** (2026-11): First release. Google web, YouTube, Shopping, News, Images and Bing; alphabet / questions / full expansion; depth 2; question tagging; only-new mode.

### Ready-to-run examples

- [Find YouTube video ideas for sourdough bread](https://apify.com/rjmacarthy/keyword-suggestions-scraper/examples/youtube-video-ideas-sourdough-bread)
- [Air fryer keywords from Google Shopping and Bing](https://apify.com/rjmacarthy/keyword-suggestions-scraper/examples/air-fryer-shopping-keywords-google-bing)

### More scrapers by the same developer

- [Domain WHOIS Lookup - Bulk RDAP, Expiry, DNS & Availability](https://apify.com/rjmacarthy/domain-whois-lookup)
- [AI Visibility Tracker: ChatGPT, Perplexity, Gemini, Claude](https://apify.com/rjmacarthy/ai-search-visibility-tracker)
- [Bing Search Scraper: Organic Results, Ads & Related Searches](https://apify.com/rjmacarthy/bing-search-scraper)
- [Google Ads Transparency Scraper](https://apify.com/rjmacarthy/google-ads-transparency-scraper)
- [Skool Scraper - Community Stats & Public Posts (No Login)](https://apify.com/rjmacarthy/skool-scraper)
- [Snapchat Scraper - Public Profiles, Spotlight & Story Stats](https://apify.com/rjmacarthy/snapchat-scraper)

Browse all my Actors on [my Apify Store profile](https://apify.com/rjmacarthy).

### Support

Found a bug or need another engine? Open an issue on the Actor's Issues tab.

# Actor input Schema

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

Keywords to expand, one per line, e.g. "coffee maker". Each is typed into every selected engine's search box.

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

Which autocompletes to query. Each engine gives its own suggestions and is deduplicated separately.

## `expansion` (type: `string`):

none = seed only (1 query). alphabet = seed + " a"..." z" and " 0"..." 9" (37 queries). questions = who/what/when/where/why/how/which/can/is/are/does + seed and seed + vs/for/with/without/near/or/and (19 queries). full = both (55 queries). Counts are per seed and engine.

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

1 = expand the seeds only. 2 = also query the top 10 suggestions of each seed and engine (as plain queries) for long-tail ideas.

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

Two-letter country code (Google gl / Bing market), e.g. us, gb, de, fr, in.

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

Two-letter language code (Google hl / Bing market), e.g. en, de, fr, es.

## `maxItems` (type: `integer`):

Stop after this many unique suggestions in total (you pay per suggestion). 0 = no limit.

## `onlyNew` (type: `boolean`):

Output only suggestions not output by earlier runs for the same seed and engine (remembered in a named key-value store). Use with a schedule to monitor new autocomplete trends.

## `stateKey` (type: `string`):

Only with "Only new suggestions": separate monitors keep separate memories. Use a different name per project.

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

Not needed normally: on Apify the Actor switches to Apify datacenter proxy by itself if an engine rate-limits (HTTP 429). Residential proxies are not supported; if you select them, the Actor uses Apify datacenter proxy instead.

## Actor input object example

```json
{
  "keywords": [
    "coffee maker"
  ],
  "engines": [
    "google",
    "youtube"
  ],
  "expansion": "none",
  "depth": 1,
  "country": "us",
  "language": "en",
  "maxItems": 20,
  "onlyNew": false,
  "stateKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `suggestions` (type: `string`):

One item per unique suggestion per engine: suggestion, engine, seed, expansion query, rank and search URL.

## `suggestionsFull` (type: `string`):

Every field, including depth, word count, contains-seed and question type.

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

Per seed and engine counts, request statistics and errors.

# 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"
    ],
    "engines": [
        "google",
        "youtube"
    ],
    "expansion": "none",
    "country": "us",
    "language": "en",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("rjmacarthy/keyword-suggestions-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"],
    "engines": [
        "google",
        "youtube",
    ],
    "expansion": "none",
    "country": "us",
    "language": "en",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("rjmacarthy/keyword-suggestions-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"
  ],
  "engines": [
    "google",
    "youtube"
  ],
  "expansion": "none",
  "country": "us",
  "language": "en",
  "maxItems": 20
}' |
apify call rjmacarthy/keyword-suggestions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rjmacarthy/keyword-suggestions-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/zFrhRWPqDLbxf0O53/builds/Td04hQ9Tsd0kGgNh9/openapi.json
