# Google Condensed SERP Scraper (`googleapi/google-condensed-serp-scraper`) Actor

Extracts structured public Google Search content including organic result metadata, visible images and rich snippets, AI Overview citations, video cards, People also ask answers, and related searches.

- **URL**: https://apify.com/googleapi/google-condensed-serp-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Condensed SERP Scraper

This Actor extracts structured public content from [Google Search](https://www.google.com/search?q=machine+learning) pages into one record per inspected results page. It is useful for research, SEO review, and sending a rich search snapshot to downstream tools or an LLM.

### Verified target and scope

The verified target is the public Google Search /search page on supported Google web domains. The default query is **machine learning**. You can provide search phrases or approved Google Search URLs; a URL must use HTTPS, a supported Google hostname, and the /search path.

The Actor reads public search pages only. It does not log in, solve CAPTCHAs, bypass access controls, evade rate limits, or access private, paid, or authenticated content. Set `renderJavaScript` to `false` to use direct requests; with rendering enabled, an optional Apify proxy applies to browser requests.

### What it extracts

When Google exposes these sections, a record can include:

- the searched phrase, result vertical, and approximate visible result-count label and estimate;
- AI Overview text, titled sections, and citation destinations;
- organic result titles, resolved destinations, displayed breadcrumbs, publisher/domain labels, snippets, visible dates, grouped links, and visible rating, review-count, or price labels;
- result-card images with their public URLs, alt text, positive HTML width/height attributes, and a derived aspect ratio when both dimensions are available; existing thumbnail, favicon, image URL, and image-count fields remain available;
- separately structured sponsored search cards, including advertiser, resolved destination, displayed URL, visible ad copy, grouped links, and card images;
- video titles, destinations, channel/date labels, duration, view-count text, descriptions, and thumbnails;
- structured People also ask questions with expanded answer text and citations when visible;
- related-search text and corresponding Google Search destinations;
- a bounded plain-text condensation.

Google can change its markup, localize sections, omit modules, or block access. Only values visibly exposed by the page are included; unavailable optional fields are omitted, not fabricated.

### Quick start

1. Enter a search phrase or a public Google Search URL in the Input tab.
2. Choose which result sections to include and set page and result limits.
3. Start the Actor and review the search-page record in the Dataset tab.

### Input

Use queries, query, or searchQuery for search phrases. Use startUrls, sourceUrls, urls, or url for approved public Google Search URLs. Explicit URLs take precedence over generated query URLs.

Important input fields and bounds:

| Input | Default | Bound or behavior |
| --- | --- | --- |
| `queries` | `["machine learning"]` | Up to 50 phrases, 1–300 characters each; `query` and `searchQuery` are single-phrase aliases |
| `startUrls` | `[]` | String array of approved HTTPS Google `/search` URLs; `sourceUrls` and `urls` are array aliases, `url` is a single-URL alias; at most 50 unique URLs total |
| `startPage` / `page` | `1` | One-based starting result page, 1–100; a positive `start` offset in a supplied URL takes precedence |
| `maxItems` | `1` | 1–50 output records globally across all sources |
| `maxPages` | `1` | 1–10 pages for each source |
| `maxResults` | `20` | 1–50 organic web results per record |
| `maxVideos` | `10` | 1–30 video cards per record |
| `maxPeopleAlsoAsk` | `20` | 1–50 question cards per record |
| `maxRelated` | `20` | 1–50 related searches per record |
| `maxImages` | `10` | 0–50 result-card images; `0` omits image data |
| `includeOrganic`, `includeSponsoredResults`, `includeVideos`, `includePeopleAlsoAsk`, `includeRelatedSearches`, `includeAiOverview`, `includeImages` | `true` | Boolean controls for whether each section is retained |
| `locale` | `en` | Generated URL `hl` value, at most 20 characters |
| `safeSearch` | `true` | Adds Google's `safe=active` parameter to generated URLs |
| `acceptLanguage` | `en-US,en;q=0.8` | Request language header, at most 120 characters |
| `renderJavaScript` | `true` | Render the public search page; set `false` for direct requests |
| `proxyConfiguration` | omitted | Optional Apify proxy for browser requests; direct requests do not use the proxy |

URL aliases are merged and deduplicated; explicit approved URLs take precedence over generated queries. A URL must be HTTPS, use a supported Google hostname, use the `/search` path, and contain a non-empty `q` parameter. Each output row has the same 21 top-level fields: absent result modules are empty arrays and unavailable optional values are `null`. Images retain structured element metadata in `images[]` alongside the URL and thumbnail fields.

Quick input:

```json
{
  "queries": ["machine learning"],
  "maxItems": 1,
  "maxPages": 1
}
```

Custom URL with selected output sections:

```json
{
  "startUrls": ["https://www.google.com/search?q=machine+learning"],
  "page": 1,
  "maxItems": 1,
  "maxPages": 2,
  "includeImages": false,
  "includeVideos": false
}
```

### Available dataset fields

| Record section | Source-backed fields |
| --- | --- |
| Search context | `searchedPhrase`, `searchType`, visible `resultCountText`, approximate `resultCountEstimate` |
| AI Overview | Full visible text, titled `aiOverviewSections[]`, public `aiOverviewSources[]` citations |
| Organic results | Title, resolved URL, displayed URL, publisher/domain, snippet, visible date, breadcrumbs, grouped result links, rating/review/price labels, rich snippet, favicon, thumbnail, and structured image metadata |
| Sponsored results | Ad headline, advertiser, visible sponsored label and copy, destination, grouped links, source domain, and card media |
| Videos | Title, video URL, channel, publication label, duration, description, view-count label, source domain, and media |
| People also ask / related | Questions, visible expanded answer and citations, related query text and Google Search URL |
| Image results | Image title, destination, publisher/domain, alt text, source dimensions, and derived aspect ratio |
| Things to know | Visible topic/question pairs and any answer citations exposed in the page |
| People also search for | Visible suggestions with approved Google Search URLs |
| What people are saying | Public post/discussion link, visible copy, date, engagement label, and preview images |
| News / shopping / featured / local | Structured source links and visible card details, including price/rating when present |
| Condensed view | `condensedText`, composed only from the retained visible result sections |

Optional modules are empty arrays when absent; individual source values that are not exposed remain unset inside their nested objects. Results have nested JSON objects and arrays; this keeps image, citation, answer, and result-link structure instead of flattening the page into one string. Although the row shape is stable and has 21 top-level fields, no individual Google result page is guaranteed to expose a non-empty value for every module.

### Dataset output

Each dataset row represents one inspected search results page and its visible sections. If Google blocks a page or returns no usable content, the run summary and logs report the issue separately.

Example normal row:

```json
{
  "searchedPhrase": "machine learning",
  "searchType": "web",
  "resultCountText": "About 1,230 results",
  "resultCountEstimate": 1230,
  "aiOverviewText": "Machine learning helps computers learn patterns from data.",
  "aiOverviewSections": [
    { "title": "How it works", "text": "Algorithms learn from examples." }
  ],
  "aiOverviewSources": [
    { "title": "Example Research", "resultUrl": "https://example.test/ml", "sourceName": "example.test" }
  ],
  "organicResults": [
    {
      "title": "Machine Learning Guide",
      "resultUrl": "https://example.test/ml-guide",
      "displayedUrl": "example.test › guides › ml",
      "sourceName": "Example Research",
      "sourceDomain": "example.test",
      "snippetText": "A practical guide to machine learning concepts.",
      "publicationDateText": "2 days ago",
      "breadcrumbTrail": ["example.test", "guides", "ml"],
      "faviconUrl": "https://example.test/favicon.ico",
      "thumbnailUrl": "https://example.test/ml-chart.jpg",
      "images": [
        { "imageUrl": "https://example.test/ml-chart.jpg", "altText": "Machine learning chart", "width": 320, "height": 180, "aspectRatio": 1.7778 }
      ],
      "imageUrls": ["https://example.test/ml-chart.jpg"],
      "imageCount": 1,
      "ratingText": "4.8 out of 5 stars",
      "ratingValue": 4.8,
      "reviewCountText": "235 reviews",
      "reviewCount": 235,
      "priceText": "$24.99",
      "resultLinks": [
        { "title": "Training and evaluation", "resultUrl": "https://example.test/ml-guide/training" }
      ]
    }
  ],
  "sponsoredResults": [
    {
      "title": "Train and deploy machine learning models",
      "resultUrl": "https://example.test/ml",
      "displayedUrl": "example.test › ml",
      "sourceName": "Example Cloud",
      "sourceDomain": "example.test",
      "sponsorLabel": "Sponsored result",
      "snippetText": "Managed training tools for machine learning.",
      "resultLinks": [
        { "title": "Pricing", "resultUrl": "https://example.test/pricing" }
      ]
    }
  ],
  "videos": [
    { "title": "Machine Learning Explained", "videoUrl": "https://www.youtube.com/watch?v=example", "channelName": "Example Channel", "durationText": "12:34", "viewCountText": "12K views" }
  ],
  "peopleAlsoAsk": [
    { "question": "What is machine learning?", "answerText": "Algorithms learn patterns from data.", "sourceTitle": "Example Research", "sourceResultUrl": "https://example.test/definition", "answerSources": [{ "title": "Example Research", "resultUrl": "https://example.test/definition", "sourceName": "example.test" }] }
  ],
  "relatedSearches": [
    {
      "text": "Machine learning course",
      "searchUrl": "https://www.google.com/search?q=machine+learning+course"
    }
  ],
  "imageResults": [
    {
      "title": "Machine learning diagram",
      "resultUrl": "https://example.test/ml-visuals",
      "sourceName": "Example Research",
      "sourceDomain": "example.test",
      "imageUrl": "https://example.test/ml-diagram.jpg",
      "altText": "Machine learning diagram",
      "width": 640,
      "height": 360,
      "aspectRatio": 1.7778
    }
  ],
  "thingsToKnow": [
    {
      "topic": "Types",
      "question": "What are the different types of machine learning?"
    }
  ],
  "peopleAlsoSearchFor": [
    {
      "text": "machine learning algorithms",
      "searchUrl": "https://www.google.com/search?q=machine+learning+algorithms"
    }
  ],
  "whatPeopleAreSaying": [
    {
      "title": "Machine learning discussion",
      "resultUrl": "https://example.test/discussion",
      "sourceName": "example.test",
      "sourceDomain": "example.test",
      "snippetText": "A public discussion about machine learning.",
      "publicationDateText": "2 days ago",
      "engagementText": "120 likes",
      "imageUrls": []
    }
  ],
  "newsResults": [],
  "shoppingResults": [],
  "featuredSnippets": [],
  "localResults": [],
  "condensedText": "Search: machine learning\nWeb results:\n- Machine Learning Guide (Example Research)"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

The run summary and access information are available alongside the dataset in the Output tab.

### Cost and performance

The number of query pages, result limits, and selected sections affect run time and dataset size. Google Search availability and result content can vary. Apify compute or proxy charges depend on your account settings.

### FAQ

#### Can I pass any website URL?

No. This Actor accepts only public Google Search `/search` URLs.

#### Why is a section missing?

Google may omit AI Overview, videos, People also ask, related searches, or other modules depending on query, locale, device, consent state, and current markup. The Actor omits unavailable optional fields.

#### Are result ranks or request counters included?

The dataset contains the result sections exposed by Google. Page counts and collection status are shown in the separate run summary.

#### Does this bypass Google protections?

No. The Actor stops at access boundaries and reports them in the run summary and logs.

### Disclaimer

Use this Actor only for lawful, public-page research and in accordance with Google’s terms, applicable law, and any applicable robots or access policies. Search results and markup are provided by Google and can change without notice. The Actor is not affiliated with Google and does not guarantee completeness, ranking accuracy, availability, or suitability for a particular decision. Do not use it to collect personal data without a lawful basis.

# Actor input Schema

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

Search phrases used to build public Google Search URLs. Defaults to machine learning when no custom URL is supplied.

## `query` (type: `string`):

Compatibility alias for one search phrase.

## `searchQuery` (type: `string`):

Compatibility alias for one search phrase.

## `startUrls` (type: `array`):

Approved public HTTPS Google /search URLs. URL input fields are merged and limited to 50 unique URLs; these take precedence over generated query URLs.

## `sourceUrls` (type: `array`):

Compatibility alias for approved Google Search URLs; URL aliases share a limit of 50 unique URLs.

## `urls` (type: `array`):

Legacy alias for approved Google Search URLs; URL aliases share a limit of 50 unique URLs.

## `url` (type: `string`):

Compatibility alias for one approved Google Search URL; URL aliases share a limit of 50 unique URLs.

## `maxItems` (type: `integer`):

Global maximum number of normal condensed SERP records emitted.

## `maxPages` (type: `integer`):

Bounded number of public Google Search pages to inspect per source.

## `startPage` (type: `integer`):

One-based result page. Google uses a ten-result start offset.

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

Maximum organic web results retained in each condensed record.

## `maxVideos` (type: `integer`):

Maximum public video results retained in each condensed record.

## `maxPeopleAlsoAsk` (type: `integer`):

Maximum public People also ask questions retained.

## `maxRelated` (type: `integer`):

Maximum public related-search suggestions retained.

## `maxImages` (type: `integer`):

Maximum Google-exposed image URLs retained per result card. Set to 0 to omit images.

## `includeOrganic` (type: `boolean`):

Keep structured organic web results.

## `includeSponsoredResults` (type: `boolean`):

Keep public sponsored search-result cards, including advertiser and visible ad copy.

## `includeVideos` (type: `boolean`):

Keep public video result cards.

## `includePeopleAlsoAsk` (type: `boolean`):

Keep public question suggestions.

## `includeRelatedSearches` (type: `boolean`):

Keep public related-search suggestions.

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

Keep the public AI Overview text when the page exposes it.

## `includeImages` (type: `boolean`):

Retain favicon and thumbnail URLs when public Google result cards expose them.

## `acceptLanguage` (type: `string`):

Optional language preference for the public request.

## `locale` (type: `string`):

hl query value used for generated Google Search URLs.

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

Add Google's active SafeSearch parameter to generated URLs.

## `renderJavaScript` (type: `boolean`):

Use ordinary Playwright rendering as the primary transport for Google's dynamic Search page. False selects direct static HTTP. Access boundaries are not retried; no stealth or CAPTCHA handling is used.

## `proxyConfiguration` (type: `object`):

Apify proxy settings reach all browser requests when renderJavaScript is true (the default). Static HTTP mode remains direct and ignores this compatibility setting. Credentials are never logged.

## `page` (type: `integer`):

One-based starting Google result page. page and startPage are compatibility aliases and must match if both are provided.

## Actor input object example

```json
{
  "queries": [
    "machine learning"
  ],
  "startUrls": [],
  "maxItems": 1,
  "maxPages": 1,
  "startPage": 1,
  "maxResults": 20,
  "maxVideos": 10,
  "maxPeopleAlsoAsk": 20,
  "maxRelated": 20,
  "maxImages": 10,
  "includeOrganic": true,
  "includeSponsoredResults": true,
  "includeVideos": true,
  "includePeopleAlsoAsk": true,
  "includeRelatedSearches": true,
  "includeAiOverview": true,
  "includeImages": true,
  "acceptLanguage": "en-US,en;q=0.8",
  "locale": "en",
  "safeSearch": true,
  "renderJavaScript": true,
  "page": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `runHealth` (type: `string`):

No description

## `compatibilitySummary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/google-condensed-serp-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/google-condensed-serp-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 '{}' |
apify call googleapi/google-condensed-serp-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,googleapi/google-condensed-serp-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/S3sNXfPpkbBYmoZji/builds/n9P3FQ0xb9QG2uNqh/openapi.json
