# Google Search Results Scraper: SERP to JSON, Real URLs (`transparent_meteorite/google-search-results-scraper`) Actor

Scrape Google search results pages: organic results with the real target URL, title, description, date and sitelinks, plus ads, People also ask and related searches. Any country and language, site: and date filters, many pages per query. One row per results page. No Google account needed.

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

## Pricing

from $4.20 / 1,000 search 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Results Scraper: SERP to JSON with real URLs

![Google Search Results Scraper: features, price and a real output row](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-google-search-results-scraper-banner-10132140.png)

[![Run it free on Apify](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-cta.png)](https://console.apify.com/actors/ApMSzNdxkKtFc7CtL/input)

| Price per 1,000 result pages | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| **This Actor** | **$4.50** | **$4.40** | **$4.30** | **$4.20** |

<sub>Pay per event, no monthly rental. Prices read from each Actor's public Apify pricing on 2026-10-13; check the Pricing tab for the current figure.</sub>

![Google Search Results Scraper sample output table from a real run](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-google-search-results-scraper-output-10132140.png)

Scrape Google search results pages into clean JSON, CSV or Excel: organic results with position, title, real destination URL, displayed URL, site name, description, date, emphasized keywords and sitelinks, plus the AI Overview text and sources when Google shows one (opt-in), People also ask and related searches. Paid ads are an optional best-effort extra and are often empty. Any country and language, desktop or mobile, site: and date filters, Google search URLs accepted as input. One row per results page, so you pay per page, not per result.

- **In short:** Google Search Results Scraper (Apify actor `transparent_meteorite/google-search-results-scraper`) turns Google searches into structured rows: one row per results page with organic results, People also ask and related queries, plus optional AI Overview capture. Ads are best effort and often empty.
- **Who it is for:** SEO rank tracking, competitor and content research, lead discovery (site: searches), market research, AI agents that need live Google results.
- **Input:** queries (keywords or full Google search URLs, one per line), pages per query, country, language, date range, site and relatedToSite, exact match, words in title/text/URL, mobile results, unfiltered results, save HTML.
- **Output:** searchQuery (term, page, country, language, device), url, hasNextPage, organicResultsCount, organicResults\[] (position, title, url, displayedUrl, siteName, description, date, emphasizedKeywords, siteLinks), aiOverview (opt-in), paidResults\[] (best effort, often empty), peopleAlsoAsk\[], relatedQueries\[], spellingCorrection, noResults.
- **Pricing:** pay per results page: $0.0045 free plan, $0.0044 Bronze, $0.0043 Silver, $0.0042 Gold and above, plus $0.00005 per run start. Empty pages and off-topic pages are not charged.
- **Limits:** Google returns about 10 organic results per page. Google sometimes ignores site: or other operators on a page; such pages are retried once and, if still off-topic, delivered flagged and not charged.

**Paste your keywords, press Start, get every Google result with its real URL in under a minute.**

### Run in 30 seconds

1. Open the actor in [Apify Console](https://console.apify.com/actors?search=transparent_meteorite%2Fgoogle-search-results-scraper) (a free Apify account is enough).
2. Press **Start** with the prefilled input, or use your own:

```json
{
  "queries": "best crm for small business\nhttps://www.google.com/search?q=plumber+detroit&gl=us",
  "maxPagesPerQuery": 2,
  "countryCode": "us"
}
```

3. Open the **Output** tab: the **Organic results** view lists every result with its position. Export to CSV, Excel or JSON. An empty input `{}` runs one example query.

### Why choose this over alternatives

- **Real destination URLs.** Google's redirect links are resolved, so `url` is the page itself, not a google.com/url link.
- **Pay for pages that have results.** No-results pages and pages where Google ignored your site: filter are never charged.
- **Same input as the most-used Google scraper.** queries, maxPagesPerQuery, countryCode, languageCode, quickDateRange, site, forceExactMatch, wordsInTitle and mobileResults work the same way, so saved inputs carry over.
- **Fast.** About 15-35 seconds per page, queries run in parallel.

### What you get: output fields

| Field | Meaning |
|---|---|
| searchQuery | term, query sent, url, device, page, country, language, quickDateRange |
| hasNextPage, resultsTotal | Whether Google has another page; total count when shown |
| organicResults\[] | position, title, url, displayedUrl, siteName, description, date, emphasizedKeywords, siteLinks |
| aiOverview | AI Overview text and sources when Google shows one (set includeAiOverview; slower, about 15-45 s per page) |
| paidResults\[] | Ads: best effort, often empty (Google rarely serves ads to datacenter locations; set includeAds to try, no guarantee) |
| peopleAlsoAsk\[] | Questions in the People also ask box |
| relatedQueries\[] | Related searches with their Google URL |
| spellingCorrection | "Showing results for" text |
| noResults, operatorIgnoredByGoogle | Flags for empty or off-topic pages (not charged) |
| html / htmlSnapshotUrl | Optional raw page |

### Sample output

Real row from a test run on 2026-10-13 (trimmed to 2 results):

```json
{
  "searchQuery": { "term": "best crm for small business", "page": 1, "device": "DESKTOP", "countryCode": "US", "languageCode": "en", "resultsPerPage": 10 },
  "url": "https://www.google.com/search?q=best+crm+for+small+business&hl=en&gl=us",
  "hasNextPage": true,
  "organicResultsCount": 9,
  "organicResults": [
    {
      "position": 1,
      "title": "Best CRM Software for Small Business in 2026",
      "url": "https://crm.org/crmland/best-crm-for-small-business",
      "displayedUrl": "https://crm.org › crmland › best-crm-for-small-business",
      "siteName": "CRM.org",
      "description": "CRMs like HubSpot and Zoho Bigin are designed for small teams that want to get moving in under 30 minutes...",
      "date": "Jun 19, 2026",
      "emphasizedKeywords": ["HubSpot and Zoho Bigin"],
      "siteLinks": [{ "title": "What features should I...", "url": "https://crm.org/crmland/best-crm-for-small-business#what-features-should-i-prioritize-crm-my-small-business" }],
      "type": "organic"
    },
    {
      "position": 2,
      "title": "The Best CRM Software for Small Businesses",
      "url": "https://www.zoho.com/crm/small-business-crm-software/",
      "displayedUrl": "https://www.zoho.com › crm › small-business-crm-soft...",
      "siteName": "Zoho",
      "description": "Zoho CRM the best choice for small businesses? Easy to use...",
      "date": null,
      "emphasizedKeywords": ["Zoho CRM"],
      "siteLinks": [],
      "type": "organic"
    }
  ],
  "peopleAlsoAsk": [{ "question": "What is the best CRM software for small businesses?" }, { "question": "Which CRM is beginner friendly?" }],
  "relatedQueries": [{ "title": "...", "url": "https://www.google.com/search?q=..." }]
}
```

### Use cases

- **SEO and rank tracking:** check where a domain ranks for a keyword list, by country and language, on a schedule.
- **Competitor and ad research:** see who ranks and which questions Google surfaces for a topic, with People Also Ask and related searches.
- **Lead and market research:** search with site:, intitle: and date filters to build lists of companies, pages and mentions.
- **AI and content workflows:** feed fresh organic results into assistants, briefs and monitoring pipelines via the API or MCP.

### Input options

- **queries**: one keyword or Google search URL per line (URL params gl, hl, tbs, lr, start, cr, uule, safe are kept).
- **maxPagesPerQuery**: 1-10 pages of about 10 results each.
- **countryCode, languageCode, searchLanguage**: where and in which language to search.
- **quickDateRange**: d, w, m, y or e.g. w2, m6.
- **site, relatedToSite, forceExactMatch, wordsInTitle, wordsInText, wordsInUrl**: search operators built for you.
- **mobileResults, includeUnfilteredResults, saveHtml, saveHtmlToKeyValueStore**.

### Pricing

| Event | Free | Bronze | Silver | Gold, Platinum, Diamond |
|---|---|---|---|---|
| Results page scraped | $0.0045 | $0.0044 | $0.0043 | $0.0042 |
| Run start | $0.00005 | $0.00005 | $0.00005 | $0.00005 |

1,000 pages (about 10,000 results) cost $4.20-4.50. Set **Maximum cost per run** in the run options and the actor stops before going over it.

### FAQ

**Why 10 results per page?** Google now serves about 10 organic results per page; use maxPagesPerQuery for depth.

**Why did a page come back with operatorIgnoredByGoogle?** Google sometimes drops site: or other operators. The actor retries once; if the page is still off-topic it is delivered for transparency and not charged.

**Are ads captured?** Not reliably. This actor is built for organic results and AI Overviews. Ads appear only when Google shows them to the proxy location, so paidResults is often empty even with includeAds on. Do not buy it for ad monitoring.

**Can I check rankings for my domain?** Yes: run your keywords with maxPagesPerQuery 3-5 and filter organicResults by url.

### Use it from AI assistants (MCP)

Google Search Results Scraper works as a live web search tool for AI assistants through the official Apify MCP server. Add this URL to any MCP client (Claude Desktop, Claude Code, Cursor, ChatGPT connectors, VS Code):

```
https://mcp.apify.com/?actors=transparent_meteorite/google-search-results-scraper
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?actors=transparent_meteorite/google-search-results-scraper",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Then ask, for example: "Search Google for the top 20 results for 'emergency plumber detroit' and tell me which domains rank."

### Limits

- Google serves about 10 organic results per page; use `maxPagesPerQuery` (1-10) for depth.
- Ads are best effort and often empty, because Google rarely shows ads to datacenter locations. Do not buy this actor for ad monitoring.
- Google sometimes ignores `site:` or other operators. Such pages are retried once and, if still off-topic, delivered with `operatorIgnoredByGoogle` and not charged.
- AI Overview capture is opt-in and slower (about 15-45 seconds per page).
- Results reflect what Google shows to the chosen country and language at run time; rankings can differ for signed-in users.

### Terms and responsible use

The actor collects publicly visible Google search results. Respect the terms of the sites you visit and applicable laws when you use the data.

### Support

Bug or missing field? Open an issue on the Issues tab with the run URL.

### More resources

- Guide & examples: [mamoo85.github.io/open-data-actors/google-search-results-scraper.html](https://mamoo85.github.io/open-data-actors/google-search-results-scraper.html)

### Related actors

Other public-data actors from the same publisher that pair well with this one:

- [Technical SEO Audit: Site Crawler with 0-100 Score](https://apify.com/transparent_meteorite/technical-seo-page-audit)
- [Google Trends Scraper: Compare, Related, Trending Now](https://apify.com/transparent_meteorite/google-trends-scraper)
- [Website Email Extractor: Contacts, Phones, Socials](https://apify.com/transparent_meteorite/website-contact-extractor)

### More from DWA Open Data

Browse all 69 data Actors, with live prices and sample output, at [open-data-actors.pages.dev](https://open-data-actors.pages.dev).

***

**Feedback:** if this Actor was useful, or if it fell short, an honest review on the [Reviews tab](https://apify.com/transparent_meteorite/google-search-results-scraper/reviews) helps other users decide. Problems or feature requests: please open an [Issue](https://apify.com/transparent_meteorite/google-search-results-scraper/issues) and we usually reply within one business day.

# Actor input Schema

## `queries` (type: `string`):

One search per line. Operators work (site:, intitle:, "exact", -exclude, OR). A full Google search URL on a line is also accepted; its gl, hl, tbs, start and filter parameters are kept.

## `maxPagesPerQuery` (type: `integer`):

Google serves 10 organic results per page. 3 pages = about 30 results. Paging stops when Google has no next page.

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

Kept for compatibility. Google now returns 10 organic results per page whatever is asked; use Pages per search for more.

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

Two-letter country to search from, e.g. us, gb, de, ca, au, in. Changes local rankings.

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

Language of the Google interface, e.g. en, de, fr, es.

## `searchLanguage` (type: `string`):

Restrict results to pages in one language, e.g. de or fr. Empty = any language.

## `site` (type: `string`):

Adds site:example.com to every search. Pages where Google ignores it are flagged and not charged.

## `relatedToSite` (type: `string`):

Adds related:example.com to every search.

## `wordsInTitle` (type: `array`):

Each word must appear in the page title.

## `wordsInText` (type: `array`):

Each word must appear in the page text.

## `wordsInUrl` (type: `array`):

Each word must appear in the URL.

## `forceExactMatch` (type: `boolean`):

Wraps each search in quotes.

## `quickDateRange` (type: `string`):

Only results from the last h (hours), d (days), w (weeks), m (months) or y (years), with an optional number: d1, w2, m6, y1.

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

Best effort, often empty: fetches each page through Google directly and returns paid results only if Google happens to show ads to the proxy location. No guarantee. Slower (about 15-45 s per page) than the default fast route.

## `includeAiOverview` (type: `boolean`):

Fetch each page through Google directly and return the AI Overview text and sources when Google shows one. Slower than the default fast route.

## `mobileResults` (type: `boolean`):

Search as a phone (mobile rankings).

## `includeUnfilteredResults` (type: `boolean`):

Adds filter=0 so Google does not hide near-duplicate results.

## `saveHtml` (type: `boolean`):

Adds the raw page HTML to each row (large rows).

## `saveHtmlToKeyValueStore` (type: `boolean`):

Saves each page HTML as a file and adds a link to it in the row.

## Actor input object example

```json
{
  "queries": "best crm for small business\nproject manager jobs detroit",
  "maxPagesPerQuery": 1,
  "resultsPerPage": 10,
  "countryCode": "us",
  "languageCode": "en",
  "forceExactMatch": false,
  "includeAds": false,
  "includeAiOverview": false,
  "mobileResults": false,
  "includeUnfilteredResults": false,
  "saveHtml": false,
  "saveHtmlToKeyValueStore": false
}
```

# Actor output Schema

## `organic` (type: `string`):

No description

## `pages` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 crm for small business
project manager jobs detroit`,
    "maxPagesPerQuery": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/google-search-results-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": """best crm for small business
project manager jobs detroit""",
    "maxPagesPerQuery": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("transparent_meteorite/google-search-results-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": "best crm for small business\\nproject manager jobs detroit",
  "maxPagesPerQuery": 1
}' |
apify call transparent_meteorite/google-search-results-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,transparent_meteorite/google-search-results-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/ApMSzNdxkKtFc7CtL/builds/2AeCsxIysaZntEBYM/openapi.json
