# Google Condensed SERP Scraper

> Get Google search results as one condensed text of titles and snippets, ready for LLM prompts, AI agents and market research. Build the query from market, industry and location.

Actor id `quaking_pail/google-condensed-serp-scraper`. Index of all Epsimo actors: https://epsimo.org/llms.txt

## What it does

### Google Condensed SERP Scraper

A Google SERP scraper that builds a search query from market/industry/location/information fields, fetches Google results pages over HTTP via a SERP proxy (no browser), reads results page-by-page (10 results per page), deduplicates URLs across pages, and concatenates each result's title and snippet into a single condensed text block. The Actor outputs that single consolidated text summary for use in LLM prompts, plus metadata describing the originating search URL, how many result entries were included, and how many results pages were consumed. Keywords: Google search, SERP scraper, condensed results, title+snippet, query composition, pagination, deduplication, SERP proxy, no-browser fetch, low-memory runs, LLM context, market research, lead generation.

### Use cases

- Provide a compact summary of Google results as context for an LLM or AI agent before the agent decides which sites to visit.  
- Generate a first list of companies or prospects in a specific niche and location for sales and growth prospecting.  
- Rapid market research and competitive landscape scanning for a topic or industry.  
- Compare how a query or market appears on Google across different cities or locations by changing the location field.

## Use cases and Limits

From the actor README on the Apify Store.

### Use cases for condensed Google results

- Give an AI agent a compact summary of Google results before it decides which sites to visit.
- Generate a first list of companies in a niche and location for prospecting.
- Compare how a market looks on Google across cities by changing one field.

### How much will it cost to scrape Google results?

You **pay per Google results page; see the Pricing tab** for current prices. There is no subscription and no rental. One page holds up to 10 results, and `pagesUsed` in the output shows how many pages your summary used. The summary row itself is free. Pages that add no new result, retries of blocked pages, and failed runs are not charged. If nothing could be extracted, the run fails with a clear message and no page is charged. A small standard Actor start event also applies. Lower **Maximum Results** to cap the number of pages, or set a maximum cost per run: the Actor then stops before fetching pages your budget does not cover.

The **Pricing** tab is authoritative for current prices, including discounts on higher Apify plans.

### Tips for condensed Google searches

- Lower **Maximum Results** for faster runs. 10 results = 1 Google page.
- Use Google operators in **Domain**, such as `site:linkedin.com/company` or `-jobs`, to sharpen results.
- Google sometimes answers page 2+ of a query with `-keyword` operators with "did not match any documents". The Actor then re-requests that page without the operators and drops results whose title, snippet or URL contains an excluded word or phrase (or that come from an excluded `-site:`). Known limitation: this operator-free list can return fewer results.
- Google blocks some requests. Blocked pages are retried automatically; if a run still fails with "No search results could be extracted", run it again or broaden the query.

### FAQ, disclaimers and support

#### Is it legal to scrape Google search results?

You should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

#### Why did I get fewer results than Maximum Results?

Google sometimes has fewer results for a narrow query, or blocks some pages. The Actor returns what it collected instead of running until the timeout.

#### Why did my run fail?

Google blocked every page or the query had no results. No Google results page is charged in that case. Try again or broaden the query.

#### How do I report a problem?

Open an issue in the **Issues** tab with the run ID. If the Actor saved you time, a rating on the **Reviews** tab helps other users find it.

### 0.9.2 pricing update (October 2026)

- Pricing is now **per Google results page** (`serp-page` event) instead of per summary row. The summary row is no longer charged. See the **Pricing** tab.
- A run that is restarted or migrated by the platform never pushes the summary twice or charges a page twice.

## Input

| Name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| `search_query_base` | string | yes | `"société de conseil"` | - | The base query for the search, representing the market or type of company to target. |
| `domain` | string | yes | `"IA"` | - | The specific domain or industry to target in the search query. |
| `location` | string | yes | `"Paris"` | - | The location to target in the search query. |
| `info_to_retrieve` | string | yes | `"email, website"` | - | The specific information to retrieve, such as email or website. Added to the query in quotes. |
| `max_results` | integer | no | `100` | min 1 | The maximum number of search results to condense into the summary. Google returns 10 results per page, so the Actor fetches at most ceil(max_results / 10) pages (never more than 30 per run) and stops early when Google has no more results. Exclusions such as -jobs in your fields are honored on later pages too: if Google rejects them there, the Actor filters titles and snippets instead. |
| `proxyConfiguration` | object | no | `{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}` | - | Google SERP proxy (default) fetches Google result pages over plain HTTP and is billed per page; other groups are often rate-limited by Google (HTTP 429). |

