Google Images Scraper - up to 100K per Keyword avatar

Google Images Scraper - up to 100K per Keyword

Pricing

from $1.50 / 1,000 unique image scrapeds

Go to Apify Store
Google Images Scraper - up to 100K per Keyword

Google Images Scraper - up to 100K per Keyword

Google Images scraper tool and Google Image Search API alternative: up to 100,000 full-size image URLs per keyword with pixel dimensions and source pages. No API key.

Pricing

from $1.50 / 1,000 unique image scrapeds

Rating

0.0

(0)

Developer

Thodor

Thodor

Maintained by Community

Actor stats

1

Bookmarked

27

Total users

3

Monthly active users

6 days ago

Last modified

Share

A Google Images scraper tool that returns full-size image URLs with width, height, source page and page title, up to 100,000 images per keyword, where a normal Google Images scraper stops at the first hundred thumbnails. Type a keyword, get every image's original URL and its metadata, then load them into a spreadsheet as CSV, Excel, or JSON. No API key, no browser, no Google Cloud project.

There is no official Google Image Search API to call, and the SERP APIs that stand in for it return roughly the first 100 results per query. This actor is the Google Image Search API alternative for volume work: AI training image datasets, computer vision sourcing, e-commerce image research, and brand monitoring across countries. Scraping Bing instead? The Bing Image Search API Scraper does the same job on Bing.

๐Ÿ“‹ How to scrape Google Images

  1. Type a keyword in Search Query.
  2. Set Max Results to the number of images you want. It caps the run and the bill.
  3. Click Start.
  4. Open the Output tab and click Export for CSV, Excel, JSON, or HTML.

A 250-image sample finishes in seconds.

๐ŸŽ So what do you get?

๐Ÿ–ผ๏ธ Full-resolution image URL๐Ÿ“ Width and height of the original๐Ÿ”— Source page URL
๐Ÿท๏ธ Caption, the source page's title๐ŸŒ Which Google market surfaced it๐Ÿงญ Found by search or via related images
โšก Google's thumbnail URL๐Ÿ” Link to the visually similar images๐Ÿ” Deduplicated across paths

โš–๏ธ Compared to SerpApi and other Google Images scrapers

SerpApi, Zenserp, typical scrapersThis actor
๐Ÿ–ผ๏ธ Images per keywordโŒ ~100, first page onlyโœ… up to ~100,000
๐Ÿ” Related imagesโŒ Never openedโœ… Opened for every result
๐ŸŒ MarketsโŒ Oneโœ… 15
๐Ÿ”— Image URLโŒ gstatic thumbnail, ~250pxโœ… Full-resolution original
๐Ÿ“ Width and heightโŒ The thumbnail'sโœ… The original's
๐Ÿ”‘ AccessโŒ API key, per-request plansโœ… Register on Apify, $5 free monthly credit
๐Ÿ’ต BillingPer requestโœ… Per unique result

Why they stop early. Google's pagination dies around 250 images. Getting past it means opening the "visually similar" page behind each result, which normally needs a browser. Its address turns out to be computable, so this actor fetches it over plain HTTP instead.

Why the URLs are full-resolution. The original is never in the <img> tag, only in a JSON blob behind it, one array after the thumbnail. Anything reading rendered HTML sees the thumbnail and stops.

["https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9โ€ฆ", 259, 194] <- what others return
["https://upload.wikimedia.org/โ€ฆ/2025_Bart_De_Wever.jpg", 333, 250] <- what you get

๐ŸŽฏ Three things people run this for

How
๐Ÿง  AI training image datasetsOne keyword per class label, then the resolution filter below keeps only images big enough to train on, before you download a single file.
๐Ÿ›๏ธ E-commerce image researchBatch product keywords and export one spreadsheet of full-size images with the page each one came from.
๐Ÿ“ˆ Brand monitoring across countriesRun the same keyword with a fixed country to see what really ranks there, so an image that only ranks in Brazil stays out of your German report.

๐Ÿ“ฅ Input

{"search_query": "golden retriever", "max_results": 5000}
  • search_query: the keyword. Required.
  • max_results: default 200. Hard cap on images and on billing.
  • get_related_images: default true. Also collects the visually similar images behind every result.
  • country: default US. The Google market to rank for, 50 supported. Always searched first.
  • expand_markets: default true. Sweeps the other 14 markets once country is exhausted. Set false to keep every result ranked for country.
  • language: default en. Interface language.

There is no fixed cap. Both switches are on by default, so the one number that decides your run is max_results:

What you wantImagesSwitch on
๐ŸŒ As many as possible, anywhere~100,000Related images + Expand markets โœ…
๐Ÿ“ Everything for one country~20,000Related images โœ…, Expand markets โŒ
โšก A quick sample~250Leave max_results at 250

Measured on cat: 19,874 from one market, 28,986 once a second market is added. The 100,000 is the theoretical maximum across all fifteen markets. Your own country is always searched first and supplies ~250 on its own, the same set you'd see typing the query into Google Images, so a low cap gives you a quick look at the output shape before a large run.

๐ŸŒ As many as possible, don't care where from

Sweeps all fifteen markets and stops at max_results. Every row records its market, so you can still filter later. The output no longer represents any single market, which is right for datasets and wrong when local ranking is the point.

{"search_query": "golden retriever", "max_results": 100000,
"get_related_images": true, "expand_markets": true}

๐Ÿ“ Everything for one country

Results stay ranked for one market, for SEO checks and brand monitoring.

