# Google Search Results Scraper - SERP API (`eiv/google-search-scraper`) Actor

Scrape Google search results by keyword or URL: organic results with real URLs and ranks, places, top stories, knowledge panel, related searches, News and Videos tabs. Optional AI Overview, People also ask and ads. Any country, language or city. From $0.40 per 1,000 pages.

- **URL**: https://apify.com/eiv/google-search-scraper.md
- **Developed by:** [Eimantas V](https://apify.com/eiv) (community)
- **Stats:** 14 total users, 9 monthly users, 98.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 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** extracts Google search results pages as structured data: organic results with their real URLs, ranks, domains, snippets and dates, plus the **Places** pack, **Top stories**, the **knowledge panel** and **related searches**, from the Web, News or Videos tab. Turn on **Full results** for **AI Overview**, **People also ask** and **ads**. Paste search terms or Google URLs; get one row per results page. No login, no API key, from **$0.40 per 1,000 results pages**.

```json
{
  "input": "best crm software",
  "searchQuery": {
    "term": "best crm software",
    "page": 1,
    "countryCode": "US",
    "languageCode": "en",
    "type": "SEARCH"
  },
  "organicCount": 10,
  "organicResults": [
    {
      "position": 1,
      "title": "Choosing The Best CRM Software In 2026 - Salesforce",
      "url": "https://www.salesforce.com/crm/best-crm/",
      "domain": "salesforce.com",
      "displayedUrl": "www.salesforce.com › crm › best-crm",
      "description": "What is the #1 CRM in the world? Salesforce is consistently named the #1 CRM by IDC for providing world-class apps for every team and a unified platform that ...",
      "date": null,
      "dateText": null
    },
    {
      "position": 2,
      "title": "27 of the Best CRM Software Companies to Know About for 2026",
      "url": "https://solutionsreview.com/crm/2026/01/05/best-crm-companies-to-know-about/",
      "domain": "solutionsreview.com",
      "displayedUrl": "solutionsreview.com › crm › 2026/01/05 › best-crm-companies-to-know-a...",
      "description": "The Best CRM Software Companies for 2026 · Act! · ActiveCampaign · Agile CRM · Apptivo · Bitrix24 · Brevo · Copper · Creatio. Description: ...",
      "date": "2026-01-05T00:00:00.000Z",
      "dateText": "Jan 5, 2026"
    }
  ],
  "relatedQueries": [
    {
      "title": "top 10 crm software",
      "url": "https://www.google.com/search?q=top+10+crm+software&hl=en&gl=us"
    }
  ],
  "hasNextPage": true,
  "pageLayout": "basic"
}
```

**Benchmark: 40 queries, 40 results pages and 393 organic results in 32 seconds at 512 MB (measured on Apify, 2026-10-04).**

### What does Google Search Results Scraper do?

It searches Google the way a person does and turns every results page into clean JSON, CSV or Excel. Give it keywords, operators or ready-made Google URLs, pick a country, language or city, and it returns each page's organic results and the blocks around them. It is built for rank tracking, SEO and content research, lead lists and market monitoring, and as a search tool for AI agents.

- **Any query, any page.** Search terms, Google operators (site:, -word, "exact phrase", intitle:) or pasted Google search URLs with their filters. Up to 100 pages per query.
- **More than organic results.** Places with ratings and reviews, Top stories, knowledge panel facts, direct answers, image strip and related searches come free with every page. The News and Videos tabs work too.
- **AI Overview, People also ask and ads** when you turn on Full results.
- **Real URLs and real ranks.** Every Google redirect is resolved, every result gets its domain, and positions continue across pages, so position 14 means rank 14.
- **Only pay for results.** Queries with no results and pages Google refused return an error row and are never charged.
- **Drop-in for Apify's Google Search Results Scraper.** The same input names (queries, maxPagesPerQuery, countryCode, languageCode, locationUule...) and the same output shape (searchQuery, organicResults, relatedQueries, paidResults, peopleAlsoAsk, aiOverview), so an existing integration works by changing the Actor ID.
- **Built for automation.** Schedules, the Apify API, webhooks, Make, Zapier, n8n, Google Sheets, and AI agents through Apify's MCP server.

### Why it is fast and cheap

Google answers ordinary scripted requests with a JavaScript check instead of results. This Actor asks for Google's lightweight results page, the one Google still serves to basic phones: about 25 KB of plain HTML, readable in a second without a browser. It rotates through many addresses when Google slows one down, so a page costs a fraction of a cent. Only when you ask for AI Overview, People also ask or ads does it fetch Google's full JavaScript page through a premium proxy, and that is priced separately.

### What data can you extract from Google Search?

| Field | Example | What it is |
|---|---|---|
| `organicResults[].position` | `14` | Rank among organic results, counted across pages |
| `organicResults[].title` / `url` / `domain` | `Best CRM Software 2026` / `https://...` / `example.com` | The result, with the real URL and its domain |
| `organicResults[].displayedUrl` | `www.example.com › blog › crm` | Breadcrumb as Google shows it |
| `organicResults[].description` | `We tested 40 CRMs...` | Snippet, without the date |
| `organicResults[].date` / `dateText` | `2026-09-12T00:00:00Z` / `Sep 12, 2026` | Date shown with the result |
| `organicResults[].siteLinks` | `[{ "title": "Pricing", "url": "..." }]` | Sitelinks under the result |
| `organicResults[].averageRating` / `numberOfReviews` | `4.5` / `5027` | Review stars rich snippet |
| `localResults` | `Blue Bottle Coffee, 4.6, 1,234 reviews, Coffee shop` | The Places pack: name, rating, reviews, price level, category, address |
| `topStories` | `{ "title": "...", "source": "Reuters", "dateText": "3 hours ago" }` | Top stories carousel |
| `knowledgeGraph` | `{ "title": "Barack Obama", "type": "44th U.S. President", "attributes": [...] }` | Knowledge panel with its facts |
| `answerBox` | `{ "type": "weather", "text": "62°F Cloudy" }` | Direct answer above the results |
| `relatedQueries` | `best crm software for small business` | Related searches |
| `imageResults` | `{ "imageUrl": "...", "sourceUrl": "..." }` | Image strip |
| `aiOverview` | `{ "content": "...", "sources": [...] }` | AI Overview (Full results) |
| `peopleAlsoAsk` | `{ "question": "Which CRM is best for beginners?" }` | People also ask (Full results) |
| `paidResults` / `paidProducts` | `{ "title": "...", "domain": "hubspot.com" }` | Text and shopping ads (Full results) |
| `searchQuery` | `{ "term": "...", "page": 2, "countryCode": "US" }` | The search that produced the page |
| `hasNextPage` | `true` | Whether Google has another page |
| `input` / `scrapedAt` | `best crm software` / `2026-10-04T16:00:00Z` | Your line and the scrape time |

### How to scrape Google search results

1. Click **Try for free** and type your searches into **Search queries**, one per line (or paste Google search URLs).
2. Pick a **Country** and how many **Pages per query** you want (each page has about 10 organic results).
3. Click **Start**. One page usually takes about a second.
4. Open the **Output** tab: **Overview** shows one row per page, **Organic results** one row per result (ideal for rank tracking and CSV), **Places** one row per business. Download JSON, CSV, Excel or HTML.

### How much does it cost to scrape Google?

You pay per results page returned, and the price drops on higher Apify plans:

| Apify plan | Per 1,000 results pages | With Full results (AI Overview, People also ask, ads) |
|---|---|---|
| Free | $0.60 | $6.10 |
| Starter | $0.50 | $5.00 |
| Scale | $0.45 | $4.45 |
| Business | $0.40 | $4.00 |

- **Rank tracking:** 500 keywords, top 30 results (3 pages each) every week = 6,000 pages a month = **$3.00** on Starter.
- **One-off research:** 2,000 queries, first page only = **$1.00** on Starter.
- A run also costs **$0.00005** to start. Queries with no results and pages Google refused cost nothing.
- Setting a **City** uses Google's full page (the only one where Google applies a city), so those pages cost the Full results price.
- The Free plan's $5 monthly credit covers about **8,000 results pages**.

### Input

```json
{
  "queries": "best crm software\nhow to learn python\nhttps://www.google.com/search?q=coffee+shops&start=10",
  "maxPagesPerQuery": 2,
  "countryCode": "us",
  "languageCode": "en",
  "searchType": "web",
  "quickDateRange": "m6",
  "fullResults": false
}
```

| Field | Default | Notes |
|---|---|---|
| Search queries (`queries`) | `best crm software` | One per line: search terms, operators or Google search URLs |
| Results tab (`searchType`) | Web | Web, News or Videos |
| Pages per query (`maxPagesPerQuery`) | 1 | About 10 organic results per page; your cost cap per query |
| Country (`countryCode`) | United States | Google's gl parameter |
| Interface language (`languageCode`) | country's language | Google's hl parameter |
| City or region (`location`) | none | E.g. `Austin,Texas,United States`; moves local results there (Full results price) |
| Only pages in language / from the country | off | Google's lr and cr filters |
| Date range, From / To date | any time | `d7` = past 7 days, `m6` = past 6 months, or a custom range |
| Only this site, Exact phrase, Words in title / text / URL, Exclude words, File types | none | Added to every query as Google operators |
| SafeSearch, Include omitted results, No spelling correction | off | safe=active, filter=0, nfpr=1 |
| Full results (`fullResults`) | off | Adds AI Overview, People also ask, ads, video carousels, featured snippet |
| Save HTML / Save HTML to key-value store | off | Raw page HTML in the row or as a linked file |
| Concurrency | 5 | Queries processed at the same time |

### Output

Each results page is one row. The **Overview** view shows the key columns, the **Organic results**, **Places** and **Ads** views list one item per row, and every export includes all fields. Rows read with `pageLayout: "basic"` come from Google's lightweight page; `"full"` rows come from the full page and can include `aiOverview`, `peopleAlsoAsk` and `paidResults`.

A query that returns nothing or cannot be read becomes a row with `"recordType": "error"` instead of failing the run:

| `errorCode` | Meaning |
|---|---|
| `NO_RESULTS` | Google found nothing for this search |
| `RATE_LIMITED` | Google kept refusing the request, even after a second try at the end of the run; run the query again later |
| `BLOCKED` | Google refused every address the run tried |
| `PARSE_FAILED` | The page could not be read (please report it) |

Error rows are never charged.

### Tips and limits

- **Google shows about 10 organic results per page** since it removed the 100-results option in 2025, so 100 results means 10 pages.
- **Full results and City or region apply to the Web tab.** The News and Videos tabs always use the standard page (Google shows no AI Overview, People also ask or ads there), and the add-on is not charged.
- **Local results follow the server's location** (Virginia, US) unless you set a **City or region**; the `detectedLocation` field shows which location Google used.
- **AI Overview, People also ask and ads exist only on Google's full page**, so they need Full results. Google does not show an AI Overview for every query, and it shows ads to automated searches far less often than to people: in our tests 3 of 10 commercial searches had ads, informational ones none.
- **Full-results rankings can vary between runs** because Google's full page is fetched through rotating providers; the standard page returns the same order run after run (8-10 of the top 10 in the same position in our repeat tests), which is what rank tracking needs.
- **Google sometimes slows down requests.** The Actor retries on other addresses and once more at the end of the run; a page that still fails is reported, never charged.
- **Hit your spending limit?** The run stops cleanly at your maximum cost per run and keeps everything it collected. Raise the limit in the run options to get more.

### FAQ

#### Is it legal to scrape Google?

This Actor collects only results Google shows publicly, without logging in. Results can contain personal data, which laws such as the GDPR protect: use them only for a legitimate purpose, and ask a lawyer if you are unsure. Google's terms of service restrict automated access, so you are responsible for how you use the data. Google is a trademark of Google LLC; this Actor is not affiliated with or endorsed by Google.

#### Can I use it through the API or with Make, Zapier and n8n?

Yes. Every run can be started through the [Apify API](https://docs.apify.com/api/v2) and returns the dataset as JSON, CSV or Excel. Schedules, webhooks and integrations for Make, Zapier, n8n and Google Sheets are on the **Integrations** tab.

#### Can AI agents use it?

Yes. Agents connected to [Apify's MCP server](https://mcp.apify.com) can find and run this Actor as a Google search tool, with the same per-page pricing.

#### I use Apify's Google Search Results Scraper. Will my integration work?

Yes for the common fields: send the same `queries`, `maxPagesPerQuery`, `countryCode`, `languageCode`, `searchLanguage`, `locationUule`, `site`, `forceExactMatch`, `quickDateRange` and the other filters, and read the same `searchQuery`, `organicResults`, `relatedQueries`, `paidResults`, `peopleAlsoAsk` and `aiOverview` fields. This Actor adds `localResults`, `topStories`, `knowledgeGraph`, `answerBox`, the News and Videos tabs and a `domain` on every result. It does not include the LLM add-ons (AI Mode, ChatGPT, Perplexity, Copilot, Gemini) or leads enrichment.

#### Why did I get fewer results than I asked for?

Google ends many searches before the page limit (`hasNextPage` is false on the last page), or the run reached your maximum cost per run or its timeout. The log says which, and nothing collected before that is lost.

### Related scrapers

- [Keyword Research Scraper](https://apify.com/eiv/keyword-research-scraper): turn one seed into hundreds of real Google, YouTube and Amazon autocomplete keywords, then rank-check them here.
- [SEO Site Checker](https://apify.com/eiv/seo-site-checker): audit the pages that rank, for titles, metadata, speed and broken links.
- [News & Brand Monitoring Scraper](https://apify.com/eiv/news-monitoring-scraper): follow a brand across Google News in any country.
- [Google Ads Transparency Scraper](https://apify.com/eiv/google-ads-transparency-scraper): every ad a competitor runs on Google Search, YouTube and Display.

### Support

Missing a field, or found a query that does not work? Open an issue on the **Issues** tab with the input you used, and it will be looked at quickly.

# Actor input Schema

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

One per line: what you would type into Google, or a Google search URL. Operators work (site:, -word, "exact phrase", OR, intitle:). A pasted URL keeps its filters (tbs, tbm, hl, gl) and its page (start=20 begins on page 3).

## `searchType` (type: `string`):

Which Google tab to scrape: Web results, News (headlines with publisher and date) or Videos.

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

Results pages per query, about 10 organic results each (Google no longer serves more per page). You pay per page, so this is your cost cap per query. Most searches end before page 30.

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

Country whose Google results you want (Google's gl parameter). Default: United States.

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

Language of Google's interface and snippets (hl). Default: the country's main language.

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

Search as if from this place: Google's canonical name, e.g. Austin,Texas,United States or London,England,United Kingdom (an encoded uule works too). Moves local results and the Places pack there. Google applies a city only on its full page, so this turns on Full results (add-on price).

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

Only return pages written in this language (lr). Leave empty in most cases: it can make Google return fewer results.

## `restrictToCountry` (type: `boolean`):

Only return pages Google attributes to the selected country (cr). Off by default.

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

Only results from the last period: h (hour), d (day), w (week), m (month), y (year), optionally with a number: d7 = past 7 days, m6 = past 6 months. Leave empty for any time.

## `afterDate` (type: `string`):

Only results Google dates on or after this day (custom date range). Absolute (2026-01-31) or relative (3 months). Ignored when Date range is set.

## `beforeDate` (type: `string`):

Only results Google dates on or before this day. Absolute or relative. Ignored when Date range is set.

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

Restrict every query to one domain, e.g. reddit.com (adds site:). Skipped for queries that already contain site:.

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

Wrap each query in quotes so Google matches the exact phrase.

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

Every result title must contain each of these words (adds intitle:).

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

Every result must contain each of these words in its text (adds intext:).

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

Every result URL must contain each of these words (adds inurl:). Google applies this loosely.

## `excludeWords` (type: `array`):

Leave out results that contain any of these words (adds -word).

## `fileTypes` (type: `array`):

Only documents of these types (adds filetype:pdf OR filetype:docx).

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

Adds related:<domain>. Google retired this operator, so it rarely changes the results; kept for compatibility. Ignored when Only this site is set.

## `safeSearch` (type: `boolean`):

Filter explicit results (safe=active).

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

Include results Google hides as very similar to others (filter=0).

## `disableAutocorrect` (type: `boolean`):

Search exactly what you typed instead of Google's corrected spelling (nfpr=1).

## `fullResults` (type: `boolean`):

Also return AI Overview, People also ask, text and shopping ads, video carousels and the featured snippet. Uses Google's full page through Apify's Google SERP proxy: charged as the Full results page add-on on top of the page price, and about 5-15 s per page instead of about 1 s.

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

Put each page's raw HTML in the html field. Makes rows much larger.

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

Save each page's HTML in the run's key-value store and link it in htmlSnapshotUrl.

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

How many queries run at the same time.

## `locationUule` (type: `string`):

Same as City or region, under apify/google-search-scraper's field name.

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

Accepted for compatibility with apify/google-search-scraper and ignored: Google's pages come back in the desktop layout.

## `focusOnPaidAds` (type: `boolean`):

Same as Full results, under apify/google-search-scraper's field name.

## Actor input object example

```json
{
  "queries": "best crm software",
  "searchType": "web",
  "maxPagesPerQuery": 1,
  "countryCode": "",
  "languageCode": "",
  "searchLanguage": "",
  "restrictToCountry": false,
  "forceExactMatch": false,
  "safeSearch": false,
  "includeUnfilteredResults": false,
  "disableAutocorrect": false,
  "fullResults": false,
  "saveHtml": false,
  "saveHtmlToKeyValueStore": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

One row per results page (recordType "page"), plus one uncharged row per search that returned nothing or could not be read (recordType "error").

## `organicResults` (type: `string`):

One row per organic result with its rank, URL, domain, snippet and date: the table for rank tracking and CSV export.

## `places` (type: `string`):

One row per business in Google's local pack: name, rating, reviews, category and address.

## `ads` (type: `string`):

One row per text ad (with full results on).

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

Totals for the run: searches, pages, failures, requests and why the run stopped.

# 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 software"
};

// Run the Actor and wait for it to finish
const run = await client.actor("eiv/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": "best crm software" }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eiv/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/I692nrPiOzcDuLSAY/builds/aB0lo299tKxwaKIeZ/openapi.json
