# Google Search API: Google SERP Scraper & Web Results (`plainrows/google-search-api`) Actor

Google Search API and MCP tool, Google Custom Search API alternative: Google organic results as JSON (position, URL, domain, title, snippet, SERP features) for any query, country, language, device. $0.0024 per query with results plus $0.0003 per result, $0.0026 per extra page of 10, $0.001 per run.

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

## Pricing

from $0.30 / 1,000 organic results

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 API: Google SERP Scraper & Web Results

A **Google Search API** for scripts and **AI agents**: give it **search queries**, get **one row per Google organic result** with its **position, URL, domain, title and snippet**, plus the other blocks Google showed on the page (AI Overview, People also ask, ads, maps...), for the country, language and device you choose (desktop or mobile), up to 100 results per query. One live Google search per query, JSON out: a drop-in **Google Custom Search API (Custom Search JSON API) alternative** with no daily query quota and no search engine ID to set up.

It calls a commercial SERP data API instead of driving browsers: **no proxies, no CAPTCHAs, no Google account, no API key of your own**. Up to five queries run at a time (fewer with deep result pages), a few seconds each. **Queries with no result are free.**

### Typical uses

- **AI agents and RAG**: give an LLM fresh Google results (URL, title, snippet) as an MCP tool, then let it read the pages it needs.
- **SEO**: see who ranks on Google for your keywords, by country and language, desktop or mobile.
- **Research and monitoring**: collect the top Google results for a list of topics, brands or questions on a schedule.
- **Lead and content discovery**: find the sites, articles and forums Google shows for a topic.
- **Exports**: send the rows to Google Sheets, BigQuery, Slack, n8n, Make or Zapier.

### What you get for each organic result

| Field | Description |
|---|---|
| `searchQuery` | The query searched on Google |
| `position` | Organic position on Google (1 = first organic result) |
| `absolutePosition`, `page` | Position among all elements of the page (ads and boxes included); Google results page |
| `url`, `domain` | Result URL and its domain |
| `title`, `description` | Result title and the snippet Google shows |
| `breadcrumb`, `websiteName`, `publishedAt` | Breadcrumb, site name and publication date when Google shows them |
| `resultType` | Element type (`organic`) |
| `serpFeatures` | Other element types on the same page (ai_overview, people_also_ask, related_searches, paid, local_pack, video...) |
| `found`, `status`, `message` | `FOUND` for a billed row; free rows say why: `NO_RESULTS`, `FORMAT_CHANGED`, `PROVIDER_ERROR`, `REJECTED`, `NOT_CHECKED` |
| `country`, `languageCode`, `device`, `searchedAt` | Where, how and when the search ran |

Missing values are `null`, never guessed. Positions are Google's organic rank (ads and boxes are not counted in `position`). `serpFeatures` says which blocks were on the page; their content is not included (for AI Overview text and sources, use [AI Overview Scraper & Tracker](https://apify.com/plainrows/ai-overview-tracker)).

### Input

```json
{
  "queries": ["crm software", "best project management tool"],
  "country": "US",
  "device": "desktop",
  "maxResults": 10
}
```

- **queries** (required): up to 1,000 per run, one Google search each, max 700 characters.
- **country**: US, GB, CA, AU, IE, IN, DE, AT, CH, FR, BE, ES, MX, IT, NL, PT, BR, PL, SE, JP. **languageCode** defaults to the country's main language.
- **device**: `desktop` (default) or `mobile`.
- **maxResults** (default 10): organic results per query, 1 to 100. 10 = the first Google page, which usually holds **7 to 9 organic results** once ads, maps and other boxes take their place. Each further 10 results is one more Google page (see Pricing).

### Pricing

Pay per event, no subscription:

- **Search query with results**: $0.0024, once per query that returns at least one organic result.
- **Organic result**: $0.0003 per result row. A first page of 9 organic results costs about $0.0051.
- **Extra results page**: $0.0026, only if you raise `maxResults` above 10, once per extra page of 10 results Google returned.
- **Actor start**: $0.001 per run.

Queries with no result, queries the data source failed or refused, unreadable answers and queries not reached (budget or timeout) get a free row with `found: false` and the reason. The run never spends more than the maximum cost you set.

**Free Apify plan:** each run searches the first 5 queries, up to 30 results each, so you can test the output. A paid Apify plan removes this limit.

### Good to know

- Results are those of a logged-out user in the chosen country, language and device, not personalized. The same query can move a place or two between runs.
- Advanced search operators (`site:`, `intitle:`, `inurl:`, `filetype:`...) are not supported: such queries are skipped for free and listed in the run summary (`invalidQueries`). Quotes, `-word` and `OR` work as usual.
- To track where one domain ranks for many keywords, use [Keyword Rank Checker](https://apify.com/plainrows/keyword-rank-checker); for Bing results, [Bing Search API](https://apify.com/plainrows/bing-search-api).

### What this is not

- **Not an official Google API**, and not affiliated with or endorsed by Google. It returns the public Google results page as data.
- Not Google Images, News or Maps: organic web results only (see the other PlainRows tools below).

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): queries run, queries with no result, results billed, search fees and extra pages charged, and anything skipped because of the free-plan or budget limit.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~google-search-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["crm software"]}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/google-search-api` and send the rows where you need them.

**AI agents (MCP tool):** add `https://mcp.apify.com?tools=plainrows/google-search-api` to Claude, Cursor or any MCP client, then ask "Search Google for 'crm software' and list the top 10 results".

