# Google Images Search Results Scraper (`automation-lab/google-images-search-results-scraper`) Actor

Search Google Images by query and export full image URLs, thumbnails, source pages, titles, domains, and exposed dimensions for visual research.

- **URL**: https://apify.com/automation-lab/google-images-search-results-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google Images Search Results Scraper

Export structured Google Images search results for repeat visual research and asset discovery. Enter one or more Google queries and receive full image URLs, Google thumbnails, source pages, titles, source domains, and exposed dimensions in JSON, CSV, Excel, XML, or JSONL.

The Actor runs without a Google API key or login. It supports normal Google search syntax, including quoted phrases and `site:` filters, plus country, language, SafeSearch, image-size, image-type, and usage-rights filters.

### What does Google Images Search Results Scraper do?

For every query, the Actor searches the public Google Images result surface and saves complete result records to the run's default dataset.

Use it to:

- collect visual references for mood boards and editorial research;
- discover the source pages behind image-search results;
- compare product or brand imagery across several queries;
- inspect image dimensions before downstream processing;
- build repeatable image SEO and visual-market research workflows;
- export image links and metadata without manually copying result cards.

The Actor saves metadata and URLs. It does not download or redistribute the image files.

### Who is this Google Images scraper for?

#### Designers and creative researchers

Build reference collections with direct image links, thumbnails, page titles, and source sites.

#### SEO and content teams

Review which source domains and pages appear for an image-search query, and preserve rank positions for later comparison.

#### E-commerce and brand teams

Batch product queries to compare current visual styles, product photography, and publisher coverage.

#### Data and automation teams

Feed typed Google Images records into Sheets, databases, enrichment jobs, computer-vision pipelines, or scheduled Apify workflows.

### Why use this Actor?

- **Complete result context:** full image, thumbnail, source page, title, publisher, and dimensions travel together.
- **Real search filters:** use locale, SafeSearch, size, type, and usage-rights controls.
- **Batch queries:** run up to 50 distinct searches in one task.
- **Bounded output:** set a result limit from 1 to 100 per query.
- **Clean dataset:** duplicate full-image URLs are removed within each query.
- **Fail-closed behavior:** challenge pages and unknown upstream response shapes fail instead of silently returning a misleading empty dataset.
- **Apify-native export:** download the default dataset as JSON, CSV, Excel, XML, or JSONL.
- **No Google credentials:** no API key or account is required.

### What Google Images data can you extract?

| Field | Type | Meaning |
|---|---|---|
| `query` | string | Search query that produced the record |
| `position` | integer | One-based saved-result rank for that query |
| `title` | string | Result title exposed by Google Images |
| `imageUrl` | URL | Full-size image URL exposed in result state |
| `imageWidth` | integer | Exposed full-image width in pixels |
| `imageHeight` | integer | Exposed full-image height in pixels |
| `thumbnailUrl` | URL | Google-hosted result thumbnail |
| `thumbnailWidth` | integer | Exposed thumbnail width in pixels |
| `thumbnailHeight` | integer | Exposed thumbnail height in pixels |
| `sourceUrl` | URL | Source web page associated with the image |
| `sourceDomain` | string | Normalized hostname of the source page |
| `sourceName` | string | Publisher or site name exposed by Google |
| `dominantColor` | string or null | Exposed RGB dominant color, when available |
| `scrapedAt` | ISO timestamp | UTC extraction time |

### How to search Google Images and export results

1. Open the Actor input page.
2. Add one or more searches under **Search queries**.
3. Set **Maximum results per query**. Start with 10–25 while testing.
4. Choose a language and country for localized results.
5. Optionally select SafeSearch, image size, image type, or usage rights.
6. Click **Save & Start**.
7. Open the **Dataset** tab when the run finishes.
8. Preview the thumbnail, title, source, and image dimensions.
9. Export the dataset in your preferred format.

A simple input:

```json
{
  "queries": ["red panda wildlife photography"],
  "maxResultsPerQuery": 25,
  "language": "en",
  "country": "us",
  "safeSearch": "strict"
}
```

### Input parameters

| Input | Required | Default | Description |
|---|---:|---:|---|
| `queries` | yes | — | 1–50 non-empty Google Images queries; duplicates are removed case-insensitively |
| `maxResultsPerQuery` | no | `100` | Maximum unique records saved per query, from 1 to 100 |
| `language` | no | `en` | Two-letter language code, optionally with a region such as `pt-br` |
| `country` | no | `us` | Two-letter country code for result localization |
| `safeSearch` | no | `moderate` | `off`, `moderate`, or `strict` |
| `imageSize` | no | `any` | `any`, `large`, `medium`, or `icon` |
| `imageType` | no | `any` | `any`, `photo`, `face`, `clipart`, `lineart`, or `animated` |
| `usageRights` | no | `any` | `any`, `creative_commons`, or `commercial` |

