# Google Images Scraper (Cheap) (`data_api/google-images-scraper-cheap`) Actor

Google Image Downloader scrapes Google Images for any keyword and returns full-size image URLs, thumbnails, source pages, and dimensions, so you can build datasets, run SEO audits, or collect images without writing a single line of code.

- **URL**: https://apify.com/data\_api/google-images-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Automation, SEO tools
- **Stats:** 2 total users, 1 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. 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Scraper

Saving images off Google one right-click at a time gets old fast, and it never gives you the data underneath each picture. This scraper takes a keyword, runs the Google Images search for you, and hands back a clean row per image with the direct file link, a thumbnail, the page that hosts it, the domain, and the pixel size. Feed it one keyword or a long list and let it page through the results on its own.

![Google Images Scraper](cover.jpg)

### What you get

One row per image, all keys in a fixed order so the data drops straight into a sheet or database. Each record carries:

- **Where it ranked** — `resultRank` (position within its keyword) and `searchTerm` (the keyword that found it)
- **The image itself** — `imageLink` (full-size file) and `previewLink` (Google-hosted thumbnail)
- **The source** — `pageUrl` (page hosting the image) and `pageDomain` (that page's domain)
- **Size** — `pixelWidth` and `pixelHeight` in pixels

### Quick start

1. Press **Try for free** and open the input form.
2. Add your keywords under **Keywords** — one search runs per keyword.
3. Set **Images per keyword** to cap each search, and flip on the **Family-safe filter** if you want adult content screened out.
4. Hit **Start**, then export to JSON, CSV, Excel, or XML once the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **SEO and visual search audits** — see which domains own the image results for a keyword and where you could rank.
- **Design and moodboard research** — pull reference shots for a brief without saving each file by hand.
- **Training data collection** — gather labelled image links with dimensions for a vision model or dataset.
- **Product and market research** — check which styles, brands, and looks dominate a category before you launch.
- **Brand monitoring** — re-run a keyword on a schedule and watch how the image results shift over time.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerms` | array of strings | Yes | Keywords to look up on Google Images. Each one runs as a separate search. Example: `["vintage travel poster", "ceramic coffee mug"]`. |
| `resultsLimit` | integer | No | Most images to return per keyword (1–500). Default `100`. |
| `familyFilter` | boolean | No | Turn on Google SafeSearch to screen out adult imagery. Default `false`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each page request before giving up. Default `180`. |

#### Example input

```json
{
  "searchTerms": [
    "vintage travel poster",
    "ceramic coffee mug"
  ],
  "resultsLimit": 100,
  "familyFilter": false,
  "timeoutSeconds": 180
}
````

### Output

Every image becomes one row, with the keyword and rank attached so you can tell which search produced what. Fields that Google does not expose for a given image come back empty rather than missing, so your columns line up.

#### Example output

```json
{
  "resultRank": 1,
  "searchTerm": "vintage travel poster",
  "imageLink": "https://cdn.example-prints.com/posters/alpine-rail-1932.jpg",
  "previewLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8xkR...",
  "pageUrl": "https://www.example-prints.com/collections/vintage-rail/alpine-1932",
  "pageDomain": "example-prints.com",
  "pixelWidth": 1600,
  "pixelHeight": 2263
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `resultRank` | integer | Where the image sits in the results for its keyword, counting from 1 |
| `searchTerm` | string | The keyword that produced this image |
| `imageLink` | string | Direct link to the full-resolution image file |
| `previewLink` | string | Google-hosted thumbnail link for a quick preview |
| `pageUrl` | string | Web page that publishes the image |
| `pageDomain` | string | Host domain of that page |
| `pixelWidth` | integer | Width of the full image in pixels |
| `pixelHeight` | integer | Height of the full image in pixels |

### Tips for best results

- **Start with one keyword.** Run a single search first to confirm the output fits your pipeline before queuing a long list.
- **Google caps each search near 200 images.** Setting `resultsLimit` higher than that returns as many as Google serves, not more.
- **Raise `timeoutSeconds`** if you see fetch errors on a slow connection or during a heavy batch.
- **Use `familyFilter` for safe content.** Turn it on when results feed a public-facing or client project.
- **Plan dataset size.** Total rows land near `number of keywords × resultsLimit`, so size your run before you start.

### How can I use Google Images data?

**How can I use the Google Images Scraper to build an image training set?**
Add the keywords that describe your classes, set `resultsLimit` per keyword, and run it. Each image comes back with a direct `imageLink`, its `pixelWidth` and `pixelHeight`, and the `pageDomain` it came from, which gives you labelled links and size metadata ready to feed a download script or a vision model.

**How can I scrape Google Images results to see who ranks for a keyword?**
Run the keyword and read the `pageDomain` and `pageUrl` on each row. Sorting by `resultRank` shows which sites Google surfaces first for that visual query, which is useful for spotting competitors and finding image sources worth reaching out to.

**How can I collect reference images for a design brief without saving each one?**
Drop your moodboard keywords into `searchTerms` and export the run as CSV or JSON. You get a tidy list of `imageLink` and `previewLink` values plus dimensions, so you can scan and share references instead of right-clicking through a results page.

**How can I track how Google Images results change over time?**
Schedule the same keywords on a recurring run. Compare `resultRank` and `pageDomain` between runs and you can see when new sites show up in the results or old ones drop off, which is handy for keeping an eye on a visual niche.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, 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.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to look up on Google Images. Every keyword runs as its own search and returns up to the per-keyword cap you set below.

## `resultsLimit` (type: `integer`):

Most images to bring back for each keyword (1-500). Pages are fetched in sequence until this cap is reached. Default `100`.

## `familyFilter` (type: `boolean`):

Switch on to apply Google's SafeSearch and screen out adult imagery. Off by default.

## `timeoutSeconds` (type: `integer`):

Seconds to wait on each page before giving up. Raise it on slow connections. Default `180`.

## Actor input object example

```json
{
  "searchTerms": [
    "vintage travel poster",
    "ceramic coffee mug"
  ],
  "resultsLimit": 20,
  "familyFilter": false,
  "timeoutSeconds": 180
}
```

# 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 = {
    "searchTerms": [
        "vintage travel poster"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/google-images-scraper-cheap").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 = { "searchTerms": ["vintage travel poster"] }

# Run the Actor and wait for it to finish
run = client.actor("data_api/google-images-scraper-cheap").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 '{
  "searchTerms": [
    "vintage travel poster"
  ]
}' |
apify call data_api/google-images-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Images Scraper (Cheap)",
        "description": "Google Image Downloader scrapes Google Images for any keyword and returns full-size image URLs, thumbnails, source pages, and dimensions, so you can build datasets, run SEO audits, or collect images without writing a single line of code.",
        "version": "0.0",
        "x-build-id": "EeVO6fokFUQekZxug"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~google-images-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-google-images-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~google-images-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-google-images-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~google-images-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-google-images-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "searchTerms"
                ],
                "properties": {
                    "searchTerms": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Keywords to look up on Google Images. Every keyword runs as its own search and returns up to the per-keyword cap you set below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsLimit": {
                        "title": "Images per keyword",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Most images to bring back for each keyword (1-500). Pages are fetched in sequence until this cap is reached. Default `100`.",
                        "default": 20
                    },
                    "familyFilter": {
                        "title": "Family-safe filter",
                        "type": "boolean",
                        "description": "Switch on to apply Google's SafeSearch and screen out adult imagery. Off by default.",
                        "default": false
                    },
                    "timeoutSeconds": {
                        "title": "Request timeout (seconds)",
                        "minimum": 100,
                        "maximum": 1200,
                        "type": "integer",
                        "description": "Seconds to wait on each page before giving up. Raise it on slow connections. Default `180`.",
                        "default": 180
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
