# Google Images Scraper (`socialdataapi/google-images-scraper`) Actor

Google Images Scraper — scrape Google Images search results, including image URLs, source pages, titles, thumbnails, dimensions, and related metadata for image research, content discovery, and data analysis.

- **URL**: https://apify.com/socialdataapi/google-images-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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 Images Scraper — Image Links, Sizes, Thumbnails and Sources

Google Images Scraper extracts image search results from Google Images for any keyword you give it. Each result comes back with the full-size image link, its width and height, the thumbnail link and size, the page that hosts the image, the site name and the page title. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a computer-vision dataset pipeline. **No Google account, cookies or API key needed.** Start with one phrase, then add your whole keyword list.

![Google Images Scraper output: image URL, size, thumbnail and source page as JSON](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/g-google-images-hero.webp)

***

### What data can I extract with Google Images Scraper?

Using this Google Images API, you will be able to extract the following Google Images data:

| | | | |
|---|---|---|---|
| 🖼️ Full-size image link | ↔️ Image width in pixels | ↕️ Image height in pixels | 🌠 Thumbnail link |
| 📐 Thumbnail width | 📏 Thumbnail height | 🌐 Site name (if available) | 🔗 Source page link (if available) |
| 📝 Source page title (if available) | 🔎 Search phrase that found the image | | |

***

### How to use Google Images Scraper

This Actor is for developers, researchers and data teams who want to scrape Google Images into one clean table of image links for a whole list of search phrases.

**Copy to your AI assistant:**

```text
Google Images Scraper (Apify Actor ID: socialdataapi/google-images-scraper, https://apify.com/socialdataapi/google-images-scraper) is an Apify Actor that returns Google Images search results for your search phrases as structured JSON: full-size image link, image width and height, thumbnail link and size, source page link, site name and source page title. Use it whenever someone needs Google image results without cookies, a login, or a browser - building an image dataset for computer vision, checking which sites rank in image results for a keyword, or collecting reference pictures for a mood board. Inputs: queries (string[], search phrases, one per item; blank and duplicate phrases are ignored; required), maxImages (integer, unique images per phrase, 1-100000, default 10), proxyConfiguration (object, Apify Proxy on or off; with it on every attempt goes through Apify Proxy, with it off the first attempt is direct and the next ones use Apify Proxy; the proxy groups and custom proxy URLs in this field are not used). Every row is one image and carries the phrase that found it in query. After the first results for a phrase, later images can be broader, related matches; when Google has no new images the phrase ends early and the log says so. A missing size or text value is null.
```

#### Google Images Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify's MCP server with this Actor preloaded as a tool, and it can call it on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/google-images-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Google Images Scraper in the Apify Store](https://apify.com/socialdataapi/google-images-scraper).
3. Enter the Google Images search phrases you want, one per line.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Google Images Scraper to bulk

For a bulk Google image search, put every phrase into the search phrases list of one run. Up to 4 phrases are searched at the same time, blank lines and duplicate phrases are skipped, and every row is tagged with the phrase it came from, so one run can build a Google Images dataset for a whole keyword list. Rows appear in the Output table while each phrase is still being collected. For recurring work, schedule the run in Apify Console or start it from your own code through the Apify API.

***

### ✨ Features

Google Images Scraper fetches clean, structured image results from Google Images ⚡. It's ideal for computer-vision datasets, image SEO checks, brand research and mood boards — a Google image search scraper and Google image links extractor that skips copying links by hand.

It extracts, per image:

- **Full-size image link** – the direct address of the original image
- **Image width and height** – pixel size of the original image
- **Thumbnail link and size** – the preview Google shows, with its pixel size
- **Source page link** – the web page that hosts the image
- **Site name** – the domain of that page
- **Source page title** – the title of that page
- **Search phrase** – the phrase that found the image

⚡ Duplicates are removed within each phrase, and you set how many images you want per phrase, so you only collect what you need.

***

### Use cases 💡

- **ML engineer** — build a labeled image set per phrase, filtered by image width and height.
- **SEO specialist** — see which source pages and titles rank in image results for a keyword.
- **Brand researcher** — count which site names show up most for a product phrase.
- **Designer** — lay out thumbnails with page titles to build a quick mood board.
- **AI agent builder** — give an agent real, source-linked image links as context mid-conversation.

