# Google Autocomplete Keyword Scraper (`josh99smith/google-autocomplete-scraper`) Actor

Scrape Google autocomplete suggestions for keyword research: alphabet, question and preposition expansions, any country and language. Pay per seed keyword.

- **URL**: https://apify.com/josh99smith/google-autocomplete-scraper.md
- **Developed by:** [Joshua Smith](https://apify.com/josh99smith) (community)
- **Categories:** SEO tools, Marketing, Open source
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 seed keyword querieds

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

This **Google Autocomplete scraper** collects Google keyword suggestions for any list of seed keywords, in any country and language. Type `best crm for` into Google and you see ten to fifteen phrases that real people search for; this Actor fetches those phrases for hundreds of seeds at once, expands them with a-z, question, preposition and number modifiers, and hands you a clean, deduplicated keyword list as JSON, CSV or Excel.

It is built for **SEO specialists, content marketers and product researchers** who need long-tail keyword ideas and question-style queries without paying for a keyword-tool subscription. You pay a flat price per seed keyword, and keywords that could not be queried are reported **free of charge**.

### Features

- Find long-tail keyword ideas from Google autocomplete suggestions
- Scrape Google search suggestions for a list of keywords in bulk
- Get "People Also Ask" style questions with who, what, why, how and other question prefixes
- Expand a seed keyword with every letter a to z to discover hidden suggestions
- Collect keyword suggestions by country and language (gl and hl parameters)
- Export Google autocomplete keywords to CSV, Excel or Google Sheets
- Build topic clusters by re-querying each suggestion one level deeper
- Track how autocomplete suggestions for a brand or product change over time

### What can you do with Google Autocomplete Keyword Scraper?

- **Long-tail keyword research**: turn one head term into hundreds of specific phrases (`best crm for real estate agents`, `best crm for nonprofits`, ...).
- **Question mining**: prefix your topic with who / what / when / where / why / how / can / is / are / does / will to find the questions people actually type, ready for FAQ pages and blog outlines.
- **Content planning**: use depth 2 to follow each suggestion one step further and build topic clusters around a pillar page.
- **Local and international SEO**: run the same seeds for `gl=de`, `gl=in`, `gl=br` and the matching language to see how demand differs by market.

### How it works

For every seed keyword the Actor calls Google's public autocomplete endpoint (the same one the search box uses), parses the JSON reply and stores each suggestion together with its position and Google's relevance score. Enabled expansions send additional queries (`<keyword> a` ... `<keyword> z`, `how <keyword>`, `<keyword> vs`, `<keyword> 2`, ...), and depth 2 re-queries every suggestion found at depth 1 once. Results are deduplicated per seed keyword.

Requests are sent with low concurrency and small random delays to stay polite. Suggestions change by country, language and time, so two runs are not guaranteed to be identical; rare phrases may return few or no suggestions. No search result pages are scraped and no personal data is collected.

### How to use it

1. Open the Actor and enter your seed keywords in **Seed keywords**, one per line. Partial phrases (`best crm for`, `how to start a podcast`) work best.
2. Set **Country** and **Language** for the market you are researching (defaults: `us` / `en`).
3. Optionally enable **Expand with a-z**, **question words**, **prepositions** or **numbers**, and set **Depth** to `2` for a deeper crawl.
4. Click **Start**. Suggestions appear in the **Output** tab as each keyword finishes.
5. Download the dataset as JSON, CSV, Excel or XML, or connect it to Google Sheets, Airtable, Zapier or Make.

```json
{
    "keywords": ["best crm for", "how to start a podcast"],
    "country": "us",
    "language": "en",
    "expandQuestions": true,
    "maxSuggestionsPerKeyword": 50,
    "depth": 1
}
```

### Output

One record per unique suggestion:

```json
{
    "success": true,
    "seedKeyword": "best crm for",
    "query": "what best crm for",
    "suggestion": "what's the best crm for small business",
    "position": 1,
    "relevance": 601,
    "suggestType": "QUERY",
    "modifierType": "question",
    "modifier": "what",
    "country": "us",
    "language": "en",
    "fetchedAt": "2026-09-18T19:45:58.767Z"
}
```

Requests that fail are recorded too, so nothing silently disappears:

```json
{
    "success": false,
    "seedKeyword": "best crm for",
    "query": "best crm for k",
    "errorType": "rate-limited",
    "error": "HTTP 429 from suggest endpoint",
    "statusCode": 429,
    "fetchedAt": "..."
}
```

The run also stores a `SUMMARY` record in the key-value store with `keywordsRequested`, `keywordsCharged`, `suggestionsFound`, `failures` and `requestsMade`.

| Field                 | Description                                                                                                   |
| --------------------- | ------------------------------------------------------------------------------------------------------------- |
| `seedKeyword`         | The keyword from your input that this suggestion belongs to.                                                  |
| `query`               | The exact query sent to Google (seed plus modifier, or a depth-1 suggestion when `modifierType` is `depth2`). |
| `suggestion`          | The autocomplete suggestion text.                                                                             |
| `position`            | 1-based position of the suggestion in Google's reply for that query.                                          |
| `relevance`           | Google's relevance score for the suggestion (higher is more popular); may be `null`.                          |
| `suggestType`         | Google's suggestion type, usually `QUERY`.                                                                    |
| `modifierType`        | `none`, `alphabet`, `question`, `preposition`, `number` or `depth2`.                                          |
| `modifier`            | The letter, word or digit that was added, or the re-queried suggestion for `depth2`.                          |
| `country`, `language` | The `gl` and `hl` values used.                                                                                |
| `errorType`           | For failures: `rate-limited`, `blocked`, `timeout`, `network`, `http-error` or `other`.                       |

### Use it from the API, Python, JavaScript or an AI agent

Run the Actor and get every suggestion back in one HTTP call:

```bash
curl -X POST "https://api.apify.com/v2/acts/josh99smith~google-autocomplete-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{ "keywords": ["best crm for"], "country": "us", "language": "en" }'
```

Python, with the [apify-client](https://docs.apify.com/api/client/python) package:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("josh99smith/google-autocomplete-scraper").call(
    run_input={"keywords": ["best crm for"], "country": "us", "language": "en", "expandQuestions": True}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["seedKeyword"], "->", item.get("suggestion"))
```

JavaScript, with the [apify-client](https://docs.apify.com/api/client/js) package:

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "<YOUR_API_TOKEN>" });
const run = await client.actor("josh99smith/google-autocomplete-scraper").call({
    keywords: ["best crm for"],
    country: "us",
    language: "en",
    expandAlphabet: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((item) => item.suggestion));
```

The Actor is also available as a tool through the Apify MCP server for AI agents, and it can be scheduled or connected to Zapier, Make, n8n and Google Sheets in the Integrations tab.

### Pricing: how much does it cost to scrape Google Autocomplete suggestions?

You pay a **flat price per seed keyword** (shown next to the Start button). The price covers every expansion and depth-2 request for that keyword, however many suggestions it produces; 15 suggestions or 1,000 cost the same. A keyword whose requests fail because of rate limiting or a network error is **not charged** and is reported with an `errorType` instead. Keywords that legitimately return zero suggestions are charged, because the queries did run.

There is no charge for Actor start-up, and the Actor stops automatically when it reaches the maximum cost you set for a run, so a large keyword list never produces a surprise bill.

**How it compares (September 2026).** Other autocomplete Actors bill per suggestion ($0.0005 to $0.001 each) or per expansion query plus a $0.005 start fee. This Actor bills a flat $0.003 per seed keyword no matter how many expansions or suggestions it produces. A seed keyword with alphabet, question and preposition expansions at depth 2 returned 1,000 unique suggestions from 188 requests in our test: $0.003 here, $0.50 to $1.00 on a per-suggestion price.

### Tips

- **Expansions multiply requests.** Each seed keyword sends 1 request by default; a-z adds 26, question words 11, prepositions 8 and numbers 10 (all four together: 56 requests per keyword). Depth 2 adds one request per suggestion found at depth 1. The price per keyword stays the same, but runs take longer.
- **Use the cap.** `maxSuggestionsPerKeyword` stops sending requests for a keyword as soon as the limit is hit, which keeps depth-2 runs fast. In testing, `best crm for` with a-z + prepositions + depth 2 produced 1,000 unique suggestions from 188 requests in about 35 seconds.
- **Question mining works best with a topic, not a full question.** Seed `start a podcast` rather than `how to start a podcast`.
- **Schedule it** to track how suggestions for your brand change week over week.

### FAQ

#### Are these the same suggestions I see in the Google search box?

Yes, they come from the same public autocomplete endpoint, using the `client=chrome` mode, which returns up to 15 suggestions plus relevance scores. Suggestions are personalised in a signed-in browser, so what you see may differ slightly from the unpersonalised results the Actor collects.

#### Does Google Autocomplete give search volume?

No. Google Autocomplete does not expose volumes. The `relevance` score is Google's own ranking signal for the suggestion list and is useful for ordering, not for estimating traffic.

#### How many keywords can I scrape and what about rate limits?

There is no fixed cap on the keyword list; the run stops cleanly when it reaches the maximum cost you set. Google tolerates a few requests per second from one IP, so keep **Max concurrency** at the default (3) and enable **Apify Proxy** in the Advanced section if you see `rate-limited` failures on big runs (proxy traffic is billed separately by Apify). Seed keywords are processed one after another, and the run pauses for 10 seconds when Google throttles it and stops after 3 consecutive keywords fail completely.

#### Is it legal to scrape Google Autocomplete suggestions?

The Actor reads a public, unauthenticated endpoint at a low request rate, stores only the suggestion text Google publishes, and collects no personal data. You are responsible for using the results in compliance with the laws and terms that apply to you.

#### Will the output fields change between runs?

No. Output fields are stable: existing fields are never renamed or removed without a major version bump announced in the changelog, and new fields are only ever added. You can build integrations on the schema without checking it after every run.

### Related Actors by the same developer

- [Website Tech Stack Detector](https://apify.com/josh99smith/tech-stack-detector): what a website is built with.
- [Website Screenshot API](https://apify.com/josh99smith/website-screenshot-api): full-page screenshots and PDFs of any URL.
- [App Reviews Scraper](https://apify.com/josh99smith/app-reviews-scraper): App Store and Google Play reviews.
- [PageSpeed Insights Audit](https://apify.com/josh99smith/pagespeed-insights-audit): Core Web Vitals via Google's API.
- [Remote Jobs Aggregator](https://apify.com/josh99smith/remote-jobs-aggregator): remote job listings.
- [PDF Text Extractor](https://apify.com/josh99smith/pdf-text-extractor): text and metadata from PDFs.
- [Sitemap URL Extractor](https://apify.com/josh99smith/sitemap-url-extractor): all URLs from XML sitemaps.
- [RSS Feed to JSON](https://apify.com/josh99smith/rss-feed-to-json): feeds as JSON.

### Support and feedback

Found a problem or need another modifier set (for example comparison words in your language)? Open a ticket in the **Issues** tab of this Actor. The source code is available under the MIT licence.

# Changelog

This Actor's version history is a separate document: https://apify.com/josh99smith/google-autocomplete-scraper/changelog.md

# Actor input Schema

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

One seed keyword per line (or a JSON array of strings). Google Autocomplete works best with partial phrases such as `best crm for` or `how to start a podcast`. Duplicates are removed automatically.

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

Two-letter country code (`gl` parameter) that controls which country's suggestions are returned, e.g. `us`, `gb`, `de`, `in`, `br`.

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

Interface language code (`hl` parameter), e.g. `en`, `de`, `es`, `pt-BR`, `zh-CN`. Use the language your target audience searches in.

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

Also query `<keyword> a` to `<keyword> z` (26 extra requests per seed keyword). The most effective way to discover long-tail suggestions.

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

Also query `who <keyword>`, `what <keyword>`, `when`, `where`, `why`, `how`, `can`, `is`, `are`, `does`, `will` (11 extra requests per seed keyword). Great for mining question-style keywords.

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

Also query `<keyword> for`, `with`, `without`, `near`, `to`, `vs`, `like`, `versus` (8 extra requests per seed keyword).

## `expandNumbers` (type: `boolean`):

Also query `<keyword> 0` to `<keyword> 9` (10 extra requests per seed keyword). Useful for years, versions and top-10 style queries.

## `maxSuggestionsPerKeyword` (type: `integer`):

Stop collecting for a seed keyword once this many unique suggestions have been found. Remaining expansion and depth-2 requests for that keyword are skipped.

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

`1` queries only the seed keyword (plus enabled expansions). `2` additionally re-queries every suggestion found at depth 1 once, which multiplies the number of requests but uncovers many more long-tail phrases.

## `maxConcurrency` (type: `integer`):

How many suggest requests to run in parallel for the current seed keyword. Keep it low (the default is 3) to avoid rate limiting; seed keywords are always processed one after another.

## `maxRetries` (type: `integer`):

How many times to retry a failed suggest request (with exponential back-off) before reporting it as failed.

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

Optional. Route requests through Apify Proxy if Google starts rate-limiting the datacenter IP addresses used by the platform. Proxy usage is billed by Apify separately from this Actor's per-keyword price.

## Actor input object example

```json
{
  "keywords": [
    "best crm for",
    "how to start a podcast"
  ],
  "country": "us",
  "language": "en",
  "expandAlphabet": false,
  "expandQuestions": false,
  "expandPrepositions": false,
  "expandNumbers": false,
  "maxSuggestionsPerKeyword": 50,
  "depth": 1,
  "maxConcurrency": 3,
  "maxRetries": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One record per unique suggestion (seed keyword, query sent, suggestion, position, modifier, relevance) plus free failure records for keywords that could not be queried.

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

Counts of requested and charged keywords, suggestions found, requests made and failures.

# 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": [
        "best crm for",
        "how to start a podcast"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("josh99smith/google-autocomplete-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": [
        "best crm for",
        "how to start a podcast",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("josh99smith/google-autocomplete-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": [
    "best crm for",
    "how to start a podcast"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call josh99smith/google-autocomplete-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,josh99smith/google-autocomplete-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/PvzqEKbt1bZrbHZIm/builds/4gVabrS0Nhp4egX2d/openapi.json