Search operators are part of each query. For example:

```json
{
  "queries": ["site:nasa.gov \"James Webb Space Telescope\""],
  "maxResultsPerQuery": 20,
  "imageSize": "large",
  "imageType": "photo",
  "country": "us",
  "language": "en"
}
```

### Example Google Images output

This representative record reflects current Actor output:

```json
{
  "query": "red panda wildlife photography",
  "position": 1,
  "title": "Red Panda | Endangered Wildlife Photography Sussex",
  "imageUrl": "http://static1.squarespace.com/static/.../red-panda-wildlife-photographer-sussex-001.jpg?format=1500w",
  "imageWidth": 1200,
  "imageHeight": 838,
  "thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
  "thumbnailWidth": 534,
  "thumbnailHeight": 374,
  "sourceUrl": "https://www.ldpetphotography.com/blog/red-panda-endangered-wildlife-photography-sussex",
  "sourceDomain": "ldpetphotography.com",
  "sourceName": "Pet Photography West Sussex | Lindsay Dobson",
  "dominantColor": "rgb(152,117,94)",
  "scrapedAt": "2026-08-03T02:23:30.888Z"
}
```

Actual rankings and URLs change as Google updates its index.

### How much does it cost to export Google Images results?

The Actor uses pay-per-event pricing:

- **$0.0025 per run start** on every Apify plan;
- **one `image-result` event** for each complete record saved;
- failed, duplicate, rejected, or empty records do not incur an image-result event.

| Apify tier | Price per saved image result |
|---|---:|
| Free | $0.002254 |
| Bronze | $0.001960 |
| Silver | $0.0015288 |
| Gold | $0.001176 |
| Platinum | $0.000784 |
| Diamond | $0.0005488 |

Approximate Free-tier examples:

| Useful output | Approximate Actor charge |
|---:|---:|
| 10 image results | $0.0250 |
| 25 image results | $0.0589 |
| 100 image results | $0.2279 |

These examples include one start event and assume all requested records are successfully saved. A multi-query run may stop below its requested limit when Google exposes fewer useful records.

### Batch visual research workflow

Run related searches in one task:

```json
{
  "queries": [
    "Nike Pegasus 41 product photography",
    "Adidas Ultraboost 5 product photography"
  ],
  "maxResultsPerQuery": 50,
  "safeSearch": "strict",
  "imageType": "photo",
  "language": "en",
  "country": "us"
}
```

Group exported rows by `query`, compare `sourceDomain`, and use `position` to preserve each query's result order.

For recurring work, schedule the same Apify task daily or weekly and store each run's dataset ID in your own comparison workflow. This Actor returns the current search snapshot; it does not calculate changes or send alerts by itself.

### Image SEO research workflow

1. Search a target keyword.
2. Export `position`, `title`, `sourceDomain`, and `sourceUrl`.
3. Group results by source domain.
4. Inspect high-ranking source pages and image dimensions.
5. Repeat with country and language combinations relevant to your audience.

The Actor reports what Google exposes. It does not explain Google's ranking algorithm.

### Integrations

#### Google Sheets

Use an Apify integration to append each completed dataset to a spreadsheet for review by creative, SEO, or research teams.

#### Make, Zapier, and n8n

Trigger a run from a workflow, wait for completion, then route new dataset rows to a DAM, database, or content-review queue.

#### Webhooks

Attach a run-succeeded webhook to notify downstream services with the run and dataset identifiers.

#### Computer-vision pipelines

Send `imageUrl` values to a downstream classifier only after validating source permissions, content type, and download availability.

### Run through the Apify API with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~google-images-search-results-scraper/runs" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["site:nasa.gov James Webb Space Telescope"],
    "maxResultsPerQuery": 20,
    "imageSize": "large"
  }'
```

Use the returned `defaultDatasetId` to fetch rows after the run succeeds.

### Run with JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/google-images-search-results-scraper').call({
  queries: ['red panda wildlife photography'],
  maxResultsPerQuery: 25,
  safeSearch: 'strict',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map(({ title, imageUrl, sourceUrl }) => ({ title, imageUrl, sourceUrl })));
```

### Run with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/google-images-search-results-scraper').call(run_input={
    'queries': ['red panda wildlife photography'],
    'maxResultsPerQuery': 25,
    'safeSearch': 'strict',
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['position'], item['title'], item['imageUrl'])
```

### Use with AI agents through MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/google-images-search-results-scraper"
```

