# Google SERP API - People Also Ask, Ads & Rank Checker (`pnda/google-search-scraper`) Actor

Google SERP API, no API key or proxy: Google search results as clean JSON with organic rankings, ads, People Also Ask, related searches and featured snippet. SerpApi alternative and rank checker for any country. $0.039 per results page.

- **URL**: https://apify.com/pnda/google-search-scraper.md
- **Developed by:** [PNDA](https://apify.com/pnda) (community)
- **Categories:** SEO tools, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$39.00 / 1,000 results 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google SERP API - People Also Ask, Ads & Rank Checker

**No API key, no proxy, no CAPTCHA.** A Google SERP API you call like any Apify Actor: send keywords, get Google search results as clean JSON, CSV or Excel. Organic rankings, ads, People Also Ask questions, related searches and the featured snippet, for any country, language, device and city.

Use it as a **SerpApi alternative** without a monthly plan, as a **SERP checker / rank checker** for your keywords, to mine **People Also Ask** questions for content, to watch competitor **Google Ads**, or to build lead lists with **Google X-ray search** (`site:linkedin.com/in ceo paris`).

### What you get

| Data | Fields |
|---|---|
| **Organic results** | position, title, URL, domain, displayed URL, description, date |
| **Ads** (when Google shows them) | position, top/bottom block, title, URL, displayed URL, description |
| **People Also Ask** | question (plus answer and source when Google serves them inline) |
| **Related searches** | query, Google URL |
| **Featured snippet** (answer box) | type, title, answer, URL |
| **Page info** | total results reported by Google, page number, whether a next page exists |

- **Any market**: country (`gl`), language (`hl`), desktop / mobile / tablet, Google domain, exact city.
- **Bulk**: thousands of queries per run, duplicates removed, Google search URLs accepted.
- **All Google operators**: `site:`, `intitle:`, `inurl:`, `"exact phrase"`, `OR`, `-exclude`.
- **Budget-safe**: the Actor never fetches a page your *Maximum cost per run* cannot pay for. Empty pages are free.

### Use cases and example queries

| Goal | Example `queries` |
|---|---|
| **Rank checker / SERP checker**: where does my site rank? | `best crm for small business`, `project management software` (then filter `organicResults` by `domain`) |
| **Lead generation with Google X-ray search** | `site:linkedin.com/in ceo paris`, `site:linkedin.com/in "head of growth" berlin`, `site:linkedin.com/company saas london` |
| **Find emails and contact pages** | `"@gmail.com" plumber chicago`, `intitle:contact "marketing agency" austin` |
| **People Also Ask research** (content ideas, FAQ schema) | `how to start a podcast`, `is crm worth it` |
| **Competitor ads monitoring** | `buy running shoes`, `car insurance quote` |
| **Local SERP** | `dentist` with `location` = `Austin,Texas,United States` |
| **Find guest-post and backlink spots** | `"write for us" seo`, `inurl:resources "fitness" links` |
| **Brand and reputation monitoring** | `"your brand" review`, `"your brand" -site:yourbrand.com` |

### Input

| Field | Description | Default |
|---|---|---|
| `queries` | One search per line. Operators work. Google search URLs are accepted. | required |
| `pagesPerQuery` | Results pages per query, 1 to 10 (about 10 organic results each). | `1` |
| `country` | Country code (`us`, `gb`, `fr`, `de`, `in`...). | `us` |
| `language` | Language code (`en`, `fr`, `de`, `pt-BR`...). | `en` |
| `device` | `desktop`, `mobile` or `tablet`. | `desktop` |
| `location` | Optional Google canonical location, e.g. `Austin,Texas,United States`. | - |
| `googleDomain` | Optional, e.g. `google.co.uk`. | `google.com` |

```json
{
  "queries": ["site:linkedin.com/in ceo paris", "best crm for small business"],
  "pagesPerQuery": 2,
  "country": "fr",
  "language": "fr",
  "device": "desktop"
}
```

### Output

One row per results page (query x page). Real example from `site:linkedin.com/in ceo paris` (country `fr`):

```json
{
  "query": "site:linkedin.com/in ceo paris",
  "page": 1,
  "country": "fr",
  "language": "fr",
  "device": "desktop",
  "totalResults": 7650000,
  "organicResults": [
    { "position": 2, "title": "Baptiste Orlandini - CEO Choose Paris Region", "url": "https://fr.linkedin.com/in/baptiste-orlandini-75b1ab89/en", "domain": "fr.linkedin.com", "displayedUrl": "Plus de 4,2 k abonnés", "description": "Après plus de dix ans d'expérience dans le développement économique et l'attractivité territoriale...", "date": null }
  ],
  "ads": [],
  "peopleAlsoAsk": [],
  "relatedSearches": [],
  "featuredSnippet": null,
  "hasNextPage": true,
  "charged": true,
  "scrapedAt": "2026-10-01T07:44:16.333Z"
}
```

`best crm for small business` returns, among others:

```json
"peopleAlsoAsk": [
  { "question": "Will CRM be replaced by AI?", "answer": null, "title": null, "url": null }
]
```

A query without any result returns `{"status": "no-results", "charged": false}`. The `SUMMARY` record in the key-value store gives the run totals.

### Pricing

Pay per event, no subscription: **$0.039 per results page** delivered (`serp-page`), i.e. $39 per 1,000 pages. One page = about 10 organic results plus the ads, People Also Ask, related searches and featured snippet of that page. Empty pages and duplicate queries are free. No API key or SERP plan to buy.

**Works with a free Apify account too.** Free-plan accounts can use every feature at the same per-result prices, paid from their monthly Apify credit. The only limits are your credit and your maximum cost per run.

### Use it as an API

```bash
curl -X POST "https://api.apify.com/v2/acts/pnda~google-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["serp api"], "country": "gb", "language": "en"}'
```

Works with Python and JavaScript Apify clients, Make, Zapier, n8n, and as a tool for AI agents (MCP).

### FAQ

**Do I need a SerpApi, Google or proxy key?** No. You only need an Apify account (a free one works too).

**How many results per page?** About 10 organic results: Google no longer serves 100 results on one page. Use `pagesPerQuery` to go deeper (top 100 = 10 pages).

**How do I track rankings over time?** Save your input as an Apify task and schedule it daily or weekly; each run gives the `position` of every domain.

**Can I target a city?** Yes: set `location` to a Google canonical location such as `Chicago,Illinois,United States`.

**Why is a People Also Ask answer empty?** Google often loads answers only when a user clicks the question. The question is always returned; the answer when Google includes it in the page.

**How do I stay under a budget?** Set *Maximum cost per run* in the run options. The Actor stops before it goes over.

**Is it legal?** It collects publicly visible search results. If your queries return personal data (for example LinkedIn profiles), you are responsible for processing it under the privacy laws that apply to you.

### Related actors

- [Semrush Keyword Research API](https://apify.com/pnda/semrush-keyword): Need search volume, keyword difficulty and CPC for your queries, or a competitor's backlinks?
- [LinkedIn Scraper & People Search](https://apify.com/pnda/linkedin-scraper): Running site:linkedin.com/in searches? Get full profiles and verified emails directly, no cookies.
- [Email Extractor](https://apify.com/pnda/email-extractor): Turn the websites in your results into contacts: emails, phones and social links, verified.

# Actor input Schema

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

One Google search per line. All operators work: site:, intitle:, inurl:, "exact phrase", OR, -exclude. Examples: best crm for startups · site:linkedin.com/in ceo paris (lead lists / LinkedIn X-ray search) · "people also ask" research queries. You can also paste Google search URLs. Duplicates are removed.

## `pagesPerQuery` (type: `integer`):

How many results pages to get for each query (about 10 organic results per page). Billed per page delivered; an empty page is not billed and ends the query.

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

Two-letter country code of the Google results (us, gb, fr, de, in...).

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

Interface language (Google hl code: en, fr, de, es, pt-BR...).

## `device` (type: `string`):

Get the results a desktop, mobile or tablet user would see.

## `location` (type: `string`):

Search as if you were in a precise place, using Google's canonical location name, e.g. "Austin,Texas,United States" or "Paris,Ile-de-France,France".

## `googleDomain` (type: `string`):

e.g. google.co.uk, google.fr. Defaults to google.com.

## Actor input object example

```json
{
  "queries": [
    "apify"
  ],
  "pagesPerQuery": 1,
  "country": "us",
  "language": "en",
  "device": "desktop"
}
```

# Actor output Schema

## `dataset` (type: `string`):

All results pages (JSON, CSV, Excel).

# 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": [
        "apify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pnda/google-search-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 = { "queries": ["apify"] }

# Run the Actor and wait for it to finish
run = client.actor("pnda/google-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "apify"
  ]
}' |
apify call pnda/google-search-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WA6w01nObYh0vsuBa/builds/aEObMHwKGBe4gKAoI/openapi.json