## Example input

Built from the input schema prefill/default values (the actor publishes no example input).

```json
{
  "search_query_base": "société de conseil",
  "domain": "IA",
  "location": "Paris",
  "info_to_retrieve": "email, website",
  "max_results": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

## Output

| Field | Type | Description |
|---|---|---|
| `searchUrl` | string or null | Google Search URL of the first results page for the generated query |
| `resultsText` | string or null | All collected results condensed into one text, each as 'Title: snippet', separated by ' /**/ ' |
| `resultsCount` | integer or null | Number of results in resultsText (unique by URL, at most Maximum Results) |
| `pagesUsed` | integer or null | Number of Google results pages that contributed at least one result to the summary |

Dataset views: `overview` (Overview).

## Example output item

Built from the `example` values of the dataset schema.

```json
{
  "searchUrl": "https://www.google.com/search?q=example+company+Paris",
  "resultsText": "Example Company - Consulting: Example Company helps teams in Paris... /**/ Example Partners: AI consulting firm...",
  "resultsCount": 18,
  "pagesUsed": 2
}
```

## Pricing

Pay per event, in effect since 2026-10-17 (as of 2026-10-18). Each event below is charged.

| Event | Title | Description | Price USD (FREE tier) |
|---|---|---|---|
| `apify-actor-start` | Actor Start (once per run) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 |
| `serp-page` | Google results page (primary) | Charged once per Google results page (up to 10 results) included in the delivered summary. Failed runs charge nothing. | $0.0087 |

Plan-tier prices for `serp-page`: FREE $0.0087, BRONZE $0.008, SILVER $0.0072, GOLD $0.0064, PLATINUM $0.0064, DIAMOND $0.0064.

Prices are in USD at the Apify FREE plan tier; tiered events can cost less on paid Apify plans (plan-tier prices above). The [Apify Store page](https://apify.com/quaking_pail/google-condensed-serp-scraper) is authoritative: read the current price there instead of hardcoding these values.

## How to run

Run the actor and get its dataset items in one HTTP call (needs an Apify API token in `$APIFY_TOKEN`, sent in the `Authorization` header as Apify recommends ([Apify API authentication](https://docs.apify.com/api/v2))):

```bash
curl -X POST "https://api.apify.com/v2/acts/quaking_pail~google-condensed-serp-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "search_query_base": "société de conseil",
  "domain": "IA",
  "location": "Paris",
  "info_to_retrieve": "email, website",
  "max_results": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}'
```

Apify also accepts `?token=$APIFY_TOKEN` in the URL, but avoid it: URLs end up in logs and shell history.

If the run takes longer than 300 seconds, this endpoint returns HTTP 408 (Request Timeout). For longer runs start the actor with the asynchronous [Run Actor endpoint](https://docs.apify.com/api/v2/act-runs-post) and read the dataset when the run finishes. The `maxTotalChargeUsd` query parameter caps the total cost of a run ([run-sync-get-dataset-items reference](https://docs.apify.com/api/v2/act-run-sync-get-dataset-items-post)).

## Apify MCP

Apify hosts an MCP server at https://mcp.apify.com. The actor id is `quaking_pail/google-condensed-serp-scraper`; the `tools` query parameter loads only that actor as a tool ([Apify MCP server](https://docs.apify.com/platform/integrations/mcp)).

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=quaking_pail/google-condensed-serp-scraper",
      "headers": {
        "Authorization": "Bearer $APIFY_TOKEN"
      }
    }
  }
}
```

Replace `$APIFY_TOKEN` with your Apify API token. Without the `headers` entry the client signs in to Apify with OAuth in the browser instead.

## Links

- Apify Store: [quaking_pail/google-condensed-serp-scraper](https://apify.com/quaking_pail/google-condensed-serp-scraper)
- Sources: [actor API](https://api.apify.com/v2/acts/quaking_pail~google-condensed-serp-scraper), [build API](https://api.apify.com/v2/acts/quaking_pail~google-condensed-serp-scraper/builds/default)
- Data fetched from the Apify API on 2026-10-18
- Build: 0.9.3

## Do not

- Do not hardcode prices: read them on the Apify Store page before a large run.
- Do not put the Apify token in shared URLs, prompts or logs; prefer the `Authorization` header.
- Do not treat the output as verified: it is scraped from public pages and can be incomplete, outdated or wrong.
