# Google Images Scraper + Reverse Image Search (`vncntlabs/google-images-scraper`) Actor

Scrape Google Images by keyword (image URL, page, title, source site, thumbnail) with size, type, color, transparent and license filters, or reverse-search your images to find where they appear online: Etsy, Amazon, Redbubble and more. Only-new alerts. Pay per result.

- **URL**: https://apify.com/vncntlabs/google-images-scraper.md
- **Developed by:** [VNCNT Labs](https://apify.com/vncntlabs) (community)
- **Categories:** E-commerce, SEO tools, For creators
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 1,000 images

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 + Reverse Image Search

Two tools in one Actor:

1. **Google Images scraper**: search Google Images for any keyword in 70+ countries and get each image's **direct image URL, page URL, title, source site and thumbnail**, in Google's order. Filter by **size, type (photo, clip art, line drawing, GIF), color, transparent background, time and usage rights (Creative Commons)**, keep or drop sites, up to 200 images per keyword.
2. **Reverse image search**: give it image URLs and find **where each image appears online**: Google Lens visual matches and pages with matching images, each flagged as **marketplace** (Amazon, Etsy, eBay, Redbubble, TeePublic, Temu, Shein, AliExpress, Walmart, Zazzle, Spreadshirt, Society6...), **stock site** or **social**. Ignore your own shop, keep only marketplace matches, and run it on a schedule with **only-new matches** to get alerted when a copy of your design shows up.

Built for:

- **Print-on-demand sellers, artists and photographers**: find copies of your designs and photos on marketplaces, with links to report them.
- **Ecommerce and brand teams**: spot resellers and counterfeit listings that reuse your product photos.
- **Designers, marketers and AI/data teams**: image research, mood boards, trend research and image datasets with source links.

You pay **per image delivered** (keyword search) and **per image reverse-searched that found matches**. Searches with no results, failed requests and filtered-out results are free.

### What you get

| Row (`type`) | What's in it | Charged |
|---|---|---|
| `image` | `keyword`, `position`, `title`, `alt`, `sourceName`, `domain`, `pageUrl`, `imageUrl` (original image), `imageDomain`, `thumbnailUrl`, `googleRank`, `country`, `language` | `image` |
| `match` | `imageUrl` (your image), `position`, `matchType` (`visual_match` or `page`), `pageUrl`, `domain`, `siteType` (`marketplace`, `stock`, `social`, `other`), `siteName`, `marketplace`, `title`, `snippet`, `thumbnailUrl`, `isNew` (monitor mode) | included in `reverse-search` |
| `keyword` | one per keyword: status, images delivered, top sites, related searches, Google Images link | free |
| `reverse-search` | one per image URL: status, matches, marketplace matches by marketplace, top sites, ignored and already-seen counts, Google Lens link | `reverse-search` (only with matches) |

### Input examples

Transparent clip art, large, Creative Commons only:

```json
{ "keywords": ["cute cat clipart"], "imageType": "clipart", "imageColor": "transparent", "imageSize": "large",
  "usageRights": "creative_commons", "maxImagesPerKeyword": 100 }
```

Find copies of your designs on marketplaces, ignoring your own shop:

```json
{ "imageUrls": ["https://yourshop.com/images/design-1.png", "https://yourshop.com/images/design-2.png"],
  "ignoreDomains": ["yourshop.com"], "marketplacesOnly": true }
```

Weekly design-theft monitor (schedule it; you pay only when new copies appear):

```json
{ "imageUrls": ["https://yourshop.com/images/design-1.png"], "ignoreDomains": ["yourshop.com"],
  "onlyNewMatches": true, "monitorId": "my-designs" }
```

**Tips**

- Image URLs must be **public** links to the image file (right-click an image, "Copy image address"). Mockup photos work, but the flat design file usually gives the most matches.
- Some hosts block automated image fetching (Wikimedia, for example); those images come back with `no_matches` and are not charged.
- `thumbnailUrl` of a match is a preview hosted by the data provider; open `pageUrl` to see the listing.
- **Only new matches** keeps one list of seen pages per image (per **Monitor name** if you set one) in your Apify account (key-value store `google-images-monitor`).
- Search operators such as `site:` are not supported; use **Only these sites** / **Exclude sites**.

### Output examples

Image search result:

```json
{
  "type": "image", "keyword": "mountain landscape", "position": 1,
  "title": "Watercolor Mountain Landscape Tutorial: Step-by-Step Guide", "sourceName": "Esperoart Tutorials",
  "domain": "esperoart.com", "pageUrl": "https://www.esperoart.com/mountain-landscape-watercolor-tutorial/",
  "imageUrl": "https://www.esperoart.com/wp-content/uploads/2024/12/Mountain-Landscape-16x12in-40x30cm.webp",
  "thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...", "googleRank": 1,
  "country": "United States", "language": "en", "chargedEvents": ["image"]
}
```

Reverse search match:

```json
{
  "type": "match", "imageUrl": "https://images.teepublic.com/derived/production/designs/11030692_1/...jpg",
  "position": 4, "matchType": "visual_match", "domain": "redbubble.com", "siteType": "marketplace",
  "siteName": "Redbubble", "marketplace": "Redbubble",
  "pageUrl": "https://www.redbubble.com/i/throw-pillow/Everything-better-with-Salt-Surf-Retro-sunset-waves-by-shantiru/49589073/xwxm",
  "thumbnailUrl": "https://api.dataforseo.com/cdn/i/...", "isNew": null
}
```

The dataset has four views: **Overview**, **Image search results**, **Reverse search matches** and **Searches summary**. Export to CSV, Excel or JSON, or send new matches to Slack or email with Apify integrations.

### Pricing (pay per event)

| Event | When it is charged |
|---|---|
| Actor start | once per run |
| `image` | one image delivered from a keyword search |
| `reverse-search` | one image URL reverse-searched that returned at least one match (in monitor mode: at least one new match). All its matches are included. |

You are not charged for:

- searches with no results, images Google couldn't fetch, and failed requests;
- images and matches removed by your site filters, your own domains or the marketplaces-only filter;
- in monitor mode, images with no new matches;
- summary rows and skipped inputs;
- anything beyond your run's maximum charge. The run stops cleanly and lists what it didn't process.

**Apify free plan:** 2 keywords x 100 images and 3 reverse image searches per run. Any paid Apify plan unlocks up to 100 keywords x 200 images and 100 reverse searches per run.

### FAQ

**Is a match proof that someone copied my design?** No. Google returns visually similar images too. Treat matches as leads, open `pageUrl`, and report confirmed copies through each marketplace's intellectual-property form.

**Can I download the images?** You get the original `imageUrl`. Images belong to their owners; check the license on the source page before reusing one.

**How many matches does a reverse search return?** Usually about 60 visual matches plus a handful of matching pages, depending on the image.

**Which countries?** 70+ Google editions; results and marketplaces shown follow the selected country and language.

**Is this an official Google API?** No. This Actor uses DataForSEO's licensed API and is not affiliated with or endorsed by Google.

# Actor input Schema

## `keywords` (type: `array`):

One Google Images search per line (up to 100). Leave empty if you only want reverse image search.

## `imageUrls` (type: `array`):

Public image links (jpg, png, webp...), up to 100. For each image you get the pages where Google finds it or visually similar images, with marketplaces flagged. Use it to find copies of your designs, photos or products.

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

Google country edition.

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

Optional language code (en, de, fr, es, pt-BR...). Defaults to the country's main language.

## `maxImagesPerKeyword` (type: `integer`):

Up to 200 per keyword (Google's first 200 image results). Add keyword variations for more.

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

Google Images size filter.

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

Google Images type filter.

## `imageColor` (type: `string`):

Full color, black and white, transparent background (PNG cut-outs) or a main color.

## `timeRange` (type: `string`):

Only images Google found in this period.

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

Google's license filter. Always check the license on the source page before reusing an image.

## `includeDomains` (type: `array`):

Optional, e.g. <code>etsy.com</code>. Keeps only images from these sites (other images are not charged).

## `excludeDomains` (type: `array`):

Optional. Drops images from these sites (not charged).

## `ignoreDomains` (type: `array`):

Matches on these domains are skipped, e.g. your shop, <code>yourbrand.com</code> or your Etsy shop's domain. Use it so only other people's copies show up.

## `marketplacesOnly` (type: `boolean`):

Keep only matches on marketplaces and print-on-demand sites (Amazon, Etsy, eBay, Redbubble, TeePublic, Temu, Shein, AliExpress, Walmart, Zazzle, Spreadshirt, Society6...).

## `maxMatchesPerImage` (type: `integer`):

Google usually returns about 60 visual matches plus matching pages.

## `onlyNewMatches` (type: `boolean`):

For scheduled runs: remembers the matches from previous runs and returns only new pages. An image with no new matches is not charged. History is kept in your Apify account (key-value store 'google-images-monitor').

## `monitorId` (type: `string`):

Optional. Keeps this monitor's history separate, e.g. <code>my-shop-designs</code>.

## Actor input object example

```json
{
  "keywords": [
    "retro sunset surf t-shirt design"
  ],
  "country": "United States",
  "maxImagesPerKeyword": 100,
  "imageSize": "any",
  "imageType": "any",
  "imageColor": "any",
  "timeRange": "any",
  "usageRights": "any",
  "marketplacesOnly": false,
  "maxMatchesPerImage": 100,
  "onlyNewMatches": false
}
```

# Actor output Schema

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

No description

## `matches` (type: `string`):

No description

## `all` (type: `string`):

No description

## `summary` (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 = {
    "keywords": [
        "retro sunset surf t-shirt design"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vncntlabs/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 = { "keywords": ["retro sunset surf t-shirt design"] }

# Run the Actor and wait for it to finish
run = client.actor("vncntlabs/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 '{
  "keywords": [
    "retro sunset surf t-shirt design"
  ]
}' |
apify call vncntlabs/google-images-scraper --silent --output-dataset

```

## MCP server setup

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