{"search_query": "wanderschuhe", "max_results": 20000,
"country": "DE", "language": "de", "get_related_images": true}

๐Ÿ“ค Output

One flat row per image, deduplicated.

Google Images scraper output: full-resolution image URLs with pixel dimensions, source pages and captions for building AI training image datasets

{
"image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/2025_Bart_De_Wever.jpg",
"thumbnail_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR0OZnTrRQLi8&s",
"width": 250,
"height": 333,
"page_url": "https://es.wikipedia.org/wiki/Bart_De_Wever",
"title": "Bart De Wever - Wikipedia, la enciclopedia libre",
"search_query": "bart de wever",
"market": "US",
"depth_level": 0
// HIDDEN: related_link
}

โš ๏ธ title is the source page's title, not alt text. Google doesn't ship the alt attribute in this payload; fetch page_url if you need it. Present on 100% of direct results and 87% of related-image results.

Fields

FieldDescription
image_urlFull-resolution original on the origin server
thumbnail_urlGoogle's gstatic thumbnail
width, heightPixel dimensions of the original
page_urlPage hosting the image
titleThat page's title, the caption Google prints under the result
related_linkLink to visually similar images
search_queryKeyword used
marketGoogle market that surfaced this image
depth_level0 = found by the search, 1 = found via related images

๐Ÿง  Build an AI training image dataset

Training a model needs volume plus enough metadata to filter and attribute, and a standard SERP API gives you ~100 results and a thumbnail URL, which is neither. Here the width and height are the original's, so you can keep only images big enough to train on before downloading any of them:

usable = [r for r in items if (r["width"] or 0) >= 768 and (r["height"] or 0) >= 768]

An image reached through many paths is emitted once, so the set doesn't over-weight popular images. depth_level and market let you balance or stratify it, and page_url plus title are what dataset documentation and licence review need.

โš™๏ธ Use it as a Google Image Search API

Every run is an HTTP endpoint: POST the same JSON as the form and the image rows come back in the response body.

Python

import requests
resp = requests.post(
"https://api.apify.com/v2/acts/thodor~google-image-scraper/run-sync-get-dataset-items",
params={"token": "YOUR_APIFY_TOKEN"},
json={"search_query": "golden retriever", "max_results": 5000},
)
items = resp.json()

Node.js

import axios from "axios";
const { data } = await axios.post(
"https://api.apify.com/v2/acts/thodor~google-image-scraper/run-sync-get-dataset-items",
{ search_query: "golden retriever", max_results: 5000 },
{ params: { token: process.env.APIFY_TOKEN } }
);
console.log(data.length, data[0].image_url);

curl

curl -X POST "https://api.apify.com/v2/acts/thodor~google-image-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"search_query":"golden retriever","max_results":5000}'

Swap run-sync-get-dataset-items for runs to fire async with a webhook when a large run outlives the 5-minute sync window. The apify-client SDK works too, in Python and JavaScript, and the n8n, Make, and Zapier integrations take the same input.

๐Ÿ’ก Tip: no need to write the JSON by hand. Fill in the form on the Input tab, switch the editor from Form to JSON, and copy the result into your code.

๐Ÿค– Use it with AI agents via MCP

The actor is a tool for any assistant that speaks the Model Context Protocol: Claude Code, Claude Desktop, Cursor, VS Code, or your own agent. Add the Apify MCP server once and the agent can search Google Images, filter the rows, and hand you the URLs.

Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com?tools=thodor/google-image-scraper"

Claude Desktop, Cursor, or VS Code

{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com?tools=thodor/google-image-scraper" }
}
}

The client signs in to your Apify account with OAuth the first time it calls the tool.

Example prompts

  • "Use thodor/google-image-scraper to get 2,000 full-size images of 'golden retriever' and keep only the ones at least 1024 pixels wide."
  • "Search Google Images for 'wanderschuhe' in the German market with related images on, and list the ten source domains that appear most often."

๐Ÿ’ฐ How much does it cost to scrape Google Images?

Billing is per unique result, at the rate on the price card on this page. Duplicates and rows without a resolved full-size URL are free. max_results is both the cap and the brake: a run capped at 5,000 bills at most 5,000 images, so set it to the dataset size you actually want.

โ“ FAQ

Is there an official Google Image Search API? No. Google discontinued it in 2011. The nearest option, the Custom Search JSON API, returns at most 10 images per request on a 100-query daily free tier.

Can I use this Google Images scraper for free? Yes. Registering on Apify comes with $5 of free platform credit every month, no credit card needed, enough for real test runs.

Does it download the image files? No. It returns full-resolution URLs and metadata; downloading is a loop over image_url in your own script.

Why doesn't it go deeper than one level of related images? It reaches more, but relevance drops off by the third or fourth level and you start collecting things that aren't your query. That trade shouldn't be made for you. If you need it, open a ticket on the Issues tab and I'll enable it.

Can I use the images commercially? The actor returns URLs and metadata, not licences. Check terms per source via page_url. Nothing here grants rights to the underlying files.

What if Google rate-limits a run? Everything collected is saved and you're only billed for unique results. For very large jobs, several smaller runs beat one enormous one.

๐Ÿ›Ÿ Support

Something not working, or a field missing? Message me in the Issues tab and I'll look into it quickly. I'm a solo dev, so don't hesitate.

Need to know where one image appears online, rather than every image for a keyword? That's the Reverse Image Search API.

  • Thodor