Building an AI agent? [Connect Google Images Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **150 images for one phrase in about 6 seconds.** A recorded local run returned 150 images for "golden retriever" in 5.9 seconds, and another returned 50 images for two phrases in 4.6 seconds.
- **The full picture behind each image.** A recorded row came back with a 2560 × 1707 original, a 678 × 452 thumbnail, the source page link, its site name and the page title "Golden Retriever: Pros, Cons & Diet Guide | Ollie".
- **10 fields, one row per image.** Every row has the same 10 fields, and up to 100,000 unique images can be requested per phrase.

***

### ⬇️ Input

![Google Images Scraper input: search phrases, images per phrase and proxy](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/g-google-images-input.webp)

Give it a list of search phrases and it will extract image URLs from Google for each one; the search phrases field is required. You can also set how many images you want per phrase and whether to use Apify Proxy.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `queries` | Yes | Array of strings | Search phrases, one per line. Each phrase is searched separately; blank lines and duplicates are ignored. | `["golden retriever", "mountain lake"]` |
| `maxImages` | No | Integer | Unique images to collect per phrase. Default 10, minimum 1, maximum 100,000. Later images can be broader, related matches. | `25` |
| `proxyConfiguration` | No | Object | Apify Proxy on (every attempt through Apify Proxy, recommended) or off (first attempt direct, then Apify Proxy). The Actor chooses its own proxy settings; selected proxy groups and custom proxy URLs are not used. | `{"useApifyProxy": true}` |

A run with no search phrase, or with a list item that isn't text, stops right away with a clear status message and produces no rows.

#### Free plan limits

Users on the Apify free plan can fetch up to 20 images per run (all search phrases together) and 200 images per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "queries": ["golden retriever", "mountain lake"],
  "maxImages": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

***

### ⬆️ Output

![Google Images Scraper output: one row per image with 10 fields](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/g-google-images-output.webp)

Every image is one typed, normalized JSON item with the same 10 fields on every run; a size or text value Google doesn't give is null. Export the dataset as JSON (default), CSV or Excel — Google Images to CSV takes one click — and the key-value store also keeps the rows grouped by phrase under the `OUTPUT` key.

#### Example output

```json
[
  {
    "query": "golden retriever",
    "imageUrl": "https://blog.ollie.com/wp-content/uploads/250506_Livingroom_SHOT-10_0173_FR-scaled.jpg",
    "imageWidth": 2560,
    "imageHeight": 1707,
    "thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSe1mLcW_M8xRI0J5UcnG6soPw9kd8XQOgz7Y4sOLFZoA&s=10",
    "thumbnailWidth": 678,
    "thumbnailHeight": 452,
    "origin": "blog.ollie.com",
    "contentUrl": "https://blog.ollie.com/breed-deets-golden-retriever/",
    "title": "Golden Retriever: Pros, Cons & Diet Guide | Ollie"
  },
  {
    "query": "mountain lake",
    "imageUrl": "https://as1.ftcdn.net/v2/jpg/00/17/93/08/1000_F_17930897_h6h7BKjPN2Tjrkm2lwF3t45ZQPz5htGE.jpg",
    "imageWidth": 662,
    "imageHeight": 1000,
    "thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTmFTKTHov7TsE4pozRdBphHwNuoLn9cMiu42HpgX6e5Q&s=10",
    "thumbnailWidth": 363,
    "thumbnailHeight": 550,
    "origin": "www.posters.cz",
    "contentUrl": "https://www.posters.cz/mountain-lake-f17930897?srsltid=AU7gw4UWVNFzGlmA27F9J_-S3X2O_ooOSIdIzDJ7YJbp7xhn0ge51a6C",
    "title": "Plakát Mountain lake – Obraz na Zeď | Posters.cz"
  }
]
```

***

### How does it work?

As a Google image results scraper, the Actor reads the public Google Images results page the way a logged-out visitor sees it, so no Google account is involved. Requests go through Apify Proxy: with the proxy switched on, every attempt uses it; with it switched off, the first attempt goes out directly and the next attempts use Apify Proxy. When a page needs it, a real browser opens it and handles rendering on its own. Each phrase gets up to 3 attempts with growing waits between them. A phrase that still fails produces no rows, is named in the run's status message, and the other phrases carry on; if every phrase fails and nothing was collected, the run is marked as failed so you notice. Only publicly visible data is returned — links and details, never the image files — and every row keeps the same 10 fields even when Google changes how its pages look.

***

### How do you integrate Google Images Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### Using Google Images Scraper with the Apify API

```python
import requests

DATASET_ID = "your-run-dataset-id"   # shown on the run's Storage tab
items = requests.get(
    f"https://api.apify.com/v2/datasets/{DATASET_ID}/items",
    params={"token": "APIFY_TOKEN", "format": "json"},
).json()
for item in items:
    print(item["imageUrl"], item["imageWidth"], item["imageHeight"])
```

*Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.*

#### MCP integration for AI agents

Register Apify's MCP server once:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/google-images-scraper"
```

This registers Google Images Scraper as a tool your agent can call directly. Compatible clients include Claude Code, Cursor and Windsurf, so an agent can run a Google image search and use the image links mid-conversation.

#### No-code tools (n8n, Make, LangChain)

- **n8n** — use the Apify node ("Run an Actor") with this Actor, or the HTTP Request node pointed at the run's dataset items URL with your token.
- **Make** — use the Apify app's "Run an Actor" module, then "Get Dataset Items" to pass the image rows to the next step.
- **LangChain** — load a finished run's rows with `ApifyDatasetLoader` from `langchain-apify`, using the run's dataset ID.

***

### Is it legal to scrape Google Images data?

Collecting publicly available search results is generally lawful, although Google's Terms of Service restrict automated access. This Actor returns only publicly available data — what any user sees without logging in — and returns links and page details, not the image files. The images belong to their owners, so reusing or redistributing them is a separate copyright question. Under GDPR, scraping public data is generally permissible, but storing and using it must comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Google Images Scraper return?

Each row has the full-size image link, image width and height, thumbnail link, source page link and page title, plus the thumbnail size, site name and the search phrase. See [the data fields section](#what-data-can-i-extract-with-google-images-scraper).

#### Does Google Images Scraper require a Google Images account or login?

No. Only public Google Images results are extracted, and no credentials, cookies or API key are needed.

#### How fast does Google Images Scraper run?

A recorded local run returned 150 images for one phrase in 5.9 seconds, and 50 images for two phrases in 4.6 seconds. Results are collected live from Google, not from a cache.

#### What happens if an image is private or doesn't exist?

Only images Google shows publicly can come back, and a missing size or text value is null in the row. A phrase that is blocked after 3 attempts produces no rows and is named in the status message; skip or retry it in your code by checking which phrases have rows.

#### Can I scrape multiple Google Images phrases at once?

Yes. Put every phrase in the search phrases list; up to 4 are searched at the same time and every row carries its phrase.

#### Does Google Images Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Google Images Scraper is available as an MCP tool through Apify's MCP server. Register it in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/google-images-scraper"`; any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Google Images Scraper return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names. No HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.

#### What happens when Google Images changes its layout or updates its anti-bot system?

The actor is maintained. When Google Images changes, the actor is updated — your calls keep returning the same JSON schema with no changes on your end.

#### Can I use Google Images Scraper without managing proxies or browser infrastructure?

Yes. Apify Proxy, retries and the browser run on the actor's side. You send one request and get structured JSON back. No proxy accounts, no headless browser setup, no maintenance.

#### Which Google Images image fields work best for AI training data and RAG indexing?

For RAG, use the text-rich fields: the source page title, site name and search phrase. For training data, use the full-size image link with the image width and height and the thumbnail size. All fields are plain strings and integers (or null when Google gives no value), so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know through the Actor's Issues tab in Apify Console. Every report is read, and fixes ship as Google changes.

# Actor input Schema

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

Search phrases to collect images for (for example nature, product shots, logos), one per line. Each phrase is searched separately. Blank lines and duplicate phrases are ignored. At least one phrase is required.

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

How many unique images to collect for each phrase (default 10). For larger numbers the Actor keeps searching for more images of the same phrase, so later images can be broader, related matches; duplicates are removed. Free plan: up to 20 images per run (all phrases together) and 200 per month; paid plans have no limit.

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

Switch the proxy on to send every attempt through Apify Proxy (recommended). When it is off, the first attempt goes out directly and the next attempts use Apify Proxy if it fails. The Actor chooses its own Apify Proxy settings that work with Google: the proxy groups you select here and custom proxy URLs are not used.

## Actor input object example

```json
{
  "queries": [
    "nature"
  ],
  "maxImages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped image rows (query, imageUrl, title, dimensions, thumbnail, contentUrl, origin) in the Actor's default dataset.

## `outputSnapshot` (type: `string`):

JSON object under the OUTPUT key: one entry per query holding the list of image rows for it (an empty list when the query failed). Updated after each finished query.

# 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": [
        "nature"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "GOOGLE_SERP"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/google-images-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": ["nature"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["GOOGLE_SERP"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/google-images-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 '{
  "queries": [
    "nature"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}' |
apify call socialdataapi/google-images-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialdataapi/google-images-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/AN1UHFemNWyqyoDLG/builds/qP5It8isfVbu6xKzx/openapi.json
