# Google Search Results Scraper (SERP)

> Google search results scraper: get organic positions, titles, URLs, snippets, dates and related searches by country and language. No login, pay per page.

URL: https://cliqtomedia.com/actors/google-search-scraper/

Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-search-scraper?fpr=cliqto

Add keywords and get Google results as rows. You get organic results with their positions and related searches. You pay per loaded results page.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify web scraping` in Search queries. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Add search queries, pick a Google country and language, and get the public Google search results (SERP) as one row per result: organic results and related searches, each with its position. No Google login, no API key; you pay per loaded results page, about $0.006 for the first page of one query.

- organic results: position, title, URL, displayed URL, snippet, date and sitelinks (when Google shows them);
- related searches: the "People also search for" list, once per query.

### Good for

- Track where a site ranks for a list of keywords in one country.
- Collect top 10–100 URLs for a topic for SEO or content research.
- See which shops and brands rank for product queries.
- Find related searches to grow a keyword list.

### Not a good fit

- The Actor reads Google's simple HTML results page. It does not return ads, shopping prices, People Also Ask, AI Overviews, featured snippets, maps or image packs.
- Results are not personalised and not tied to a city. A Google Ads account, Search Console data or search volume are not included.
- Google sometimes blocks automated traffic. The Actor changes IP addresses and retries, but it never solves CAPTCHAs (see Troubleshooting).

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.004 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Results page | $0.002 (from $0.0015 on paid Apify plans) | Charged once for each Google results page loaded for a query (about 10 organic results plus ads and related searches). A query with no results costs one page. Error rows are free. |

- One result: about $0.006.
- 1,000 results: about $2.00.
- Every day 100 results, for 30 days: about $6.12 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-search-scraper?fpr=cliqto

## Questions

### Does it return People Also Ask or AI Overviews?

No. It reads the simple Google results page. It gives organic results and related searches. Ads, sitelinks and shopping prices are not included.

### How deep can it go?

Up to 10 result pages per query and up to 500 queries per run.

### Are results personalised or local to a city?

No. Results are for the chosen country and language only.

### Do I need a Google account or API key?

No. The Actor reads public results pages without login or cookies of any account.

### How many results do I get per page?

Usually 9–10 organic results and 8–10 related searches, depending on the query.

### Is the order the same as on google.com?

`position` follows the order on the simple Google results page for the chosen country and language. It can differ a little from a personalised desktop page.

### What does `null` mean?

Google did not show that value, for example no date. It is not zero and not an error.

## Data fields

- `query` (string): Your search query.
- `page` (integer): Google result page (1 = first page).
- `type` (string): organic result or related search (ad is reserved and not written today); null on not_found/error rows.
- `position` (integer): Place among rows of the same type for this query; organic positions continue across pages (page 2 starts at 11 when page 1 had 10).
- `title` (string): Result title or the related search text.
- `url` (string): Result URL. For related: Google search URL. Null when Google hid an organic link and did not reveal it (see statusReason).
- `displayedUrl` (string): Site as Google shows it (domain and breadcrumb).
- `description` (string): Snippet text.
- `date` (string): Date shown before the snippet, as Google prints it (e.g. "Oct 2, 2026", "3 days ago").
- `sitelinks` (array): Links Google shows under a result, as [{title, url}]. They are not separate rows and do not change position. An empty list when Google shows none.
- `price` (string): Always null: the simple Google results page shows no prices.
- `countryCode` (string): Google country used (gl).
- `languageCode` (string): Google language used (hl).
- `searchUrl` (string): Google results page that was scraped.
- `status` (string): complete = a result; not_found = Google returned no results for the query; error = the query could not be scraped. A not_found row is one charged page (Google was queried); error rows are free.
- `statusReason` (string): Plain-English reason for not_found/error rows, or a note on a result (e.g. hidden URL).
- `errorCode` (string): Machine code for error rows, e.g. SOURCE_BLOCKED, DEADLINE_REACHED.
- `fetchedAt` (string): When the page was scraped (ISO 8601).

## Input settings

- `queries` (array, required): What to search on Google, one query per line, e.g. "best running shoes". Google operators such as site:example.com or "exact phrase" work. Up to 500 queries; duplicates are removed.
- `countryCode` (string): Google country (gl parameter): results are ranked for this country. Default: United States.
- `languageCode` (string): Google interface language (hl parameter). It changes labels and slightly the ranking; results in other languages can still appear. Default: English.
- `maxPagesPerQuery` (integer): How many Google result pages to scrape for each query (usually 9–10 organic results per page). Each loaded page is one charged page (a query with no results costs one page). Stops earlier when Google has no next page.
- `includeAds` (boolean): Kept for compatibility. Google's simple results page shows no ads, so this option adds no rows today. Only loaded pages are charged.
- `includeRelated` (boolean): Add rows for "People also search for" / related searches, once per query.
- `proxyConfiguration` (object): Apify datacenter proxy by default. A page that Google refuses on several datacenter IPs is retried through Apify residential proxy in the chosen country. Choose your own proxy group or URLs to turn this off. The Actor never solves CAPTCHAs.

## Step by step on Apify

1. Open the Input tab.
2. In Search queries (`queries`), keep the prefilled `apify web scraping` or add your own queries, one per line.
3. Keep Country `us` and Language `en` (defaults), or choose others.
4. Keep Pages per query (`maxPagesPerQuery`) at `1` (prefill), or set up to `10`.
5. Click Start.
6. Open the Output tab (Dataset) and check `type`, `position`, `title` and `url`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Rank tracking | `queries`, `countryCode`, `maxPagesPerQuery` | organic row | `query`, `position`, `url`, `page` | Schedule + Google Sheets or API |
| SEO content research | `queries`, `languageCode` | organic row | `title`, `description`, `displayedUrl`, `date` | Export CSV / JSON |
| Shop and brand check | `queries`, `countryCode` | organic row | `title`, `url`, `displayedUrl`, `description` | Export to spreadsheet |
| Keyword ideas | `queries`, `includeRelated` | related row | `title`, `url` | Feed back into `queries` |

## Tips

- Use related searches as new keywords for your next run.
- Ask for fewer pages if you only need the top 10.
- Set a maximum charge per run to control cost.

## Limits



- A query with no results costs one page: Google was asked and answered.
- `error` rows (Google refused the page) are free.
- If you set a maximum charge for the run, the Actor stops before it, keeps the rows and ends with status CAPPED.
- Up to 500 queries and 10 pages per query in one run.
- Run time depends on Google's answers: in the latest test, 40 pages took about 7 seconds without blocks. Very large runs were not measured on the current route, so start with a smaller list. After 3,600 seconds the run stops with status CAPPED and keeps all rows; split bigger lists across runs.
- Google decides how many pages a query has; some queries end before page 10.

## Sample result

```json
{
  "query": "coffee machine",
  "page": 1,
  "type": "organic",
  "position": 1,
  "title": "Coffee & Espresso Makers | Macy's",
  "url": "https://www.macys.com/shop/home/kitchen-dining/kitchen/coffee-espresso-makers?id=24732",
  "displayedUrl": "www.macys.com › Home › Kitchen & Dining › All Kitchen",
  "description": "Shop coffee makers at Macy's with stylish, high-quality ...",
  "date": "Oct 9, 2026",
  "sitelinks": [],
  "price": null,
  "countryCode": "us",
  "languageCode": "en",
  "searchUrl": "https://www.google.com/search?q=coffee+machine&hl=en&gl=us",
  "status": "complete",
  "statusReason": null,
  "errorCode": null,
  "fetchedAt": "2026-10-22T04:06:02.872Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/google-search-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/google-search-scraper").call(run_input={
    "queries": [
        "apify web scraping"
    ],
    "countryCode": "us"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/google-search-scraper")
result = tool.invoke({"run_input": {"queries": ["apify web scraping"], "countryCode": "us"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Know what your competitors do](https://cliqtomedia.com/actors/use-cases/competitor-monitoring/): See what your competitors launch, hire, change and advertise. Every week, without opening their sites.
- [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon.

## Similar tools

- [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/)
- [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/)
- [Domain WHOIS (RDAP) & DNS Lookup, No Login](https://cliqtomedia.com/actors/domain-whois-dns-lookup/)
- [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/)
- [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/)
- [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/)
