# Google SERP Scraper (`novashieldai/google-serp-scraper`) Actor

Scrape Google search results including organic results, ads, People Also Ask, related searches, featured snippets, knowledge panels. Supports web, news, images, and shopping search.

- **URL**: https://apify.com/novashieldai/google-serp-scraper.md
- **Developed by:** [Ali haydar Karadaş](https://apify.com/novashieldai) (community)
- **Categories:** SEO tools, Developer tools
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

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

Scrape Google search results pages -- organic results, ads, featured snippets, People Also Ask, knowledge panels, related searches, news, images, and shopping results. We built this to be the most complete Google SERP scraper available, returning every element on the search results page in clean, structured JSON.

### What does Google SERP Scraper do?

This actor supports four search types, each returning different result formats.

**Web search** returns the full Google search results page structure: organic results with position, title, URL, snippet, domain, date, and sitelinks. It also captures paid ads (top and bottom), featured snippets, People Also Ask questions with answers, related searches, and knowledge panel data when present. You get the total results count and search time too.

**News search** pulls Google News results for any query -- article title, URL, source name, publication date, thumbnail, and description. Great for media monitoring and trend tracking.

**Images search** returns Google Images results with image URL, source page URL, title, dimensions (width and height), and thumbnail URL.

**Shopping search** scrapes Google Shopping results including product title, price, store/source, URL, rating, review count, and thumbnail. Useful for price monitoring and competitive analysis.

All search types support language and country targeting, pagination, and configurable result counts up to 100 per query.

### What data do you get?

- Organic results: position, title, URL, displayed URL, description, domain, date, sitelinks, cached URL, featured flag
- Ad results: position, title, URL, displayed URL, description, top/bottom placement
- Featured snippet: text, source URL, source title, type (paragraph, list, table)
- People Also Ask: question, answer snippet, source URL, source title
- Related searches: query text and search URL
- Knowledge panel: title, type, description, source, image, key-value attributes
- News results: position, title, URL, source, date, thumbnail, description
- Image results: position, title, URL, source URL, dimensions, thumbnail
- Shopping results: position, title, price, source, URL, rating, review count, thumbnail
- Search metadata: query, language, country, total results count, time taken

### Who is this for?

- **SEO professionals** tracking keyword rankings and SERP feature presence
- **PPC managers** monitoring competitor ad copy and positioning
- **Content strategists** analyzing People Also Ask and featured snippets for content ideas
- **E-commerce teams** tracking Google Shopping prices and competitor listings
- **Researchers** collecting large-scale search data for market analysis

### How to use it

1. Choose your search type: web, news, images, or shopping.
2. Enter your search query.
3. Set the number of results you want (up to 100).
4. Optionally pick a language and country for localized results.
5. Run it and export your structured SERP data.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| mode | string | web | Search type: web, news, images, or shopping |
| query | string | - | Search query. Required |
| num | integer | 10 | Number of results to return (1-100) |
| language | string | en | Language code: en, es, fr, de, it, pt, nl, pl, ru, ja, ko, zh, ar, tr, hi, sv, da, no, fi, th |
| country | string | us | Country code for localized results |
| page | integer | 1 | Results page number (1-10) |

### Sample output

```json
{
  "query": "best laptop 2026",
  "language": "en",
  "country": "us",
  "total_results": "About 1,240,000,000",
  "time_taken": "0.52 seconds",
  "organic_results": [
    {
      "position": 1,
      "title": "Best Laptops 2026: Top Picks for Every Budget",
      "url": "https://www.techradar.com/best/best-laptops",
      "displayed_url": "techradar.com > best > best-laptops",
      "description": "We tested over 50 laptops to find the best options for work, gaming, and everyday use...",
      "domain": "techradar.com",
      "date": "3 days ago",
      "is_featured": false
    }
  ],
  "featured_snippet": {
    "text": "The MacBook Pro M4 leads our ranking for the best overall laptop in 2026...",
    "url": "https://www.techradar.com/best/best-laptops",
    "title": "Best Laptops 2026 - TechRadar",
    "type": "paragraph"
  },
  "people_also_ask": [
    {
      "question": "What is the best laptop to buy right now?",
      "snippet": "The MacBook Pro M4 is our top pick for most users...",
      "url": "https://www.techradar.com/best/best-laptops",
      "title": "Best Laptops 2026"
    }
  ],
  "related_searches": [
    { "query": "best laptop for students 2026", "url": "https://www.google.com/search?q=..." }
  ]
}
````

### How much does it cost?

This actor costs **$0.003 per result**. 1,000 SERP queries run you $3, and 10,000 cost $30.

Every Apify account comes with $5 in free monthly credits, so you can run plenty of test queries for free.

### Common questions

**Can I track my keyword rankings over time?**
Yes. Schedule the actor to run daily or weekly with your target keywords, then compare your domain's position across runs. The structured output makes it straightforward to build a rank tracker on top of this.

**Does it return Google Ads data?**
Yes. Web search mode captures both top and bottom ads with titles, URLs, descriptions, and position numbers.

**Can I get results for specific locations within a country?**
The country parameter targets results at the national level. For city-level targeting, include the city name in your query (e.g., "plumber in Chicago").

### Contact & Custom Solutions

Need a custom scraper, higher volume, or a specific integration? We're here to help.

If anything isn't working right or you need support, don't hesitate to reach out.

- Telegram: [t.me/novashield\_dev](https://t.me/novashield_dev)
- Email: novashield.dev@gmail.com

# Actor input Schema

## `mode` (type: `string`):

Search type: 'web' for web results, 'news' for news, 'images' for image results, 'shopping' for products.

## `query` (type: `string`):

Search query string. Example: 'best restaurants in NYC'.

## `num` (type: `integer`):

Results Count

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

Search language code. Example: 'en', 'fr', 'de'.

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

Country code for localized results. Example: 'us', 'uk', 'de'.

## `page` (type: `integer`):

Page

## Actor input object example

```json
{
  "mode": "web",
  "query": "best laptop 2026",
  "num": 10,
  "language": "en",
  "country": "us",
  "page": 1
}
```

# 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 = {
    "query": "best laptop 2026"
};

// Run the Actor and wait for it to finish
const run = await client.actor("novashieldai/google-serp-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "query": "best laptop 2026" }

# Run the Actor and wait for it to finish
run = client.actor("novashieldai/google-serp-scraper").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 '{
  "query": "best laptop 2026"
}' |
apify call novashieldai/google-serp-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google SERP Scraper",
        "description": "Scrape Google search results including organic results, ads, People Also Ask, related searches, featured snippets, knowledge panels. Supports web, news, images, and shopping search.",
        "version": "1.0",
        "x-build-id": "JlDWyQfQ5BuecDabY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/novashieldai~google-serp-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-novashieldai-google-serp-scraper",
                "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/novashieldai~google-serp-scraper/runs": {
            "post": {
                "operationId": "runs-sync-novashieldai-google-serp-scraper",
                "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/novashieldai~google-serp-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-novashieldai-google-serp-scraper",
                "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",
                "required": [
                    "query"
                ],
                "properties": {
                    "mode": {
                        "title": "Search Type",
                        "enum": [
                            "web",
                            "news",
                            "images",
                            "shopping"
                        ],
                        "type": "string",
                        "description": "Search type: 'web' for web results, 'news' for news, 'images' for image results, 'shopping' for products.",
                        "default": "web"
                    },
                    "query": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search query string. Example: 'best restaurants in NYC'."
                    },
                    "num": {
                        "title": "Results Count",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Results Count",
                        "default": 10
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "pt",
                            "nl",
                            "pl",
                            "ru",
                            "ja",
                            "ko",
                            "zh",
                            "ar",
                            "tr",
                            "hi",
                            "sv",
                            "da",
                            "no",
                            "fi",
                            "th"
                        ],
                        "type": "string",
                        "description": "Search language code. Example: 'en', 'fr', 'de'.",
                        "default": "en"
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Country code for localized results. Example: 'us', 'uk', 'de'.",
                        "default": "us"
                    },
                    "page": {
                        "title": "Page",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Page",
                        "default": 1
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
