# SERP & Keyword Research — Keyword Ideas API for AI Agents (`logiover/serp-keyword-research`) Actor

Keyless keyword research & SERP API. One keyword in, get keyword ideas (Google autocomplete), live organic SERP, People Also Ask questions and related searches out. A DataForSEO / Ahrefs / SEMrush alternative for AI agents. No API key.

- **URL**: https://apify.com/logiover/serp-keyword-research.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Agents, AI, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## SERP & Keyword Research — Keyword Ideas + SERP API (No API Key · DataForSEO / Ahrefs Alternative)

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Category](https://img.shields.io/badge/Category-SEO%20%2F%20AI-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

**One keyword in, hundreds of keyword ideas out — plus the live SERP and the questions people actually ask.** SERP & Keyword Research is a fast, **keyless keyword research API** built for SEO workflows and AI agents. Give it a seed keyword and get back real keyword ideas from **Google autocomplete**, the current organic **SERP**, **People Also Ask** questions, and **related searches** — all in one structured record. A practical **DataForSEO / Ahrefs / SEMrush alternative** for the core "keyword ideas + SERP + questions" job — **no API key, no seat license, no browser.**

> ### 🏆 Why this keyword research API?
> **4 data sources in 1 row** (autocomplete ideas + SERP + People Also Ask + related) · **100+ real long-tail ideas per seed** · batch up to 100 keywords · fully **keyless** (no DataForSEO/Ahrefs/SEMrush/SerpAPI account) · agent-native pay-per-result. A drop-in **SEO MCP** tool an AI agent can call mid-task — with **no API key**.

---

### ✨ What this Actor does / Key features

- 💡 **Real keyword ideas** — Google autocomplete (the same suggestion engine behind the search box): the queries real users type — the gold standard for **long-tail** discovery.
- 🔁 **Idea expansion modes** — `standard` (seed + question prefixes + modifiers = 100+ ideas), `deep` (also appends a–z, answer-the-public style), or `off` (seed suggestions only).
- 🔎 **Live SERP** — the organic results ranking right now: `rank`, `title`, `url`, `snippet`, `source` — a lightweight built-in **SERP API**.
- ❓ **People Also Ask** — question-style results for FAQ sections, topic clusters and content briefs.
- 🕸️ **Related searches** — expand a single seed into a whole topic map for content planning.
- 🤖 **Agent-native (SEO MCP)** — pay-per-result pricing means an AI agent can research a keyword, pay per result, and reason over the output.
- 📦 **Batch** — research up to 100 keywords in one run with configurable concurrency.
- 🛡️ **Resilient** — every source is best-effort and independently guarded; if one returns nothing the others still fill the row, and the Actor never crashes on a single keyword.
- 💾 **Export anywhere** — download as JSON, CSV or Excel, or read live via the Apify API.

### 🚀 Quick start (3 steps)

1. **Configure** — type one or more seed keywords into **Keywords** (or a single keyword into the **Single keyword** field), pick a **Region / language** and toggle what to collect.
2. **Run** — click **Start**. Each keyword becomes one dataset row with its ideas, SERP, questions and related searches.
3. **Get your data** — open the **Output** tab and export to **JSON, CSV or Excel**, or read it live via the Apify API.

### 📥 Input

Give the Actor one or more seed keywords. Everything else has sensible defaults.

#### Example — single keyword, full research
```json
{
  "keywords": ["mcp server"],
  "maxSerpResults": 10,
  "expansion": "standard",
  "region": "us-en"
}
````

#### Example — batch, deep long-tail, German region

```json
{
  "keywords": ["kaffeevollautomat", "espressomaschine", "milchaufschäumer"],
  "expansion": "deep",
  "maxSerpResults": 15,
  "region": "de-de",
  "concurrency": 5
}
```

#### Example — ideas + questions only (no SERP), for content briefs

```json
{
  "keyword": "ai agent framework",
  "includeSerp": false,
  "includePaa": true,
  "includeRelated": true,
  "expansion": "standard"
}
```

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `keywords` | array | One or more seed keywords (batch up to 100). Each becomes one dataset row. | `[]` |
| `keyword` | string | A single seed keyword (use this or `keywords`). | – |
| `maxSerpResults` | integer | Organic results to return per keyword (1–30). | `10` |
| `includeAutocomplete` | boolean | Fetch Google autocomplete keyword ideas. | `true` |
| `expansion` | string | `off`, `standard` (seed + questions + modifiers), or `deep` (also a–z long-tail). | `standard` |
| `includeSerp` | boolean | Return the live organic SERP. | `true` |
| `includePaa` | boolean | Collect People Also Ask questions (best-effort). | `true` |
| `includeRelated` | boolean | Collect related searches for topic expansion. | `true` |
| `region` | string | Region/language code (`us-en`, `uk-en`, `de-de`, `fr-fr`, `es-es`…). | `us-en` |
| `concurrency` | integer | Keywords researched in parallel (1–10). | `3` |
| `useApifyProxy` | boolean | Route through Apify datacenter proxy to avoid per-IP rate limits. | `true` |
| `proxyGroups` | array | Override proxy group, e.g. `["RESIDENTIAL"]`. Empty = datacenter (AUTO). | `[]` |

### 📤 Output

One clean dataset row per keyword. Here is a trimmed sample record:

```json
{
  "keyword": "mcp server",
  "region": "us-en",
  "autocompleteSuggestions": [
    "mcp server list",
    "mcp server python",
    "mcp server example",
    "mcp server claude desktop"
  ],
  "serpResults": [
    {
      "rank": 1,
      "title": "Model Context Protocol — Example Servers",
      "url": "https://modelcontextprotocol.io/examples",
      "snippet": "A collection of reference MCP server implementations...",
      "source": "modelcontextprotocol.io"
    }
  ],
  "peopleAlsoAsk": [
    "What is an MCP server?",
    "How do I build an MCP server?"
  ],
  "relatedKeywords": ["mcp client", "mcp tools", "model context protocol"],
  "suggestionCount": 4,
  "serpCount": 10,
  "fetchedAt": "2026-07-06T12:00:00.000Z"
}
```

<details>
<summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `keyword` | The seed keyword you researched |
| `region` | Region / language used (e.g. `us-en`) |
| `autocompleteSuggestions` | Array of Google autocomplete keyword ideas |
| `serpResults` | Array of organic results: `rank`, `title`, `url`, `snippet`, `source` |
| `peopleAlsoAsk` | Array of People Also Ask questions |
| `relatedKeywords` | Array of related searches for topic expansion |
| `suggestionCount` | Number of keyword ideas found |
| `serpCount` | Number of SERP results returned |
| `error` | Present only if a keyword failed entirely (row still saved) |
| `fetchedAt` | ISO 8601 timestamp of the run |

</details>

#### Where the data comes from

- **Keyword ideas** — Google autocomplete (Suggest) JSON. This is the keyword-ideas engine.
- **SERP** — DuckDuckGo HTML organic results.
- **People Also Ask** — question blocks parsed from the Bing SERP (best-effort).
- **Related keywords** — Bing related searches + DuckDuckGo related, merged and deduped.

Every source is best-effort and independently guarded: if one returns nothing, the others still fill the row.

### 💡 Use cases

- **SEO keyword research** — turn one seed into hundreds of long-tail keyword ideas in seconds.
- **Content briefs & FAQ pages** — mine People Also Ask questions and related searches for structure.
- **Topic clustering** — expand a niche into a full content map for a pillar-and-cluster strategy.
- **Rank tracking & SERP analysis** — capture who ranks for a term today and how the SERP looks.
- **AI agents & automation** — a "research this keyword" tool an agent can call mid-task and pay per result.
- **Programmatic SEO** — feed thousands of seeds and build data-driven landing pages at scale.

### 👥 Who uses it

SEO specialists & content strategists · programmatic-SEO and affiliate teams · content marketers building briefs and FAQs · growth teams doing topic research · AI-agent builders wiring a keyless keyword/SERP tool · founders validating niches.

### 💰 Pricing

This Actor runs on a simple **pay-per-result** model — one charge per keyword that returns data; keywords that return nothing are still saved but never charged. No monthly fee, no seat license, no idle cost. Try it on the **free tier** first, then scale up. See the **Pricing** tab on this page for the current rate.

### ❓ Frequently Asked Questions

**Is this a DataForSEO / Ahrefs / SEMrush alternative?**
Yes. It covers the core "keyword ideas + SERP + People Also Ask" job those keyword-research tools are used for, without their API keys or subscriptions. You run it on Apify and pay per result.

**Do I need an API key?**
No. It is fully keyless and works out of the box with Apify's datacenter proxy — no DataForSEO, Ahrefs, SEMrush, Moz or SerpAPI account required.

**Where do the keyword ideas come from?**
From Google autocomplete — the same suggestion engine behind Google's search box. Those are real queries people type, which makes them ideal for long-tail keyword research.

**Does it return search volume or keyword difficulty?**
No. This Actor focuses on keyword **ideas**, the live **SERP** and **questions** — the discovery side of keyword research. It does not estimate monthly search volume or difficulty scores.

**Can I get the SERP too?**
Yes. Each keyword includes the live organic SERP (rank, title, URL, snippet, source) as a built-in SERP API, capped by your `maxSerpResults`.

**Can it find People Also Ask questions?**
Yes — enable **Include People Also Ask** and the Actor collects question-style results, ideal for FAQ content and topic clusters. It's best-effort, so it returns an empty list when none are surfaced.

**Can I research keywords in other languages / regions?**
Yes. Set the **Region / language** field, e.g. `uk-en`, `de-de`, `fr-fr`, `es-es`. It controls both the autocomplete language and the SERP region.

**Can I use it as an AI agent / MCP tool?**
Yes. It's designed for AI agents via the Apify MCP server — a keyless **SEO MCP** tool an agent can call to research keywords and analyze the SERP autonomously, paying per result.

**How much data can I get?**
Batch up to 100 seeds per run, each returning 100+ ideas (in `standard`/`deep` expansion) plus SERP, questions and related searches.

**How do I export the data to CSV or JSON?**
Run the Actor and download the dataset as JSON, CSV or Excel from the **Output** tab, or read it live via the Apify API.

### 🔗 More SEO, research & AI tools by logiover

Pair keyword research with the rest of the research-intelligence suite:

| Actor | What it does |
|---|---|
| [Website SEO Audit Crawler](https://apify.com/logiover/website-seo-audit-crawler) | Full on-page SEO audit across an entire site |
| [JSON-LD Schema & Meta Tag Extractor](https://apify.com/logiover/json-ld-schema-meta-tag-extractor) | Structured data, OpenGraph & Twitter Cards from any URL |
| [Google News Scraper](https://apify.com/logiover/google-news-scraper) | News headlines and articles by query |
| [AI Web Search](https://apify.com/logiover/ai-web-search) | Agent-ready web search results |
| [AI Deep Research](https://apify.com/logiover/ai-deep-research) | Multi-source research reports for agents |
| [AI Web Extract](https://apify.com/logiover/ai-web-extract) | Structured extraction from any web page |
| [Google Ads Transparency Scraper](https://apify.com/logiover/google-ads-transparency-scraper) | Ads and advertisers from Google's transparency center |
| [Competitor Ad Intelligence](https://apify.com/logiover/competitor-ad-intelligence) | Cross-platform competitor ad monitoring |
| [Company Deep Research Scraper](https://apify.com/logiover/company-deep-research-scraper) | Firmographics and company intelligence |
| [News Intelligence Scraper](https://apify.com/logiover/news-intelligence-scraper) | Multi-source news monitoring |
| [B2B AI Visibility Tracker](https://apify.com/logiover/b2b-ai-visibility-tracker) | Track brand visibility across AI answers |
| [URL to Markdown](https://apify.com/logiover/url-to-markdown) | Convert any URL to clean Markdown for LLMs |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

### ⏰ Scheduling & integration

Schedule this Actor on Apify to refresh keyword and SERP snapshots daily or weekly. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Wire it into **Claude, Cursor or any MCP client** to let an agent do live keyword research on demand, or connect **Make, n8n or Zapier** for automated SEO pipelines.

### ⭐ Support & feedback

Found a bug or need an extra field or region? Open an issue on the **Issues** tab — response is usually fast. If this Actor saves you time, a **★★★★★ review** on the Store page genuinely helps and is hugely appreciated. 🙏

### ⚖️ Legal

This Actor queries publicly available search suggestions and organic results and is intended for legitimate SEO research, content and analytics use. You are responsible for complying with the underlying search engines' terms and any applicable local laws.

***

### 📝 Changelog

#### 2026-07-06

- ✨ README overhaul: added shields badges, a green "why" callout, a fuller input table (expansion modes, concurrency, proxy), extra ready-to-run example scenarios, an SEO/AI cross-promo grid, and a clearer quick-start.

#### 2026-07-01

- Initial release: keyless keyword ideas (Google autocomplete) + live SERP + People Also Ask + related searches in one record; batch, region/language control, pay-per-result for AI agents.

# Actor input Schema

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

One or more seed keywords, e.g. `mcp server`. Each keyword becomes one dataset row with its ideas, SERP and questions. Batch up to 100.

## `keyword` (type: `string`):

A single seed keyword. Use this or the keywords list above.

## `maxSerpResults` (type: `integer`):

How many organic search results to return per keyword (1–30).

## `includeAutocomplete` (type: `boolean`):

Fetch Google autocomplete suggestions — the core keyword-ideas engine. Real queries people type, perfect for long-tail research.

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

How aggressively to expand each seed into ideas.

• **standard** — seed + question prefixes (how/what/why…) + modifiers (vs, alternative, best…). 100+ real ideas.
• **deep** — also appends a–z (answer-the-public style) for maximum long-tail coverage (slower, more requests).
• **off** — only the seed keyword's direct suggestions.

## `includeSerp` (type: `boolean`):

Return the live organic search results (rank, title, URL, snippet) — the pages that currently rank for the keyword.

## `includePaa` (type: `boolean`):

Collect the question-style results (People Also Ask) — great for FAQ content and topic clusters. Best-effort: returns an empty list if none are surfaced.

## `includeRelated` (type: `boolean`):

Collect related searches for topic expansion and content clustering.

## `region` (type: `string`):

Search region and language code, e.g. `us-en`, `uk-en`, `de-de`, `fr-fr`, `es-es`. Controls autocomplete language and SERP region.

## `concurrency` (type: `integer`):

How many keywords to research in parallel.

## `useApifyProxy` (type: `boolean`):

Route requests through Apify datacenter proxy. Recommended to avoid per-IP rate limits.

## `proxyGroups` (type: `array`):

Override proxy group, e.g. `RESIDENTIAL`. Leave empty for datacenter (AUTO).

## Actor input object example

```json
{
  "keywords": [
    "mcp server"
  ],
  "keyword": "ai agent framework",
  "maxSerpResults": 10,
  "includeAutocomplete": true,
  "expansion": "standard",
  "includeSerp": true,
  "includePaa": true,
  "includeRelated": true,
  "region": "us-en",
  "concurrency": 3,
  "useApifyProxy": true,
  "proxyGroups": []
}
```

# Actor output Schema

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

Full dataset of researched keywords. One row = one keyword with all its ideas and SERP.

# 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": [
        "mcp server"
    ],
    "maxSerpResults": 10,
    "includeAutocomplete": true,
    "expansion": "standard",
    "includeSerp": true,
    "includePaa": true,
    "includeRelated": true,
    "region": "us-en",
    "concurrency": 3,
    "useApifyProxy": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/serp-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": ["mcp server"],
    "maxSerpResults": 10,
    "includeAutocomplete": True,
    "expansion": "standard",
    "includeSerp": True,
    "includePaa": True,
    "includeRelated": True,
    "region": "us-en",
    "concurrency": 3,
    "useApifyProxy": True,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/serp-keyword-research").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "mcp server"
  ],
  "maxSerpResults": 10,
  "includeAutocomplete": true,
  "expansion": "standard",
  "includeSerp": true,
  "includePaa": true,
  "includeRelated": true,
  "region": "us-en",
  "concurrency": 3,
  "useApifyProxy": true
}' |
apify call logiover/serp-keyword-research --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/serp-keyword-research",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SERP & Keyword Research — Keyword Ideas API for AI Agents",
        "description": "Keyless keyword research & SERP API. One keyword in, get keyword ideas (Google autocomplete), live organic SERP, People Also Ask questions and related searches out. A DataForSEO / Ahrefs / SEMrush alternative for AI agents. No API key.",
        "version": "1.0",
        "x-build-id": "kPtT27accDj0J95Do"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~serp-keyword-research/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-serp-keyword-research",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~serp-keyword-research/runs": {
            "post": {
                "operationId": "runs-sync-logiover-serp-keyword-research",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~serp-keyword-research/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-serp-keyword-research",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "One or more seed keywords, e.g. `mcp server`. Each keyword becomes one dataset row with its ideas, SERP and questions. Batch up to 100.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "keyword": {
                        "title": "Single keyword",
                        "type": "string",
                        "description": "A single seed keyword. Use this or the keywords list above."
                    },
                    "maxSerpResults": {
                        "title": "Max SERP results per keyword",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "How many organic search results to return per keyword (1–30).",
                        "default": 10
                    },
                    "includeAutocomplete": {
                        "title": "Include keyword ideas (autocomplete)",
                        "type": "boolean",
                        "description": "Fetch Google autocomplete suggestions — the core keyword-ideas engine. Real queries people type, perfect for long-tail research.",
                        "default": true
                    },
                    "expansion": {
                        "title": "Keyword-idea expansion",
                        "enum": [
                            "off",
                            "standard",
                            "deep"
                        ],
                        "type": "string",
                        "description": "How aggressively to expand each seed into ideas.\n\n• **standard** — seed + question prefixes (how/what/why…) + modifiers (vs, alternative, best…). 100+ real ideas.\n• **deep** — also appends a–z (answer-the-public style) for maximum long-tail coverage (slower, more requests).\n• **off** — only the seed keyword's direct suggestions.",
                        "default": "standard"
                    },
                    "includeSerp": {
                        "title": "Include SERP (organic results)",
                        "type": "boolean",
                        "description": "Return the live organic search results (rank, title, URL, snippet) — the pages that currently rank for the keyword.",
                        "default": true
                    },
                    "includePaa": {
                        "title": "Include People Also Ask",
                        "type": "boolean",
                        "description": "Collect the question-style results (People Also Ask) — great for FAQ content and topic clusters. Best-effort: returns an empty list if none are surfaced.",
                        "default": true
                    },
                    "includeRelated": {
                        "title": "Include related keywords",
                        "type": "boolean",
                        "description": "Collect related searches for topic expansion and content clustering.",
                        "default": true
                    },
                    "region": {
                        "title": "Region / language",
                        "type": "string",
                        "description": "Search region and language code, e.g. `us-en`, `uk-en`, `de-de`, `fr-fr`, `es-es`. Controls autocomplete language and SERP region.",
                        "default": "us-en"
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many keywords to research in parallel.",
                        "default": 3
                    },
                    "useApifyProxy": {
                        "title": "Use Apify datacenter proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify datacenter proxy. Recommended to avoid per-IP rate limits.",
                        "default": true
                    },
                    "proxyGroups": {
                        "title": "Proxy groups (advanced)",
                        "type": "array",
                        "description": "Override proxy group, e.g. `RESIDENTIAL`. Leave empty for datacenter (AUTO).",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
