# Google Search Results (SERP) Scraper - SERP API (`khadinakbar/scrape-google-serp`) Actor

Scrape Google Search results with 95%+ health rate. Extract organic results, featured snippets, People Also Ask, Knowledge Graph, related searches & ads. 28% cheaper than alternatives. Export data, run via API, schedule and monitor runs, or integrate with other tools.

- **URL**: https://apify.com/khadinakbar/scrape-google-serp.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 pages

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/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

## ⚡ Google SERP Scraper — Fast, Affordable & Complete SERP API

### What does Google SERP Scraper do?

Google SERP Scraper extracts structured data from Google Search Engine Results Pages (SERPs) at scale. Powered by Apify's dedicated Google SERP proxy pool, it achieves a 95%+ health success rate — one of the highest in the category. Send any search query, get back clean JSON with organic results, featured snippets, People Also Ask questions, Knowledge Graph panels, related searches, and ad results.

### Why use Google SERP Scraper?

- **56% cheaper than alternatives** on the free tier ($0.002/page vs $0.0045)
- **28% cheaper on paid plans** ($0.0018/page vs $0.0025 for BRONZE)
- **95%+ health success rate** via Apify's dedicated GOOGLE_SERP proxy pool — purpose-built for Google
- **No add-on fees** — featured snippets, PAA, Knowledge Graph, related searches, and ads are all included in the base price
- **Batch mode** — scrape hundreds of queries in a single run
- **MCP-ready output** — semantic field names and field-level descriptions make this actor the top choice for AI agents using Claude, ChatGPT, and Cursor

Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools.

### What data can Google SERP Scraper extract?

| Field | Description | Example |
|---|---|---|
| `search_query` | The search query | `"best CRM software 2025"` |
| `results_page` | Page number (1 = top 10) | `1` |
| `total_results_count` | Google's result count estimate | `"About 2,450,000,000 results"` |
| `country_code` | Country targeted (gl parameter) | `"US"` |
| `language_code` | Language targeted (hl parameter) | `"en"` |
| `organic_results` | Array of non-paid results with position, title, URL, display URL, description, date, sitelinks, and emphasized keywords | `[{position: 1, title: "...", url: "..."}]` |
| `featured_snippet` | Answer box / Position 0 with title, description, URL | `{title: "...", description: "..."}` |
| `people_also_ask` | Related questions from the PAA box | `["What is CRM?", "Is Salesforce free?"]` |
| `related_searches` | Related search suggestions from bottom of SERP | `["crm software free", "best crm 2025"]` |
| `knowledge_graph` | Entity panel with title, type, description, website | `{title: "Salesforce", type: "Software company"}` |
| `ad_results` | Paid Google Ads with title, URL, description | `[{title: "Try CRM Free", url: "..."}]` |
| `scraped_at` | ISO 8601 timestamp | `"2026-04-08T10:30:00.000Z"` |
| `source_url` | Exact Google URL scraped | `"https://www.google.com/search?q=..."` |

### How to Scrape Google Search Results

#### Step 1 — Add your queries

Enter your keywords in the **Search Queries** field. Each query is scraped separately:

