# Google Search Scraper — Organic, PAA & Related Searches (`uxus.finance/google-search-serp-scraper`) Actor

Structured Google search results as clean JSON. Returns organic results, People Also Ask questions with answers, and related searches — not just a flat link list. Batch multiple queries per run. Country, language, device and pagination supported. Fast, no browser, no proxies needed.

- **URL**: https://apify.com/uxus.finance/google-search-serp-scraper.md
- **Developed by:** [UXUS FINANCE](https://apify.com/uxus.finance) (community)
- **Categories:** Open source
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 query executeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Search Scraper — Organic, PAA & Related Searches

Give it a query. Get back organic results, People Also Ask, and related searches — confirmed live, every time, not a maybe.

### What this actually delivers (and how we know)

Before writing this README we ran 13 distinct queries against two separate Serper accounts, including the textbook trigger queries every SERP tool demos with — "eiffel tower," "how tall is the eiffel tower," "elon musk," "barack obama," commercial buy-intent terms like "buy dyson v15 vacuum" and "nike air max." We inspected the **raw, unmapped upstream response** for several of them, not just our own output.

Result: `organic`, `people_also_ask`, and `related_searches` populated on every query. `ads`, `shopping`, `knowledge_graph`, `answer_box`, and `ai_overview` populated on **zero** of the 13 — including the ones that should be unmissable, like a direct factual question ("what year was the eiffel tower built") or an unambiguous public figure ("barack obama"). That's not a bug in this actor; it's what the upstream API actually returns for these accounts. So that's not what this actor is sold on.

- **Organic results** — title, url, description, position, and (when Google includes them) sitelinks, per-result attributes, and a date
- **People Also Ask** — the expandable question list
- **Related searches** — the query-refinement suggestions at the bottom of the page

### What you get back, per query — real, captured output

This is an actual run of this actor against `"elon musk"`, unedited except for trimming the organic list to save space (the real run returned 9 organic results; 3 are shown):

```json
{
  "query": "elon musk",
  "results": [
    { "title": "Elon Musk", "url": "https://en.wikipedia.org/wiki/Elon_Musk", "description": "Elon Reeve Musk is a businessman and former public official who is the chief executive officer (CEO) and largest shareholder of Tesla and SpaceX. Musk has ...", "score": 1 },
    { "title": "Elon Musk (@elonmusk) / X", "url": "https://x.com/elonmusk", "description": "Listen to Elon. Purchase Suicidal Empathy now, and contribute to the defence of the West! 1.6K · 4.1K · 29K · 6.4M · @elonmusk · Elon Musk · X.", "score": 0.889 },
    { "title": "Elon Musk", "url": "https://www.tesla.com/elon-musk", "description": "As the co-founder and CEO of Tesla, Elon leads all product design, engineering and global manufacturing of the company's electric vehicles, battery products and ...", "score": 0.778 }
  ],
  "organic": [
    { "title": "Elon Musk", "url": "https://en.wikipedia.org/wiki/Elon_Musk", "description": "Elon Reeve Musk is a businessman and former public official who is the chief executive officer (CEO) and largest shareholder of Tesla and SpaceX. Musk has ...", "position": 1 }
  ],
  "ads": [],
  "people_also_ask": [
    { "question": "What is Musk diagnosed with?" },
    { "question": "Does Musk believe in God?" },
    { "question": "Is Elon Musk a trillionaire?" },
    { "question": "Does Elon have 14 children?" }
  ],
  "related_searches": ["Elon Musk net worth", "Elon Musk children", "Elon Musk book", "Elon Musk wife", "Elon Musk car", "Elon Musk Twitter", "Elon Musk age", "Elon Musk money"],
  "knowledge_graph": null,
  "answer_box": null,
  "shopping": [],
  "ai_overview": null,
  "latency_ms": 1978,
  "checked_at": "2026-09-18T07:48:45.997Z"
}
```

Note `knowledge_graph`, `answer_box`, and `shopping` are `null`/`[]` here — for "elon musk," a query that triggers a knowledge panel on google.com directly. That's the honest, representative case, not the exception.

### The optional fields — one honest mention

`ads`, `shopping`, `knowledge_graph`, `answer_box`, and `ai_overview` are present in every response's schema and populate **when the upstream response includes them** — they're not stripped out or faked empty. We just don't sell them, because across 13 test queries on two accounts, none of them ever did. If you find a query where one of these reliably populates, that's useful data — the code already handles it correctly, it just hasn't been observed happening.

### Input

| Field | Type | Required | Notes |
|---|---|---|---|
| `queries` | array of strings | yes | Up to 1,000 per run. One charge event per query executed. |
| `num` | integer | no (default 10) | Organic results requested per query, 1-100. |
| `country` | string | no | 2-letter country code (Google `gl`). Confirmed working — verified geo-targeted results (Spain, Japan, France) in live testing. |
| `language` | string | no | 2+ letter language code (Google `hl`). Confirmed working — verified Spanish-language results for a Spanish query. |
| `page` | integer | no (default 1) | 1-based result page. Confirmed working — page 2 returns genuinely different results than page 1. |
| `device` | string | no | Forwarded to Serper as-is. Accepted without error but no observed effect in testing — not confirmed to do anything. |

A query that fails upstream (Serper error, network failure) gets a `{ "error": ... }` record instead of failing the whole run — and isn't charged.

### Pricing

**$10.00 per 1,000 results returned** (pay-per-event, one `query-executed` event per query — at the default `num: 10` that's $0.10/query). This is well above the $0.11–$1.80-per-1,000 range typical for comparable SERP actors on the Store.

### What this is not

Not a multi-engine tool — it calls Google, through Serper, and nothing else. Not a relevance engine — `score` is rank-derived, same as the rest of the category. Not a source of ads, shopping listings, knowledge-graph data, answer boxes, or AI Overviews — those fields exist in the schema and will populate if the upstream ever returns them for your query, but treat that as a bonus, never an expectation.

# Actor input Schema

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

One or more search queries. Each is billed as one query executed. Up to 1,000 per run.

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

Organic results to request per query, 1-100.

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

2-letter country code (Google gl param), e.g. "us", "gb", "de".

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

2+ letter language code (Google hl param), e.g. "en", "es".

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

1-based result page.

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

Forwarded to Serper as-is if set. Not confirmed to change results — Serper's public documentation does not document a stable device-targeting parameter as of this writing.

## Actor input object example

```json
{
  "num": 10,
  "page": 1
}
```

# Actor output Schema

## `searchResults` (type: `string`):

One record per query executed: organic results, People Also Ask, related searches, plus ads/shopping/knowledge\_graph/answer\_box/ai\_overview when the upstream response includes them.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("uxus.finance/google-search-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("uxus.finance/google-search-serp-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 '{}' |
apify call uxus.finance/google-search-serp-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,uxus.finance/google-search-serp-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/8pY9i0QthiVYIDv3f/builds/qk3WTm3UlAsryzCEG/openapi.json