### FAQ

**Is this the Google Custom Search JSON API?**
No. It returns the real Google results page (what a logged-out user sees), not a Programmable Search Engine index, and needs no Google key or quota.

**Do I pay for queries with no result?**
No. A query with no organic result gets a free `found: false` row.

**Why fewer than 10 results on page 1?**
Google fills part of its first page with ads, maps, videos or People also ask. You only pay per organic result returned.

**Can I get more than the first page?**
Yes, raise `maxResults` up to 100. Each extra page of 10 results Google returns is billed as an extra page.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Bing Keyword Search Volume & CPC](https://apify.com/plainrows/bing-keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Google Trends Keyword Discovery (Rising & Related)](https://apify.com/plainrows/google-trends-keyword-discovery) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Competitor Keywords API (Ranked Keywords)](https://apify.com/plainrows/competitor-keywords-api) · [Bulk Website Traffic Checker](https://apify.com/plainrows/website-traffic-checker) · [SEO Competitors & Keyword Gap Finder](https://apify.com/plainrows/seo-competitors-keyword-gap) · [PPC Competitor Keywords (SpyFu Alternative)](https://apify.com/plainrows/ppc-competitor-keywords) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Backlink API (Referring Domains & Backlinks Data)](https://apify.com/plainrows/backlink-api) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [SEO Audit API (On-Page SEO Checker)](https://apify.com/plainrows/seo-audit-api) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [AI Overview Tracker (Google AI Overview Citations)](https://apify.com/plainrows/ai-overview-tracker) · [Perplexity Search API (Answers & Citations)](https://apify.com/plainrows/perplexity-search-api) · [ChatGPT Search Scraper (Answers & Citations)](https://apify.com/plainrows/chatgpt-search-scraper) · [AI Citations Finder (LLM Mentions in ChatGPT & AI Overviews)](https://apify.com/plainrows/ai-citations-finder) · [Keyword Rank Checker (Google SERP Position)](https://apify.com/plainrows/keyword-rank-checker) · [Bing Search API (Bing SERP & Web Results)](https://apify.com/plainrows/bing-search-api) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Arbeitsagentur Jobs Scraper (Germany)](https://apify.com/plainrows/arbeitsagentur-jobs-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Catho Jobs Scraper (Brazil)](https://apify.com/plainrows/catho-jobs-scraper) · [Vagas.com.br Jobs Scraper (Brazil)](https://apify.com/plainrows/vagas-jobs-scraper) · [Jobs.cz Scraper (Czech Republic)](https://apify.com/plainrows/jobs-cz-scraper) · [Remote Jobs Scraper (Himalayas, RemoteOK, Jobicy)](https://apify.com/plainrows/remote-jobs-aggregator) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Amazon Keyword Research (Search Volume & Reverse ASIN)](https://apify.com/plainrows/amazon-keyword-research) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [AliExpress Scraper](https://apify.com/plainrows/aliexpress-scraper) · [Kleinanzeigen Scraper (Germany)](https://apify.com/plainrows/kleinanzeigen-scraper) · [AutoScout24 Scraper (Cars, Europe)](https://apify.com/plainrows/autoscout24-scraper) · [Kijiji Scraper (Canada)](https://apify.com/plainrows/kijiji-scraper) · [Marktplaats Scraper (Netherlands)](https://apify.com/plainrows/marktplaats-scraper) · [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

### Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

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

One Google search per line, exactly as you would type it. Up to 1,000 queries per run, max 700 characters each. Advanced operators (site:, intitle:, filetype:...) are not supported.

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

Country whose Google results you want.

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

Two-letter language code, e.g. "en" or "fr". Leave empty to use the country's main language (for example German for Switzerland, French for Belgium).

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

Google results as seen on a desktop computer or on a mobile phone.

## `maxResults` (type: `integer`):

How many organic results to return per query: 10 = first Google page (the normal case; Google often shows 7 to 9 organic results on it, the rest being ads, maps or other blocks). Each further page of 10 is billed as an extra results page (see Pricing).

## Actor input object example

```json
{
  "queries": [
    "crm software",
    "best project management tool"
  ],
  "country": "US",
  "device": "desktop",
  "maxResults": 10
}
```

# Actor output Schema

## `results` (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": [
        "crm software",
        "best project management tool"
    ],
    "country": "US",
    "device": "desktop",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/google-search-api").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": [
        "crm software",
        "best project management tool",
    ],
    "country": "US",
    "device": "desktop",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/google-search-api").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": [
    "crm software",
    "best project management tool"
  ],
  "country": "US",
  "device": "desktop",
  "maxResults": 10
}' |
apify call plainrows/google-search-api --silent --output-dataset

```

## MCP server setup

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

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/fgxoDEmezOmWX9x8K/builds/bG0KJuZ3wIhCIP6Ye/openapi.json