For **Claude Desktop**, **Cursor**, **VS Code**, or another MCP client:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/google-images-search-results-scraper"
    }
  }
}
```

Example prompts:

- "Search Google Images for 20 large red panda wildlife photographs and return their source pages."
- "Find NASA pages ranking in Google Images for James Webb Space Telescope and group results by source domain."
- "Compare product-image source domains for Nike Pegasus 41 and Adidas Ultraboost 5."

### Limits and expected behavior

- Google rankings, titles, dimensions, and URLs can change between runs.
- Some image URLs expire, redirect, block hotlinking, or require source-site headers.
- The Actor does not download image bytes or verify every remote image file.
- Requested limits are maxima, not guaranteed counts.
- Google may expose fewer records for narrow queries or strict filters.
- Pagination is bounded and stops when Google exposes no new complete results.
- Duplicate full-image URLs are removed separately for each query.
- Upstream challenge pages and unknown response shapes fail the run instead of producing a false empty success.
- One transient search request is retried with a fresh proxy session.
- Inputs are limited to 50 queries and 100 records per query to keep runs bounded.

### Troubleshooting

#### Why did I receive fewer results than requested?

The query or filter combination may expose fewer complete records. Try a broader query, set image filters to `any`, or reduce SafeSearch only when appropriate for your use case.

#### Why did the run fail with an upstream response error?

Google may have returned a temporary challenge or changed its response format. Retry later. If the failure persists, share the Apify run URL with support; do not include private tokens.

#### Why does an image URL no longer load?

Google indexes third-party URLs but does not control their availability. The source publisher may move, expire, or block the asset. Use `sourceUrl` to inspect the original page.

#### Does the usage-rights filter guarantee permission?

No. It applies Google's exposed filter only. Verify the license and attribution requirements on each source page before downloading, republishing, training on, or commercially using an image.

### Responsible use and legality

Google Images links to third-party material that may be copyrighted, trademarked, personal, sensitive, or subject to contractual restrictions.

Use this Actor only for lawful purposes. Respect applicable law, source-site terms, licenses, privacy rights, and intellectual-property rights. Minimize collection, avoid prohibited personal-data uses, and do not treat a search-result label as legal permission to reuse an image.

This documentation is practical guidance, not legal advice.

### FAQ

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

No. The Actor searches the public Google Images result surface through Apify infrastructure.

#### Can I search several keywords at once?

Yes. Add up to 50 distinct queries. Each query receives its own one-based positions and per-query result limit.

#### Can I use `site:` and quoted searches?

Yes. Put normal Google operators directly in the query string.

#### Does the Actor return thumbnails and full images?

It returns URLs and exposed dimensions for both. It does not download the files.

#### Can I schedule monitoring?

Yes. Save the input as an Apify task and schedule it. Compare datasets in your downstream workflow; this Actor does not calculate diffs or alerts.

#### Are empty or duplicate rows charged?

No image-result event is charged for a duplicate, rejected, failed, or empty record. The one-time run-start event still applies after valid input and proxy setup.

### Related automation-lab Actors

- [Google Search Scraper](https://apify.com/automation-lab/google-search-scraper) for standard web search result records.
- [Google Shopping Scraper](https://apify.com/automation-lab/google-shopping-scraper) for product-focused Google Shopping results.
- [Bing Images Scraper](https://apify.com/automation-lab/bing-images-scraper) for image-search coverage from another search engine.

Use the Google Images Actor when the primary unit you need is an image result with its full image URL, thumbnail, source page, and dimensions.

# Actor input Schema

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

Google Images queries to run. Search operators such as site: and quoted phrases are supported.

## `maxResultsPerQuery` (type: `integer`):

Stop after saving this many unique image results for each query.

## `language` (type: `string`):

Two-letter language code, optionally with a region, such as en, de, or pt-br.

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

Two-letter country code used for localized Google Images results, such as us, gb, or de.

## `safeSearch` (type: `string`):

Choose how strictly Google filters explicit image results.

## `imageSize` (type: `string`):

Optionally restrict results to a Google Images size category.

## `imageType` (type: `string`):

Optionally restrict results to photos, faces, clip art, line art, or animated images.

## `usageRights` (type: `string`):

Apply Google's usage-rights filter. Always verify licensing on the source page before reuse.

## Actor input object example

```json
{
  "queries": [
    "red panda wildlife photography"
  ],
  "maxResultsPerQuery": 20,
  "language": "en",
  "country": "us",
  "safeSearch": "moderate",
  "imageSize": "any",
  "imageType": "any",
  "usageRights": "any"
}
```

# Actor output Schema

## `overview` (type: `string`):

Open the default dataset overview with image URLs, thumbnails, source pages, titles, and dimensions.

# 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": [
        "red panda wildlife photography"
    ],
    "maxResultsPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/google-images-search-results-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": ["red panda wildlife photography"],
    "maxResultsPerQuery": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/google-images-search-results-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "red panda wildlife photography"
  ],
  "maxResultsPerQuery": 20
}' |
apify call automation-lab/google-images-search-results-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/google-images-search-results-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/piQYTEhRkYi9oC1RT/builds/smYxrQkRbcWfWKzgp/openapi.json