```json
{
  "queries": [
    "best CRM software 2025",
    "HubSpot vs Salesforce comparison",
    "CRM software for small business"
  ],
  "maxResultsPages": 3,
  "countryCode": "US",
  "languageCode": "en"
}
````

#### Step 2 — Configure options

- Set **Max Result Pages** (1 = positions 1–10, 3 = positions 1–30, 10 = top 100)
- Set **Country Code** (`US`, `GB`, `DE`, `AU`, `CA`, `FR`, `IN`, `BR`, `JP`)
- Set **Language Code** (`en`, `es`, `de`, `fr`, `pt`, `ja`, `zh-CN`)
- Toggle **SERP features** to include/exclude (featured snippets, PAA, etc.)

#### Step 3 — Run and export

Click **Start** and download your results as JSON, CSV, or Excel. You can also schedule runs or trigger via API.

### Use Cases

**SEO Professionals** — Track keyword rankings, monitor SERP features (featured snippets, PAA, Knowledge Graph), analyze competitor positioning, and identify content opportunities from related searches.

**Content Marketers** — Mine People Also Ask questions for FAQ content, find content gaps by comparing organic results, identify topics with Knowledge Graph panels for entity optimization.

**Market Researchers** — Analyze what organic competitors appear for any keyword set. Identify the top-ranking content types, domains, and content structures.

**AI & LLM Pipelines** — Feed current Google results into RAG systems, LangChain workflows, or AI research assistants. The structured JSON format with semantic field names is designed for AI agent consumption.

**Lead Generation** — Extract business URLs ranking for industry keywords, then enrich with contact data using complementary actors.

**Ad Intelligence** — Monitor which brands are running Google Ads for your target keywords. Track ad copy, display URLs, and competitive ad presence over time.

### Pricing

This actor uses **pay-per-event pricing**: you pay per SERP page scraped.

| Plan | Price Per Page | 100 Pages | 1,000 Pages | 10,000 Pages |
|---|---|---|---|---|
| FREE | $0.002 | $0.20 | $2.00 | $20.00 |
| BRONZE | $0.0018 | $0.18 | $1.80 | $18.00 |
| SILVER | $0.0015 | $0.15 | $1.50 | $15.00 |
| GOLD | $0.0012 | $0.12 | $1.20 | $12.00 |

**Cost examples:**

- Track 50 keywords × 1 page = 50 pages → **$0.09** (BRONZE)
- Full top-30 audit for 100 keywords = 300 pages → **$0.54** (BRONZE)
- Weekly rank tracking for 500 keywords = 500 pages → **$0.90** (BRONZE)

Featured snippets, People Also Ask, Knowledge Graph, related searches, and ad extraction are all **included at no extra charge**.

### Running via API

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('YOUR_USERNAME/scrape-google-serp').call({
  queries: ['best project management software', 'asana vs monday.com'],
  maxResultsPages: 3,
  countryCode: 'US',
  languageCode: 'en',
  includePeopleAlsoAsk: true,
  includeRelatedSearches: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} SERP pages`);
