# Google Keyword Research: Autocomplete & People Also Ask (`fguiraud/google-keyword-research`) Actor

Google keyword research tool: get keyword ideas from Google Autocomplete (with question and a-z expansion), the questions in People also ask and related searches, for any keyword, country and language. Long-tail keywords, questions and search intent for SEO and content. Pay per keyword idea.

- **URL**: https://apify.com/fguiraud/google-keyword-research.md
- **Developed by:** [Fernando Guiraud](https://apify.com/fguiraud) (community)
- **Categories:** SEO tools, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.48 / 1,000 keyword ideas

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Google Keyword Research do?

**Google Keyword Research** turns any keyword into hundreds of **keyword ideas from Google itself**: **Google Autocomplete suggestions** (expanded with question words, "vs", "for", "near me" and every letter a-z), the **questions in "People also ask"** and the **related searches** ("People also search for") at the bottom of the results. One row per idea, labelled with its **source, position, search intent, question or not and word count**, for any **country and language**.

Use it as a **free-to-start alternative to keyword tools** for SEO, content briefs, FAQ pages, PPC research or AI agents that need to know what people ask about a topic. Export to **Excel, CSV or JSON**, schedule it, or call it from the API.

It runs on the Apify platform, so you also get an API, scheduling, integrations (Google Sheets, Make, Zapier, n8n) and access for **AI agents through the [Apify MCP server](https://mcp.apify.com)**.

### Why use it?

- 🔎 **Long-tail keywords**: Google Autocomplete shows what people actually type. The question expansion finds "how", "what", "why", "can", "vs" and "for" variants; the alphabet expansion finds "keyword a", "keyword b"... up to z.
- ❓ **Questions for content and FAQ pages**: "People also ask" questions plus every autocomplete idea that is a question (`onlyQuestions: true` keeps only those).
- 🧭 **Search intent at a glance**: each idea is labelled `question`, `informational`, `commercial` ("best", "vs", "review"), `transactional` ("buy", "price", "download") or `local` ("near me").
- 🌍 **Any market**: set `country` and `language` (e.g. `es` + `es` for Spain, `mx` + `es` for Mexico, `br` + `pt-BR`).
- 💸 **Pay per idea**, duplicates removed before charging; keywords without results are free.

### How to do keyword research with Google Autocomplete

1. Click **Try for free**.
2. Type your keywords, one per line (up to 200 per run).
3. Choose the sources and the autocomplete expansion (questions by default).
4. Click **Start**. Two keywords take about 25 seconds.
5. Download the table as **Excel or CSV**, or send it to Google Sheets.

### Input

| Field | Description | Default |
|---|---|---|
| `keywords` | Seed keywords or topics, one per line (up to 200) | — |
| `sources` | Any of `autocomplete`, `peopleAlsoAsk`, `relatedSearches` | all three |
| `expand` | Autocomplete requests per keyword: `none` (~10 ideas), `questions` (~100), `alphabet` (~150), `questions-and-alphabet` (~250) | `questions` |
| `country` / `language` | Google country (`gl`) and language (`hl`) codes | `us` / `en` |
| `onlyQuestions` | Keep only ideas that are questions | `false` |
| `maxIdeasPerKeyword` | Cap the ideas (and the cost) per keyword | 300 |
| `dedupeAcrossSeeds` | Do not repeat (or charge) an idea already found for an earlier keyword | `false` |
| `failOnError` | Fail the run when nothing is found (for scheduled monitoring) | `false` |

```json
{
  "keywords": ["how to learn python", "best crm for small business"],
  "sources": ["autocomplete", "peopleAlsoAsk", "relatedSearches"],
  "expand": "questions",
  "country": "us",
  "language": "en"
}
```

### Output

One row per keyword idea. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Real rows from a run on 2026-11-07 (seed `best crm for small business`, country `us`), one or two per source:

```json
{"seed": "best crm for small business", "keyword": "best crm for small business free", "source": "autocomplete", "position": 2, "modifier": null, "isQuestion": false, "intent": "commercial", "wordCount": 6}
{"seed": "best crm for small business", "keyword": "Which CRM is beginner friendly?", "source": "peopleAlsoAsk", "position": 3, "modifier": null, "isQuestion": true, "intent": "question", "wordCount": 5}
{"seed": "best crm for small business", "keyword": "What are the top 3 CRM platforms?", "source": "peopleAlsoAsk", "position": 4, "modifier": null, "isQuestion": true, "intent": "commercial", "wordCount": 7}
{"seed": "best crm for small business", "keyword": "Zoho CRM for small business", "source": "relatedSearches", "position": 4, "modifier": null, "isQuestion": false, "intent": "informational", "wordCount": 5}
```

That run returned **190 ideas for 2 keywords in 25 seconds**: 171 from autocomplete, 6 "People also ask" questions and 13 related searches (ideas already found by autocomplete are not repeated). With `onlyQuestions: true`, `solar panels` gave 132 questions, from "how solar panels work" to "what solar panels are the best". In Spanish (`country: es`, `language: es`, `expand: questions-and-alphabet`), `marketing digital` gave 300 ideas such as "marketing digital curso gratuito" and "marketing digital bilbao".

### Data fields

| Field | Description |
|---|---|
| `seed` | The keyword you gave |
| `keyword` | The keyword idea |
| `source` | `autocomplete`, `peopleAlsoAsk` or `relatedSearches` |
| `position` | Position in the list Google showed |
| `modifier` | The expansion that produced it (`how`, `vs`, `a`...); empty for the keyword itself |
| `isQuestion` | Starts with a question word or ends with `?` |
| `intent` | `question`, `informational`, `commercial`, `transactional` or `local` (from its words) |
| `wordCount` | Number of words (long-tail keywords have 4 or more) |
| `containsSeed` | The idea contains the seed keyword |
| `country`, `language` | Google market used |
| `status` | `ok`; `no-results` or `error` rows are not billed |

### How much does keyword research cost?

| Event | Price |
|---|---|
| Run start (per GB of memory, default 256 MB) | $0.001 |
| Keyword idea | **$0.0006** (about $0.60 per 1,000 ideas) |

Higher Apify plans pay less per idea (SILVER −10%, GOLD −20%). Duplicates are removed before charging and keywords without results are free. Example: the 190-idea run above costs $0.115. Use `maxIdeasPerKeyword` or **Max cost per run** to cap a run.

### Tips

- **Most ideas**: `expand: "questions-and-alphabet"` sends about 45 autocomplete requests per keyword.
- **Fewer, sharper ideas**: `expand: "none"` with `sources: ["peopleAlsoAsk", "relatedSearches"]` gives what Google shows on the results page for that exact query.
- **Big lists**: put up to 200 keywords in one run and turn on `dedupeAcrossSeeds` so overlapping topics are not charged twice.
- **Search volume** is not included: Google publishes volumes only inside Google Ads. Combine the ideas with [Google Trends Scraper](https://apify.com/fguiraud/google-trends-scraper) to compare interest over time.

### Run it from Python or the API

```python
from apify_client import ApifyClient  # pip install apify-client (3.x)

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("fguiraud/google-keyword-research").call(run_input={
    "keywords": ["best crm for small business"],
    "onlyQuestions": True,
})
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["source"], item["keyword"])
```

### Use it with AI agents (MCP)

Add `https://mcp.apify.com/?tools=fguiraud/google-keyword-research` to Claude, ChatGPT, Cursor or any MCP client, and ask "what do people ask about solar panels?" or "find long-tail keywords for 'best crm'". Agent-friendly input: common field names such as `query`, `keyword` or `topics` are accepted, and an empty input runs a small sample.

### FAQ

- **Where does the data come from?** From Google: its public autocomplete suggestions and its search result pages (People also ask and People also search for), for the country and language you choose.
- **Does it include search volume or CPC?** No. Those numbers are only in Google Ads; ideas from autocomplete are already filtered by Google to what people search.
- **Why are there few "People also ask" questions for some keywords?** Google shows that box only for some queries, and a question already found by autocomplete is not repeated.
- Found a problem or need a feature? Open an issue on the **Issues** tab. Replies within 48 hours.
- **Did it save you time?** A short review on the **Reviews** tab helps other people find this Actor.

# Changelog

This Actor's version history is a separate document: https://apify.com/fguiraud/google-keyword-research/changelog.md

# Actor input Schema

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

Seed keywords or topics, one per line (up to 200 per run), e.g. 'how to learn python' or 'best crm for small business'. Each one is expanded into keyword ideas.

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

'autocomplete': Google's search suggestions (with the expansions below). 'peopleAlsoAsk': the questions Google shows in 'People also ask'. 'relatedSearches': 'People also search for' at the bottom of the results. All three by default.

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

How many autocomplete requests per keyword: the keyword alone (~10 ideas), with question words and modifiers (~100 ideas), with every letter a-z (~150), or both (~250). The price is per idea delivered, so more expansion means more ideas and a higher cost.

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

Two-letter country code for Google (gl), e.g. us, gb, ca, au, in, es, mx, br, de.

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

Language code for Google (hl), e.g. en, es, pt-BR, de, fr.

## `onlyQuestions` (type: `boolean`):

Keep only ideas that are questions (how, what, why... or ending with '?'). Good for FAQ pages and content briefs.

## `maxIdeasPerKeyword` (type: `integer`):

Caps the ideas (and the cost) per keyword.

## `dedupeAcrossSeeds` (type: `boolean`):

An idea found for one keyword is not repeated (or charged) for the next ones. Off: each keyword gets its full list.

## `failOnError` (type: `boolean`):

Mark the run as failed when nothing is found or the results look broken. Useful for scheduled monitoring (Apify emails you on failed runs).

## Actor input object example

```json
{
  "keywords": [
    "how to learn python",
    "best crm for small business"
  ],
  "sources": [
    "autocomplete",
    "peopleAlsoAsk",
    "relatedSearches"
  ],
  "expand": "questions",
  "country": "us",
  "language": "en",
  "onlyQuestions": false,
  "maxIdeasPerKeyword": 300,
  "dedupeAcrossSeeds": false,
  "failOnError": false
}
```

# Actor output Schema

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

No description

# 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": [
        "how to learn python",
        "best crm for small business"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fguiraud/google-keyword-research").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": [
        "how to learn python",
        "best crm for small business",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fguiraud/google-keyword-research").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": [
    "how to learn python",
    "best crm for small business"
  ]
}' |
apify call fguiraud/google-keyword-research --silent --output-dataset

```

## MCP server setup

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

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/WJocfB5LiAZOB9bLt/builds/AF0eclloMJzZvg1yF/openapi.json