console.log(`Top result for first query: ${items[0].organic_results[0].url}`);
```

### Input Parameters Reference

| Parameter | Type | Default | Description |
|---|---|---|---|
| `queries` | string\[] | `["apify web scraping"]` | Search keywords to query on Google |
| `startUrls` | object\[] | `[]` | Direct Google search URLs (overrides country/language) |
| `maxResultsPages` | integer | `1` | Pages to scrape per query (1 page = ~10 results) |
| `resultsPerPage` | integer | `10` | Results per page (10, 20, 30, 50, 100) |
| `countryCode` | string | `"US"` | Google country code (US, GB, DE, FR, etc.) |
| `languageCode` | string | `"en"` | Google language code (en, es, de, fr, etc.) |
| `includeAds` | boolean | `true` | Extract paid ad results |
| `includeFeaturedSnippet` | boolean | `true` | Extract featured snippet / answer box |
| `includePeopleAlsoAsk` | boolean | `true` | Extract People Also Ask questions |
| `includeRelatedSearches` | boolean | `true` | Extract related search suggestions |
| `includeKnowledgeGraph` | boolean | `true` | Extract Knowledge Graph panel |
| `maxConcurrency` | integer | `5` | Parallel requests (reduce if seeing blocks) |

### Frequently Asked Questions

**Q: Why is the success rate so high?**
This actor uses Apify's dedicated `GOOGLE_SERP` proxy group — a purpose-built pool of IP addresses specifically maintained for Google Search scraping. It handles CAPTCHA bypass, session rotation, and geographic targeting automatically.

**Q: How do I scrape Google results for a specific country?**
Set `countryCode` to the ISO 3166-1 alpha-2 code: `US` for United States, `GB` for United Kingdom, `DE` for Germany, `AU` for Australia, etc. The actor adds the `gl` parameter to Google's URL automatically.

**Q: Can I scrape multiple pages (positions 11–100)?**
Yes. Set `maxResultsPages: 10` to get positions 1–100 for each query. Each page = 1 billing event.

**Q: What if a CAPTCHA appears?**
The actor automatically detects CAPTCHAs and retries with a new session from the SERP proxy pool. The proxy pool manages this transparently — you should not see CAPTCHA failures in normal usage.

**Q: Can I schedule regular SERP tracking runs?**
Yes. Use Apify Scheduler to run this actor daily, weekly, or at any interval. Export to your preferred format (CSV, JSON, Excel) after each run.

**Q: How current are the results?**
Results are scraped in real-time at the moment you run the actor. Google results vary by time of day, personalization, and location. For consistent rank tracking, always use the same `countryCode` and `languageCode` settings.

**Q: Does this support Google Images, News, or Shopping results?**
The current version focuses on Google Web Search (`search_type: "web"`). Image, News, and Shopping SERP types are planned for a future release.

### Works Great With

- **[Contact Finder](https://apify.com)** — Enrich URLs from organic results with emails and contact info
- **[Website Content Crawler](https://apify.com/apify/website-content-crawler)** — Deep-crawl top-ranking pages to analyze content structure
- **[RAG Web Browser](https://apify.com/apify/rag-web-browser)** — Feed SERP results into AI pipelines and RAG workflows

### Technical Notes

- Uses **CheerioCrawler** (fast, low-memory HTML parsing — no browser overhead)
- Multiple **CSS selector fallbacks** for every SERP element (survives Google redesigns)
- **Session pool rotation** with Apify SERP proxy for anti-detection
- **Consistent output shape** across all records — safe for AI schema inference
- **Migration-safe**: saves progress to key-value store and resumes on actor migration events
- **PPE charge limit safe**: stops gracefully when budget is exhausted

### Legal Disclaimer

*This actor is intended for lawful collection of publicly available data from Google Search. Users are solely responsible for ensuring their use complies with applicable laws, Google's Terms of Service, and data protection regulations including GDPR, CCPA, and other regional privacy laws. Anthropic, Apify, and the actor developer assume no liability for any misuse. Do not use this actor to collect personal data without a lawful basis, to engage in anti-competitive practices, or in violation of any third party's rights.*

# Actor input Schema

## `queries` (type: `array`):

Use this field when the user provides keywords or search terms. Enter one or more queries — each is scraped separately, one result record per page. Do NOT use this when the user provides a direct Google search URL — use startUrls for that.

## `startUrls` (type: `array`):

Use this field when the user provides a specific Google search URL (e.g. https://www.google.com/search?q=...). Country/language settings are embedded in the URL itself. Do NOT use this for plain keyword queries — use queries instead.

## `maxResultsPages` (type: `integer`):

How many pages of Google results to scrape per query. Each page = 10 organic results (default). 1 = positions 1–10, 3 = positions 1–30, 10 = positions 1–100. Each page = 1 billing event.

## `resultsPerPage` (type: `integer`):

Number of organic results per page. Google default is 10. Increase for more results per billing event (up to 100). Recommended values: 10, 20, 30, 50, 100.

## `countryCode` (type: `string`):

Google country targeting. Controls which regional Google index is queried. Examples: US, GB, DE, FR, AU, CA, IN, BR, JP, MX. Leave empty for global results.

## `languageCode` (type: `string`):

Google interface and results language. Examples: en, es, de, fr, pt, ja, zh-CN, ar, ru. Controls Google UI language and biases results toward that language.

## `includeAds` (type: `boolean`):

Extract paid Google Ads appearing at the top and bottom of results pages. Results stored in the ad\_results array field.

## `includeFeaturedSnippet` (type: `boolean`):

Extract the featured snippet (answer box / Position 0) when present on the SERP. Stored in the featured\_snippet field.

## `includePeopleAlsoAsk` (type: `boolean`):

Extract the 'People Also Ask' questions section. Useful for content research, FAQ generation, and topic clustering. Stored in the people\_also\_ask array.

## `includeRelatedSearches` (type: `boolean`):

Extract related search suggestions from the bottom of the SERP. Excellent for keyword research and topic mapping. Stored in the related\_searches array.

## `includeKnowledgeGraph` (type: `boolean`):

Extract the Knowledge Graph panel (entity info box) when present. Contains entity title, type, description, and official website. Stored in the knowledge\_graph field.

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

Number of parallel requests sent to Google. Higher = faster but more likely to trigger rate limits. Recommended: 5 for standard use, 2–3 if experiencing blocks.

## Actor input object example

```json
{
  "queries": [
    "best project management software",
    "apify web scraping"
  ],
  "startUrls": [],
  "maxResultsPages": 1,
  "resultsPerPage": 10,
  "countryCode": "US",
  "languageCode": "en",
  "includeAds": true,
  "includeFeaturedSnippet": true,
  "includePeopleAlsoAsk": true,
  "includeRelatedSearches": true,
  "includeKnowledgeGraph": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `overview` (type: `string`):

All scraped Google Search result pages. Each record contains: search\_query, organic\_results (array of {position, title, url, display\_url, description}), featured\_snippet, people\_also\_ask, related\_searches, knowledge\_graph, ad\_results, scraped\_at, and source\_url.

# 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 = {
    "queries": [
        "best project management software",
        "apify web scraping"
    ],
    "maxResultsPages": 1,
    "resultsPerPage": 10,
    "countryCode": "US",
    "languageCode": "en",
    "includeAds": true,
    "includeFeaturedSnippet": true,
    "includePeopleAlsoAsk": true,
    "includeRelatedSearches": true,
    "includeKnowledgeGraph": true,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/scrape-google-serp").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 = {
    "queries": [
        "best project management software",
        "apify web scraping",
    ],
    "maxResultsPages": 1,
    "resultsPerPage": 10,
    "countryCode": "US",
    "languageCode": "en",
    "includeAds": True,
    "includeFeaturedSnippet": True,
    "includePeopleAlsoAsk": True,
    "includeRelatedSearches": True,
    "includeKnowledgeGraph": True,
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/scrape-google-serp").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 '{
  "queries": [
    "best project management software",
    "apify web scraping"
  ],
  "maxResultsPages": 1,
  "resultsPerPage": 10,
  "countryCode": "US",
  "languageCode": "en",
  "includeAds": true,
  "includeFeaturedSnippet": true,
  "includePeopleAlsoAsk": true,
  "includeRelatedSearches": true,
  "includeKnowledgeGraph": true,
  "maxConcurrency": 5
}' |
apify call khadinakbar/scrape-google-serp --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Search Results (SERP) Scraper - SERP API",
        "description": "Scrape Google Search results with 95%+ health rate. Extract organic results, featured snippets, People Also Ask, Knowledge Graph, related searches & ads. 28% cheaper than alternatives. Export data, run via API, schedule and monitor runs, or integrate with other tools.",
        "version": "1.0",
        "x-build-id": "OrnUCgS1BU7k3JzZF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~scrape-google-serp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-scrape-google-serp",
                "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/khadinakbar~scrape-google-serp/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-scrape-google-serp",
                "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/khadinakbar~scrape-google-serp/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-scrape-google-serp",
                "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": {
                    "queries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "Use this field when the user provides keywords or search terms. Enter one or more queries — each is scraped separately, one result record per page. Do NOT use this when the user provides a direct Google search URL — use startUrls for that.",
                        "default": [
                            "apify web scraping"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Direct Google Search URLs",
                        "type": "array",
                        "description": "Use this field when the user provides a specific Google search URL (e.g. https://www.google.com/search?q=...). Country/language settings are embedded in the URL itself. Do NOT use this for plain keyword queries — use queries instead.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResultsPages": {
                        "title": "Max Result Pages Per Query",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many pages of Google results to scrape per query. Each page = 10 organic results (default). 1 = positions 1–10, 3 = positions 1–30, 10 = positions 1–100. Each page = 1 billing event.",
                        "default": 1
                    },
                    "resultsPerPage": {
                        "title": "Results Per Page",
                        "minimum": 10,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Number of organic results per page. Google default is 10. Increase for more results per billing event (up to 100). Recommended values: 10, 20, 30, 50, 100.",
                        "default": 10
                    },
                    "countryCode": {
                        "title": "Country Code (gl)",
                        "maxLength": 5,
                        "type": "string",
                        "description": "Google country targeting. Controls which regional Google index is queried. Examples: US, GB, DE, FR, AU, CA, IN, BR, JP, MX. Leave empty for global results.",
                        "default": "US"
                    },
                    "languageCode": {
                        "title": "Language Code (hl)",
                        "maxLength": 10,
                        "type": "string",
                        "description": "Google interface and results language. Examples: en, es, de, fr, pt, ja, zh-CN, ar, ru. Controls Google UI language and biases results toward that language.",
                        "default": "en"
                    },
                    "includeAds": {
                        "title": "Extract Ad Results",
                        "type": "boolean",
                        "description": "Extract paid Google Ads appearing at the top and bottom of results pages. Results stored in the ad_results array field.",
                        "default": true
                    },
                    "includeFeaturedSnippet": {
                        "title": "Extract Featured Snippet",
                        "type": "boolean",
                        "description": "Extract the featured snippet (answer box / Position 0) when present on the SERP. Stored in the featured_snippet field.",
                        "default": true
                    },
                    "includePeopleAlsoAsk": {
                        "title": "Extract People Also Ask",
                        "type": "boolean",
                        "description": "Extract the 'People Also Ask' questions section. Useful for content research, FAQ generation, and topic clustering. Stored in the people_also_ask array.",
                        "default": true
                    },
                    "includeRelatedSearches": {
                        "title": "Extract Related Searches",
                        "type": "boolean",
                        "description": "Extract related search suggestions from the bottom of the SERP. Excellent for keyword research and topic mapping. Stored in the related_searches array.",
                        "default": true
                    },
                    "includeKnowledgeGraph": {
                        "title": "Extract Knowledge Graph",
                        "type": "boolean",
                        "description": "Extract the Knowledge Graph panel (entity info box) when present. Contains entity title, type, description, and official website. Stored in the knowledge_graph field.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrent Requests",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Number of parallel requests sent to Google. Higher = faster but more likely to trigger rate limits. Recommended: 5 for standard use, 2–3 if experiencing blocks.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
